谁拥有此uml图中的关联类?

时间:2010-12-06 15:22:02

标签: uml

对不起这个新问题,我是UML的新手。

系统图是这样的:

根据我所知的UML,此图中的任何类都不能拥有关联类的实例,因为它与它没有聚合关系。

这是否意味着在Java系统的实现中,基于图表,外部类必须拥有相关类的实例?

很抱歉,如果答案很明显。我花了好几个小时在头上试着。

3 个答案:

答案 0 :(得分:1)

首先,术语。 @Daniel是对的,你没有关联类。但是,我不认为你意味着关联类:

  

这是否意味着在Java系统的实现中,基于图表,外部类必须拥有相关类的实例?

如果我理解正确,那就是你问题的核心。在实现术语中,哪个类有一个成员变量,其中包含对Associated Class实例的引用列表?

再次 - 如果我理解正确 - 你的问题源于以下逻辑:

  1. 在UML中,“所有权”通常被描述为聚合(或组合)关系的质量。
  2. Aggregated/Composite PART ClassAssociated Class之间的关系是一个简单的二元关联 - 而非聚合/复合。
  3. 因此“所有权”属性不适用
  4. 因此谁拥有Associated Class个实例的引用列表?
  5. 如果那是对的,那么问题在于“所有权”的具体含义。虽然在UML中没有严格定义,但“所有权”通常意味着负责管理整个生命周期。

    我认为你更普遍地解释它:如果一个关联不是聚合的,那么参与的类就不能互相引用。

    事实并非如此。 Aggregated/Composite PART Class保存Associated Class实例的引用(或引用列表)是完全合理的。反向同样有效。在某些情况下,两者都是有效的(随之而来的是需要保持一致性)。

    总结一下:外部类是否有必要拥有Associated Class的实例?不。对于管理关系实例的二元关联的任何一端或两端都是完全有效的。

    如果我误解了你的问题,我会道歉并且道歉。

    PS:最后的观察:在使用聚合时要非常小心你的意思。在UML规范中,这是出了名的不精确。组合具有更严格的定义,您可以使用组合和普通二进制关联覆盖99%以上的所有建模方案。关于唯一的地方聚合有一个明确定义的含义,而另外两个没有完全覆盖,表示递归关系必须是非循环的。

答案 1 :(得分:0)

UML未指定系统的完整行为。那么当你说一个物体拥有另一个物体时,你的意思是什么?此外,AssociatedClass实例可能是不属于任何其他对象的根对象。

答案 2 :(得分:0)

您提供的图表实际上并不包含关联类。您命名为“关联类”的类只是一个普通类。它也不属于任何东西(我们在图中看到)。

如果您的想法是关联类,那么请查看关联类的示例图:

an example class diagram with association class

在此示例中,MilleageCredit是一个关联类。因此,对于Fligh-FrequentFlyer的每个不同组合,都有一个MilleageCredit。

至于所有权,由于Association类表示2个关联对象之间的关系,因此在

时会被删除
  • 关联已清除
  • 删除其中一个或两个关联对象

因此,如果删除Flight或FrequentFlyer,MilleageCredit也将消失。 此外,如果您再次取消Flight与FrequentFlyer的链接,MilleageCredit将被删除。

网上有很多优秀的UML文档,例如UML basics: The class diagram

希望这会有所帮助,否则请在问题中提供更多信息。