组合中部分和全体唇亡齿寒的关系,有部分的存在,全体才称之为全体,每个实例都是其固有特性;
聚合中部分的每个实例都不是全体的固有特性,可以有千千万万个部分实例,只要有一个部分的实例存在,聚合关系形成的全体仍然是其本身。
聚本身就暗示了相似的、一样的,很多相似的东西合在一起,谓之聚。
组合并不强调相似的东西合而为一,暗示了丰富性,多个不同类型的部分组成了一个独一无二的全体。
聚合关系(aggregation)
聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;
聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门撤销了,人员不会消失,他们依然存在;
组合关系(composition)
组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;
与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;
但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了;
菱形
首先, 菱形代表的意思就是全体 - 部分的关系。也就是说不管实心还是空心,都代表全体 - 部分 / part - of 的含义。
- 空心,全体和部分的连接可以是宽松的,全体和部分可以相互脱离独立存在。
- 实心,全体和部分的连接是强关联
空心菱形(聚合关系)的准确含义
在UML1.3时代,空心菱形被称为共有聚合。即 多个全体的实例,可以共同拥有1个部分的实例 的意思。 全体和部分的连接可以是宽松的,全体和部分可以相互脱离独立存在。 UML2起叫虽然称之为聚合,但本身的含义并未改变。
例如: 图形拥有样式,可以把这个认为是全体 - 部分的关系
1个样式实例,可以被多个图形实例所拥有, 图形实例也可以不拥有样式
样式实例也可以脱离图形
实心菱形(组合关系)的准确含义
实心菱形里的部分不能被其他全体实例的对象所所拥有。
即 1个部分实例只能被唯一1个全体实例所持有 。
且可以认为部分和全体拥有一个共同的生存周期,当全体被删除,部分也被连带删除。 但在全体删除前移除部分,是可以免去连带删除全体。
例如: 车和轮胎,也可以认为是全体 - 部分的关系;
1个轮胎实例,只能被1个车实例拥有 ;
车报废时,轮胎也跟着报废 ;
在车报废前,可以将轮胎拆除,转移到别的车下 。