类之间有着各种各样的关系, 使用UML的类图,可以帮助我们设计、梳理各个类之间的关系
实例
类之间的关系
- 泛化 generalization
- 实现 realize
- 依赖 dependency
- 关联 association
- 聚合 aggregation
- 组合 composition
泛化(继承inheritance)
空心箭头的实线
实现(接口继承)
空心箭头的虚线
依赖
一个类A使用到了另一个类B," ... uses a ...",被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。
表现在代码层面,为类B作为参数被类A在某个method(方法)中使用。
箭头虚线
关联
两个类之间、或类与接口之间一种强依赖关系,是一种长期的稳定的关系," ... has a ..."
在代码层面上,被关联的类以类属性的形式出现在关联类中,也可能是关联类引用了一个类型为被关联类的全局变量。
实线
*没有箭头表示相互知道,有箭头表示单方面知道
聚合
聚合
是表示整体与部分的一类特殊的关联关系,是弱的包含" ... owns a ..." 关系,成分类可以不依靠聚合类而单独存在,可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享
班级由学生组成(班级知道学生,学生不知道班级)
空心菱形箭头实线
组合
组合
关系,是一类强的整体与部分的包含关系" ... is a part of ..."。成分类必须依靠合成类
而存在。整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。合成类
完全拥有成分类
,合成类
负责创建、销毁成分类别。
实心菱形箭头实线
关联、聚合、组合的差异
当一个类作为另一个类某个方法的参数时,为关联
。
两者的差别主要描述了子类的生命周期的不同。组合
关系中,一旦父类被销毁子类也会随之销毁;聚合
关系中,子类的生命周期与父类独立。
例如,一个大学包含若干个系(如化学系),每个系由若干名教授。如果大学撤销,这些系也就不复存在了,但这些教授仍会继续存在。还需注意,一名教授可以在不同系甚至不同学校兼职,而一个系不能属于两所大学。所以,大学与系之间是组合
关系,而系与教授是聚合
关系。