UML类图中有六种关系,它们的分别是:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
普通写法在此之前,先谈谈UML类图的接口、类、方法、变量的普通写法。下图:
首先是访问修饰符,- + #
与空格分别表示私有、公有、继承、默认的访问权限,抽象方法和抽象类用斜体表示,静态属性和方法加上下划线。变量的定义与方法的定义用虚线分离。同理,接口名称和接口中的抽象方法也用斜体表示。
即我们平时说的继承关系。表示一般与特殊。
【代码表现】extends
【箭头及指向】实线和空心三角。
泛化
实现即接口实现。表示类是接口所有特征和行为的实现。
【代码表现】implements
【箭头及指向】虚线和空心三角。
实现
是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
【代码表现】成员变量
【箭头及指向】双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头,实线连接。
注意是箭头而不是三角。
单向关联中,箭头指向的一方为关系维护方。
双向关联
单向关联
是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
【代码表现】成员变量
【箭头及指向】实线和空心菱形,菱形指向整体。
聚合
是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码表现】成员变量
【箭头及指向】实线和实心菱形,菱形指向整体。
组合
【定义】是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
【代码表现】局部变量、方法的参数或者对静态方法的调用
【箭头及指向】带箭头的虚线,指向被使用者
依赖
各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
其中,组合和聚合是关联关系的一种,这三者的代码表现都是类的成员变量。组合和聚合的区别是:
参考文章组合不能脱离整体单独存在,而聚合可以。