依赖,关联,聚合与组合,继承与实现

依赖,关联,聚合与组合这四种关系从弱到强,依次为依赖->关联->聚合->组合

依赖关系表示一个类依赖于另一个类的定义,依赖总是单向的。一般表现为被依赖类是依赖类的某个方法调用的参数,或某个方法的局部变量。
比如人可以买汽车,也可以买别墅,买这个行为依赖汽车,也依赖别墅,但关系十分弱。这里buy表达的就是依赖关系。

依赖用带箭头的虚线表示。

关联关系表示一个类依赖于另一个类来实现自身的功能,这种依赖可以是单向的也可以是双向的。一般表现为被依赖类是依赖类的实例变量,但两个类之间没有整体和部分的关系,两个类是平行的。比如人买了汽车,可以开车。这里drive表达的就是关联关系。

关联用带箭头的实线表示。可以指定关联的数量关系。

聚合关系是一种强关联关系,是整体和组成部分之间的关系,一般也表现为类的实例变量,但是整体和组成部分的生命周期是独立的,也就是个体可以不依赖与整体而独立存在。比如汽车与轮胎的关系,轮胎可以脱离汽车而存在。

聚合用一端为空心菱形,另一端为箭头的实线表示,可以指定关联的数量关系。

组合关系是比聚合关系更强的关系,整体负责组成部分的生命周期, 二者的生命周期是一致的,组成部分不能脱离整体而存在。一般也表现为类的实例变量。比如人和其四肢的关系。

组合用一端为实心菱形,另一端为箭头的实线表示,可以指定关联的数量关系。

另外还有两个常见的关系是继承实现,继承使用空心箭头表示继承的方向,用实线连接。实现也使用空心箭头表示继承的方向,只是改用虚线连接。
以上关系具体的图例见参考[1]。

References:
[1]UML图示

===
[erq]