UML,全称 Unified Modeling Language统一建模语言。而UML图分为用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9种图。

UML 类图中有六种关系,分别是依赖关系、关联关系、聚合关系、组合关系、实现关系、泛化关系。在JS中,其中泛化关系和关联关系比较常用,后续主要讲这两个关系。

一、类图

在类图中,类的成员变量和方法前面的修饰符有 public、private、protected、default,在 UML 类图中分别用 +、-、#、~ 表示。如图所示:

  • 第一行写的是类的名字;
  • 第二行写的是类所有的属性
  • 第三行写的是类所有的方法

企业微信20210611102009.png

举例:

  1. class People {
  2. name: string;
  3. private age: number;
  4. protected weight: number;
  5. constructor(name, age, weight) {
  6. this.name = name;
  7. this.age = age;
  8. this.weight = weight;
  9. }
  10. getInfo() {
  11. console.log(`My name is ${this.name}`);
  12. this.getAge();
  13. }
  14. private getAge() {
  15. console.log(`My age is ${this.age}`);
  16. }
  17. protected getWeight() {
  18. console.log(`My weight is ${this.weight}`);
  19. }
  20. }
  21. const xiaoming = new People('Li Lei', 15, 120);
  22. xiaoming.getInfo();

People 类的相应UML类图如下: UML 类图 - 图2

二、JS中常用关系

  • 泛化关系

泛化关系其实就是父子类之间的继承关系,表示一般与特殊的关系,指定子类如何特殊化父类的特征和行为。
在UML类图中,用带空心三角箭头的实线来表示泛化关系,箭头从子类指向父类

  • 关联关系

关联关系是对象之间的一种引用关系,表示一个类和另外一个类之间的联系,如老师和学生,丈夫和妻子等。
关联关系有单向和双向的。在UML类图中,单向关联用一个带箭头的实线表示,箭头从使用类指向被关联的类,双向关联用带箭头或者没有箭头的实线来表示。

举例:

  1. class People {
  2. constructor(name, house) {
  3. this.name = name;
  4. this.house = house; // 引用另外一个类
  5. }
  6. say() {}
  7. }
  8. class A extends People {
  9. constructor(name, house) {
  10. super(name, house);
  11. }
  12. say() {
  13. alert('I am A');
  14. }
  15. }
  16. class B extends People {
  17. constructor(name, house) {
  18. super(name, house);
  19. }
  20. say() {
  21. alert('I am B');
  22. }
  23. }
  24. class House {
  25. constructor(city) {
  26. this.city = city;
  27. }
  28. showHouse() {
  29. alert(`house is in ${this.city}`);
  30. }
  31. }
  32. let aHouse = new House('杭州');
  33. let a = new A('aaa', aHouse);
  34. console.log(a); // a 有房子
  35. let b = new B('bbb');
  36. console.log(b); // b 无房子

上述示例,既有泛化关系,又有关联关系。其UML类图如下: UML 类图 - 图3 参考: