依赖、关联、聚合、组合的UML类图表示以及关系之间的联系与区别。
依赖
一个类A使用到了另一个类B,这种使用是具有临时性的、非常弱的,但是类B的变化会影响到A。
表现在代码层面,一般是类B作为参数在类A中的某个方法中被使用。
关联
关联体现的是两个类或者类与接口之间予语义级别的一种强依赖关系,关系不是临时的,一般是长期的,而且双方的关系一般是平等的,关联可以是单向的、双向的。
表现在代码层面,一般是类B作为成员变量出现在类A中。
聚合
聚合是关联关系的一种特殊情况,他体现的是整体与部分的关系,即has-a的关系,但此时整体与部分之间是可分离的,它们可以各自具有自己的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,如计算机与CPU、公司与员工的关系等。
表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
组合
组合也是关联关系的一种特殊情况,他体现的是contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现的是整体与部分的关系,但此时整体与部分是不可分离的,部分的生命周期与整体的生命周期一致,整体生命的结束也就意味着部分生命周期的结束,比如你和你的大脑。
表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
重数性关联
重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。
表示方式 | 多重性说明 |
---|---|
0..1 | 表示另一个类的一个对象没有或只与一个该类对象有关系 |
0..* | 表示另一个类的一个对象与零个或多个该类对象有关系 |
1..* | 表示另一个类的一个对象与一个或多个该类对象有关系 |
1..1 | 表示另一个类的一个对象只与一个该类对象有关系 |
m..n | 表示另一个类的一个对象与最少m、最多n个该类对象有关系 (m<=n) |