UML类图:组合与聚合

时间:2010-10-31 18:52:57

标签: uml

我想了解合成聚合之间的区别。

有没有人知道一个解释所有关系的UML类图的网站?

3 个答案:

答案 0 :(得分:4)

组合和聚合与级联删除行为有关。

除了父母之外,儿童对象的生命是否有自己的生命?如果是,则需要聚合。

如果父母被删除,孩子是否也需要删除?如果是的话,你需要合成。

所以假设你有一个模型,其中有一个School类,一个Building类和一个Student类。学校与建筑有一对多的关系,与学生有一对多的关系。

学校与建筑的关系是一个组合的例子。如果你关闭学校,你可能会决定推土机。

学校与学生的关系是聚合。如果你关闭学校,你肯定不会决定谋杀所有的学生。

你可以阅读鲍勃·马丁叔叔对此发表的评论here

答案 1 :(得分:2)

不同之处在于对象部分的生命周期。

  • 如果部件可以独立于父部件生存,那么您就有了聚合。
  • 如果部分的生命周期由父母控制,那么它就是一个作文。

组合可以看作是聚合的特例。

根据The UML User Guide(词汇表):

composition: A form of aggregation with strong ownership and coincident lifetime of the parts by the whole

答案 2 :(得分:1)

聚合和组合都代表“有”关系。两者之间的区别在于组合是指独占所有权。例如,交易“具有”交易ID号,并且该交易是唯一具有该交易ID号的交易,该ID号是独占到交易。交易也“具有”交易日期,但许多交易也可能具有相同的交易日期。由于交易日期可以在多个交易之间共享,因此它不是独占

当您在UML类图上绘制这两种关系类型时,组合关系将用填充的菱形表示,其中聚合关系将由未填充的菱形表示。

alt text

本书Introduction to Java Programming详细介绍了这一主题。