聚合或组合或简单关联?

时间:2016-03-19 23:00:24

标签: associations uml aggregation composition

有一个例子可以解释UML中的关联。

一个人为公司工作;一家公司有多个办事处。

但我无法理解Person,Company和Office类之间的关系。我的理解是:

  1. 一个公司由许多人组成,但是这些类是独立存在的,因此简单地与人类类'0'上的0 ... *多样性相关联。
  2. 一家公司有很多办事处,如果没有公司,这些办事处将不存在,因此组成公司作为父类,而分支类的结尾为0 .. *多样性。
  3. 但我不确定第二点。如果我错了,请纠正我。

    谢谢。

2 个答案:

答案 0 :(得分:1)

为什么要在这种情况下使用合成或聚合? UML规范将聚合的含义留给建模者。您希望它对您的观众意味着什么?对于这种情况,构图的意义可能太强了。那么,为什么要在这里使用呢?我建议你使用简单的关联。

如果我是你,我会更加真实地处理问题领域。在我所知道的世界里,当公司倒闭时,办公室不会停止存在。相反,公司在一段有限的时间内占用一些办事处。如果公司倒闭,办事处将被出售或出租给其他公司。办公室没有被烧毁。

如果您不熟悉应用程序中的问题域,那么当客户“更改该应用程序的要求”时,您所使用的快捷方式将变为无效。问题域实际上并没有太大变化,只是你可以采取的快捷方式。如果您使用快捷方式以与问题域未对齐的方式满足要求,则调整应用程序的成本很高。你的客户变得不快乐,你最终加班加点。拯救自己和每个人的麻烦!

答案 1 :(得分:1)

虽然Jim的回答是正确的,但我想补充一些额外的信息。聚合有两个主要用途

  • 内存管理
  • 数据库管理

在第一种情况下,它提示了物体应存活多长时间。这与内存使用量直接相关。如果目标语言(像大多数现代语言一样)使用垃圾收集器,则可以忽略此模型信息。

在第二种情况下,它只是部分内存问题。数据库中的复合聚合表示需要将聚合元素与聚合元素一起删除。这不是内存,但在大多数情况下是安全问题。所以在这里你必须三思而后行。

然而,共享聚合在所有情况下都具有非常深奥的含义。