日期:2022年5月6日标签:Developer

UML 类图 #

写代码已经有好几年了,工作中经常会用 uml 类图去梳理代码结构,但是我从来没有认真去看过 uml 的详细内容。依赖、聚合、组合这些概念的区别,很多教程都没有讲清楚,所以我是从来没有弄懂过,很多时候在表示类关系时都是随意用依赖、聚合、组合三种方式的其中一种代替另外两种来绘制完全图(这其实没有什么太大的影响,因为这三种关系本质上的区别不是很大,都表示依赖关系)。

今天心血来潮,想把它弄懂,所以查了些资料,记录一下。

类和接口的表示 #

1、类

UML 类的表示

  • +: 公共成员
  • #: 保护成员
  • -: 私有成员

抽象(abstract)类和抽象方法,需要将类名和方法名改为斜体。

UML 抽象类和抽象方法

另外,上图中右边两个方框类型表示 UML 的注释

静态(static)成员和方法,用下划线表示。

UML 静态成员

2、接口

UML 接口的表示

与类类似,不过接口里面全是公共方法。

实现和继承 #

1、实现

类可以实现接口,实现用虚线空心箭头表示。

UML 实现接口

2、继承

子类可以继承父类,继承用实线空心箭头表示。

UML 继承

对象之间的关系 #

1、依赖

依赖是类之间最基础的、也是最微弱的关系类型。如果修改一个类的定义可能会造成另一个类的变化,那么这两个类之间就存在依赖关系。一般在项目中依赖关系很多,所以在绘制 uml 图时,并不是将所有的依赖关系都表示出来,仅表示出你想要表达的依赖关系。太多的依赖图示会破坏 UML 图。

例如在 A 对象中有一个方法的参数是 B,如果我们修改 B 类,那么就会影响到 A 中方法的行为,那么此时 A 依赖于 B。

依赖用虚线箭头表示。

UML 依赖

2、关联

关联是一个对象使用另一对象或与另一对象进行交互的关系。另外两个对象间也可能存在互相关联。

例如在 A 对象中有一个成员是B,在 A 中所有的方法,都可以调用 B,那么此时 A 与 B 是关联关系。关联是一种依赖性更强的依赖

依赖用实线箭头表示。

UML 关联

3、聚合

聚合是一种特殊类型的关联,用于表示多个对象之间的“一对多”、“多对多”或“整体对部分”的关系。通常在聚合关系中,一个对象“拥有”一组其他对象,并扮演着容器或集合的角色。组件可以独立于容器存在,也可以同时连接多个容器。聚合表示的是构成的关系,如果 A 由 B 构成,那么 A 和 B 之间的关系是聚合。

聚合关系使用一端是空心菱形, 另一端指向组件的箭头来表示。

UML 聚合

4、组合

组合是一种特殊类型的聚合,其中一个对象由一个或多个其他对象实例构成。组合与其他关系的区别在于组件仅能作为容器的一部分存在

在UML 图中,组合与聚合关系的符号相同,但箭头起始处的菱形是实心的。

UML 组合

总结 #

UML 关系图

  1. 依赖:对类 B 进行修改会影响到类 A 。
  2. 关联:对象 A 知道对象 B。类 A 依赖于类 B。
  3. 聚合:对象 A 知道对象 B 且由 B 构成。类 A 依赖于类 B。
  4. 组合:对象A 知道对象B、由B 构成而且管理着B 的生命周期。类 A 依赖于类 B。
  5. 实现:类A 定义的方法由接口B 声明。对象A 可被视为对象B。类 A 依赖于类 B。
  6. 继承: 类A 继承类B 的接口和实现, 但是可以对其进行扩展。对象 A 可被视为对象 B。类 A 依赖于类 B。

参考:

(完)

目录