聚合或组合或简单关联?

Aggregation or composition or simple association?

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

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

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

  1. 一家公司由许多人组成,但这些人 class 是独立存在的,因此与 0..* Person class' end
  2. 的多重性简单关联
  3. 一家公司有很多办事处,如果没有公司,这些办事处将不存在,因此构成以公司为母公司 class 和 0..* 分公司的多重性 class' end .

但我不确定第二点。如有不妥请指正

谢谢。

为什么要在这种情况下使用组合或聚合? UML 规范将聚合的意义留给了建模者。你想让它对你的听众意味着什么?对于这种情况,组合的意义可能太强了。因此,为什么在这里使用它?我推荐你使用简单的关联。

如果我是你,我会更加忠于问题领域。在我所知道的世界里,办公室不会在公司倒闭时不复存在。相反,一家公司 在一段有限的时间内占用 一定数量的办公室。如果一家公司倒闭,办公室将被出售或出租给其他公司。办公室没有被烧毁。

如果您不了解应用程序中的问题域,那么当该应用程序的客户 "changes the requirements" 时,您采取的快捷方式将变得无效。问题域实际上并没有太大变化,只是允许您采取的捷径。如果您以与问题域不一致的方式走捷径来满足需求,那么调整应用程序的成本就会很高。您的客户变得不高兴,您最终不得不加班。省去自己和大家的麻烦!

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

  • 内存管理
  • 数据库管理

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

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

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