6种类关系
6种UML类图常见的关系
泛化 (Generalization)、实现 (Realization)、 聚合 (Aggregation)
组合 (Composition)、关联 (Association)、依赖 (Dependency)
类关系定义
1. 泛化 (is a)
是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。JAVA代码中,关键字 extends
2. 实现
是一种类与接口的关系,表示类是接口所有特征和行为的实现。JAVA代码中,关键字 implements
3. 聚合 (has a)
整体与部分的拥有关系,且部分可以离开整体而单独存在,
它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。
是关联关系的一种特例,在代码实现上无法进行具体区分,只能考虑具体的业务与逻辑关系。
【代码体现】 成员变量 ,即作为类的属性
4. 组合 (contains a)
整体与部分的关系,但部分不可以离开整体而单独存在,部分不能给其他整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也叫强聚合。
也是关联关系的一种特例
【代码体现】 成员变量 ,即作为类的属性
5. 关联
是一种拥有关系,它是类知道另一个类的属性和方法;
在Java中,关联关系的代码表现形式为一个对象含有另一个对象的引用。
也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。
关联关系有单向关联和双向关联,大多数关联都是单向关联,单向关联关系更容易建立和维护。
【代码体现】 成员变量 ,即作为类的属性
6. 依赖 (use a)
是一种使用关系,一种若对关联关系,即一个类的实现需要另一个类的协助,所以尽量不要双向依赖。如驾驶员和汽车关系,驾驶员使用汽车
【代码体现】方法或构造器的的参数、方法的返回值,局部变量或者对静态方法的调用
类关系的图像
1. 记住类关系的顺序
在评价软件架构的优劣时,使用的重要标准是高内聚,低耦合
按照耦合程度由高到低依次为 泛化=实现>组合>聚合>关联>依赖
泛化和实现都是强耦合,
组合聚合都属于特殊的关联关系,整体与部分的关系,
组合生命周期一致要求更高,
其次是聚合,
然后就是关联关系,
最后是依赖(作为类方法的参数和局部变量出现)
2. 记住类关系的图案
类关系图总结 TIps :6-24-222
6个关系
2条虚线,4条实线
2个箭头,2个三角形、2个菱形(一个实心一个空心)
组合聚合都是带菱形的实线
-
组合耦合度更高(要求生命周期一致)带实心菱形的实线
-
聚合 带空心棱形的实线
-
关联 带箭头的实线(比较常见的表达方式)
-
依赖 带箭头的虚线
剩下的就是带三角的线了
-
泛化 继承父与子的关系 带三角的实线
-
实现 带三角的虚线
具体例子
箭头指向
菱形代表整体,其他总是指向非当前类
聚合 棱形 指向(代表)整体
组合 棱形 指向(代表)整体
关联 指向被关联类
依赖 指向被依赖类
泛化 继承 指向父类
实现 接口接口 指向接口
到此为止认真看的话,应该差不多能记住了,后面就是有机会多练习了。下图来源《大话设计模式》
【作者简介】:
里奥学JAVA,公众号【里奥学JAVA】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~