每次都是懒,然后查到别人的描述。我感觉在我的脑子里印象不深刻。还是要自己写一篇。
不同的箭头,代表着不同类之前的关系。
被箭头指的类都是父类,基类,类A使用类B的类A。
六种如下:(组聚泛实关依)——从强到弱,而且箭头的笔画越来越少。
组合
特征
- 类A组合类C,类C没有独立的生命周期,如A-书柜与C-木板。
- 书柜有木板,被指的是书柜。
- 组合是是聚合的加强版。类A有一个成员变量为类C的实例,但是类C中只有构造函数,没有其他操作函数(如use, active)。所有的操作函数都在类A中实现。
- 形状——实线实心菱形。
聚合
特征
- 类A聚合类B,A和B 都是各自独立的生命周期,如A-书柜与B-书本。
- 书柜有书,被指的是书柜。
- has-a的单向关系,书柜里有书本,但是书本不一定要存在于书柜中。
- 实现——类A有一个成员变量为类B的实例。
- 形状——实线空心菱形。
泛化
特征
- 指的是一般与具体的关系。一般不是完全抽象。
- java里的extends,抽象类和子类的关系。
- 被指的是抽象类。
- 形状——实线三角。
实现
特征
- 指的是抽象与具体的关系。
- java里的implements ,接口(interface)与子类的关系。
- 被指的是接口。
- 形状——虚线三角。
关联
特征
- 类A关联类D,A是学校,D是学生。
- 实现:类A中的成员变量为类D的实例。
- 关联>聚合>组合
- 与聚合的联系与区别
- 语法上没有区别
- 语义上,关联强调[可以通过一个类获取到另一个类的信息],聚合强调的[一对多的关系]。
- 形状——实线箭头。
依赖
特征
- 类A依赖类B,则类A中的函数形参有类B的实例。
- 形状——虚线箭头。