参考资料
参考学习30分钟学会UML类图记录笔记
概述
UML类图中一般会有连线指明它们之间的关系。关系共有六种类型,分别是实现关系、泛化关系、关联关系、依赖关系、聚合关系、组合关系。如图所示
实现
实现关系是指接口及其实现类之间的关系。用空心三角+虚线组成的箭头来表示,从实现类指向接口,如图
泛化(继承 is a)
泛化关系(Generalization)是指对象与对象之间的继承关系。用空心三角+实线组成的箭头来表示,从子类指向父类,如图
关联
关联关系(Association)是指对象和对象之间的连接,用实线+箭头来表示,关联关系的代码表现形式为一个对象含有另一个对象的引用。也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。如图
其实关联分三种:依赖、聚合、组合。
依赖(use a)
依赖(Dependency)关系是一种弱关联关系。用带虚线的箭头表示,如图
依赖关系在 java 中的具体表现形式有四种(以 A 类依赖 B 类举例):
- B 为 A 的某方法的局部变量
- B 为 A 的某方法的参数
- B 为 A 的某方法的返回值
- 调用 B 的静态方法
如下面代码所示
public class A {
public void method1() {
//A依赖于B的第一种表现形式:B为A的局部变量
B b = new B();
b.method1();
}
public void method2() {
//A依赖于B的第二种表现形式: 调用B的静态方法
B.method2();
}
public void method3(B b) {
//A依赖于B的第三种表现形式:B作为A的方法参数
String s = b.field1;
}
//A依赖于B的第四种表现形式:B作为A的方法的返回值
public B method4() {
return new B();
}
}
聚合(has a)
聚合(Aggregation)是关联关系的一种特例,它体现的是整体与部分的拥有关系(has a)。用 空心菱形+实线箭头 表示,空心菱形表示整体,实线箭头表示部分,如图
聚合关系中,整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。例如,公司部门与员工的关系,一个员工可以属于多个部门,一个部门撤销了,员工可以转到其它部门。
组合(contains a)
组合(Composition)也是关联关系的一种特例,它同样体现整体与部分间的包含关系(contains a)。用实心菱形+实线箭头表示,如图
组合关系中,整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也称为强聚合。如果A
组合B
,则A
需要知道B
的生存周期,即可能A
负责生成或者释放B
,或者A
通过某种途径知道B
的生成和释放。
在 Java 代码形式上,聚合和组合关系中的部分对象是整体对象的一个成员变量。但是,在实际应用开发时,两个对象之间的关系到底是聚合还是组合,有时候很难区别。在Java中,仅从类代码本身是区分不了聚合和组合的。如果一定要区分,那么如果在删除整体对象的时候,必须删掉部分对象,那么就是组合关系,否则可能就是聚合关系。从业务角度上来看,如果作为整体的对象必须要部分对象的参与,才能完成自己的职责,那么二者之间就是组合关系,否则就是聚合关系。