Association Aggregation Composition的区别与联系


Association表示对象之间的静态关系(“依赖”是一种动态关系),有三个类型:Ordinary Association、Shared Aggregatio和Composition Aggregatio。

通常说的Association,指的就是Ordinary Association;Aggregatio指的是Shared Aggregatio;Composition指的是Composition Aggregatio。

Ordinary Association / Association

“一般关联 / 关联”,是一种非常单纯的联系。相关联的对象地位均等,彼此不分从属,谁也不掌控谁的命运。它们的生命期是互不影响的。这是最弱的关联关系。

例:公交公司拥有多个品牌的多辆公交车,每个品牌的车最多MAX_NUM辆,则“品牌”与“公交车”之间就存在关联关系。这种简单的关联关系通常出现在实体类之间。

Shared Aggregation / Aggregation

“可共享的聚合 / 聚合”,是一种带有从属关系的关联。有这个关系的对象,必定要有一方作为“整体”,另一方作为“部分”,“部分”对象由“整体”对象来掌控。需要注意的是,这里的“掌控”不包括对生命的掌控,“部分”对象的生命期是独立的。正是因为生命期的独立性,可以方便地把同一个“部分”对象聚合到多个“整体”对象中去,也就是“可共享”。

例:公交车“属于”(较弱的从属,不是绝对属于)大家,多个乘客可以共享地乘坐同一辆车。至于这辆车的制造、日常维以及报废等工作不需要乘客负责。就算车上的乘客都死了,这辆车也还存在。

Composition Aggregatio / Composition

“组合聚合 / 组合”,是一种强烈的从属关系,“整体”对象完全掌控了“部分”对象,是has-a的关系。“部分”对象的生命期由“整体”对象来负责。由某个“整体”对象负责的“部分”对象在同一时刻,不可共享给其它“整体”对象使用。

例:一辆公交车有一个引擎,在制造这辆车的时候,显然要把引擎也造出来。车如果报废了,隶属于这辆车的引擎也将不复存在。在同一时刻,该车的引擎只能供该车自己使用,不能共享给其它车用。



References: