我们在阅读开源项目时,总是希望能比较高效的整理清楚项目中的各个类之间的关系,那么有没有相应的工具能高效、简洁的表示清楚类关系呢?UML类图就是一个可以帮我们解决此类问题的工具或者方法。

UML类图是一种结构图,用于描述一个系统的静态结构。类图以反映类结构和类之间关系为目的,用以描述软件系统的结构,是一种静态建模方法。类图中的类,与面向对象语言中的类的概念是对应的。

一、类结构

在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三层,以此放置类的名称、属性和方法。

:::info

  • 一般类的类名用正常字体粗体表示,如上图。
  • 抽象类名用斜体字粗体,如User。
  • 接口则需在上方加上<>。 :::

属性和方法都需要标注可见性符号

:::info +代表public
#代表protected
-代表private。 :::

另外,还可以用冒号:表明属性的类型和方法的返回类型,

:::info 如+name:string、+getName():string。
当然,类型说明并非必须。 :::

image.png
UML类图 - 图2

总结:如上所示在UML类图中大致有6种关系(自关联,双向关联这里没有列出来),
类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。
**

二、类与类之间的关系

2.1 继承

继承关系也称泛化关系(Generalization),用于描述父类与子类之间的关系。父类又称作基类,子类又称作派生类。

继承关系中,子类继承父类的所有功能,父类所具有的属性、方法,子类应该都有。子类中除了与父类一致的信息以外,还包括额外的信息。

例如:公交车、出租车和小轿车都是汽车,他们都有名称,并且都能在路上行驶。

依赖(dependency)

  可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用。用带虚线的箭头。
  UML类图 - 图3

 关联(association)
  他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
UML类图 - 图4
依赖和关联区别:我用锤子修了一下桌子,我和锤子之间就是一种依赖,我和我的同事就是一种关联。依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系。关联是类之间的一种关系,例如老师教学生,老公和老婆这种关系是非常明显的。依赖是比较陌生,关联是我们已经认识熟悉了。

 

https://www.jianshu.com/p/38489621d218 https://juejin.im/post/5d318b485188255957377ac3#heading-1 https://juejin.im/post/5b9526c1e51d450e69731dc2#heading-22