类图小结¶
参考:UML类图
学习wiki Class diagram,小结以下内容:
- 类与类之间的关系
- 如何表示属性可见性
类与类之间的关系¶
类与类之间包含以来6
种关系
- 泛化(
Generalization/Inheritance
) - 实现(
Relization/Implementation
) - 组合(
Composition
) - 聚合(
Aggregation
) - 关联(
Association
) - 依赖(
Dependency
)
上述6
种关系之间的依赖强度:泛化=实现>组合>聚合>关联>依赖
泛化¶
定义:类之间的泛化关系就是继承关系
表示:使用空心三角形+实线,从子类指向父类
实现¶
定义: 类实现接口的功能
表示:使用空心三角形+虚线,从类指向接口
组合¶
定义:表示contains a
,体现了严格的整体和部分之间的关系,两者的生命周期相同,不能分离
表示:使用实心菱形+实线,菱形这一端表示整体,箭头这一端表示部分
聚合¶
定义:表示has a
,A
对象可以包含B
对象,但B对象不是A
对象的一部分。 两个对象具有各自的生命周期
表示:使用空心菱形+实线,菱形这一端表示整体,箭头这一端表示部分
关联¶
定义:对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系
表示:使用箭头+实线,从一个对象指向关联的实例
依赖¶
定义:对于两个相对独立的对象,一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系
表示:使用箭头+虚线,从一个对象指向依赖的对象
组合 vs. 聚合¶
组合关系
- 当试图表示真实世界的整体-部分关系时,例如,发动机是汽车的一部分
- 当容器被销毁时,内容物也被销毁,例如一所大学及其系
聚合关系
- 当表示软件或数据库关系时,例如,汽车模型引擎
ENG01
是汽车模型CM01
的一部分,引擎ENG01
也可以是不同汽车模型的一部分[8] - 当容器被销毁时,内容物通常不会被销毁,例如,教授有学生;当教授去世时,学生们不会和他或她一起死去
聚合关系通常是“目录”包容,以区别于组合的“物理”包容
关联 vs. 依赖¶
参考:
Difference between association and dependency?
关系是一种强依赖关系
- 当对象以类属性的形式出现在另一个对象中,那么就是关联关系
- 当对象以函数参数或者仅调用其方法时,就是依赖关系
如何表示属性可见性¶
在成员名称前添加以下符号来表示属性的可见性
+ 公共
- 私有
# 受保护
~ 包