类之间关系(由强到弱)
- realize(继承):三角+实线(指向类),继承类(SUV是一种汽车)
- generalization(实现):三角+虚线(指向接口),实现接口(汽车是一种车)
- composition(组合):实菱形+实线(指向个体),强依赖(汽车没了,发动机就没了),特殊的聚合,构造函数
- aggregation(聚合):空菱形+实线(指向个体),非强依赖(班级没了,学生还在),特殊的关联,一对多关系,一个对象拥有一组其他对象,并扮演容器或集合的角色
- association(关联):箭头+实线(指向被依赖者),静态,天然的联系(学生带着身份证),如一个类对象是另一个类的成员变量(意味着后者总能访问前者)
- dependency(依赖):箭头+虚线(指向被依赖者),动态,运行时的联系(学生只在上学时用自行车),修改一个类的定义可能会造成另一个类的变化,如一个类是另一个类方法的参数
(有的箭头没打上,以下图为准)
总结
- 可分为三组,三角--菱形--箭头,关联由强到弱;每组中采用实/虚,实心/空心表示关联强弱
- 图形所在的一方为被依赖者
- 泛化、实现是is-a,聚合、组合是has-a
- 聚合、组合的区别在于生命周期不同,聚合是部分的生命周期可以超过整体(弱关联),组合是部分和整体同生死(强关联)
- 代码实现:聚合--部分是整体的成员变量;组合--部分在整体的构造函数中创建,实现同生死
- 每项分两个格,填写属性和方法,-表示私有,+表示公有
参考
设计模式
https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html
代码中的聚合&组合