【问题标题】:UML class diagram: composition vs agregationUML 类图:组合 vs 聚合
【发布时间】:2011-05-03 03:35:05
【问题描述】:

我想了解compositionaggregation关系的区别。

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

【问题讨论】:

标签: uml


【解决方案1】:

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

子对象在父对象之外有自己的生命吗?如果是,则需要聚合。

如果删除了父级,是否也需要删除子级?如果是,你需要作曲。

假设您有一个模型,其中有一个 School 类、一个 Building 类和一个 Student 类。 School 与 Building 是一对多的关系,与 Student 是一对多的关系。

学校与建筑之间的关系是组合的一个例子。如果您关闭学校,您可能会决定推平建筑物。

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

您可以阅读 Bob Martin 叔叔对此的评价here

【讨论】:

  • 如果你想取笑我,请不要回答我
  • 我不是在取笑你——我给了你一个简单的英文回答。
  • duffymo,你搞砸了两个定义,组合是部件的生命周期由父级控制的关系。
【解决方案2】:

区别在于对象各部分的生命周期。

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

组合可以看作是聚合的一种特殊情况。

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

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

【讨论】:

    【解决方案3】:

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

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

    Introduction to Java Programming 这本书非常详细地介绍了这个主题。

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 2013-01-10
      • 1970-01-01
      • 2016-07-22
      • 2013-05-14
      • 2017-04-18
      • 2011-07-14
      • 2018-06-27
      • 2013-06-22
      相关资源
      最近更新 更多