如何看懂类图
1、类图简介
描述类的内部结构和类与类之间的关系,是一种静态结构图。 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
2、各种关系的强弱顺序
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
3、类图关系
3.1、泛化
- 表示继承关系, 表示类/接口对父类/接口的功能扩展。
- java语法中的
extends
, 用来扩展父类或父接口的功能。 - 图形表示: 空心三角箭头+实线, 箭头指向父类或父接口。
- A继承B。
3.2、实现
- 表示类实现接口定义的行为或功能。
- java语法中的
implements
。 - 图形表示:空心三角箭头+虚线, 箭头指向接口。
- A实现B的接口。
3.3、依赖
- 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数、属性被类A在某个method方法中使用。
- java的语法中, 被依赖的对象/类, 以方法参数, 局部变量和静态方法调用的形式出现。
- 图形表示: 因为依赖和被依赖关系比较弱, 所以使用虚线+箭头. 箭头指向被依赖者.而且一般是单向关系。
- A依赖B,B是被依赖者。
3.4、关联
- 关联关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法。比如现实生活中的夫妻, 师生等关系. 长期存在并且是相互的关系. 此外关联可以表示一对一,一对多, 多对一, 多对多等各种关系。
- java语法中, 被拥有者作为拥有者的成员变量存在。
- 图形表示: 因为比依赖关系更强, 所以是实线+箭头.双向关联可以省略箭头。
关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。
0..1 表示可以有0个或者1个实例
0..* 表示对实例的数目没有限制
1 表示只能有一个实例
1..* 表示至少有一个实例
关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,为被关联的类B以类属性的形式出现在类A中,也可能是关联类A引用了被关联类B的全局变量。
3.5、聚合
- 聚合是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;比如计算机和CPU的关系;在代码层面聚合与关联是一致的,只能从语义上来区分。
- 聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次,而聚合则明显的在两个不同的层次。
- 图形表示: 空心菱形+实线+箭头, 箭头指向部分, 菱形指向整体.
3.6、组合
- 组合也是关联关系的一种特例,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。
- 体现在代码层面与关联时一致的,只能从语义来区分。
- 组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不同脱离“整体”单独存在,其生命周期应该是一致的。
- 图形表示: 实心菱形+ 实线+ 箭头, 菱形指向整体, 箭头指向部分