【发布时间】:2011-05-03 03:35:05
【问题描述】:
我想了解composition和aggregation关系的区别。
有人知道解释所有关系的 UML 类图的网站吗?
【问题讨论】:
标签: uml
我想了解composition和aggregation关系的区别。
有人知道解释所有关系的 UML 类图的网站吗?
【问题讨论】:
标签: uml
组合和聚合与级联删除行为有关。
子对象在父对象之外有自己的生命吗?如果是,则需要聚合。
如果删除了父级,是否也需要删除子级?如果是,你需要作曲。
假设您有一个模型,其中有一个 School 类、一个 Building 类和一个 Student 类。 School 与 Building 是一对多的关系,与 Student 是一对多的关系。
学校与建筑之间的关系是组合的一个例子。如果您关闭学校,您可能会决定推平建筑物。
学校与学生的关系是聚合关系。如果你关闭学校,你肯定不会决定谋杀所有学生。
您可以阅读 Bob Martin 叔叔对此的评价here。
【讨论】:
区别在于对象各部分的生命周期。
组合可以看作是聚合的一种特殊情况。
根据The UML User Guide(词汇表):
composition: A form of aggregation with strong ownership and coincident lifetime of the parts by the whole
【讨论】:
聚合和组合都表示“具有”关系。两者的区别在于组合是指独占所有权。例如,一个交易“有一个”交易 ID 号,并且该交易是唯一具有该交易 ID 号的交易,该 ID 号对于该交易专有。交易也“有”交易日期,但许多交易也可能具有相同的交易日期。由于交易日期可以在多个交易之间共享,因此它不是排他性的。
当您在 UML 类图上绘制这两种关系类型时,组合关系将用填充的菱形表示,而聚合关系将用未填充的菱形表示。
Introduction to Java Programming 这本书非常详细地介绍了这个主题。
【讨论】: