【问题标题】:association owned by classifier and association owned by relationship in UMLUML中分类器拥有的关联和关系拥有的关联
【发布时间】:2013-09-19 17:58:28
【问题描述】:

7.3.3 关联(来自内核),第 36 页,UML 上层结构,v2.4.1:

由分类器或关系拥有的关联。

在UML中是否有关于分类器拥有的关联和关系拥有的关联的真实例子?

【问题讨论】:

  • 你的意思是一个property属于一个协会还是一个属于一个类?
  • 感谢@JimL。你的问题引发了另一个问题,我有些困惑,因为在 UML 规范中,关联关系的泛化是分类器或关系,但在我使用的工具中,Papyrus 属性的所有者(成员端)是分类器或关联,如您在以下屏幕截图ge.tt/1hXG8Js/v/0?c 我知道关联和关联结束之间存在差异
  • 类关联是分类器和关系的特化(即多重继承)。这里没有“”,类分类器或类关系也不拥有类关联。类 Association 的 instance 有一个所有者(因为它是一个元素)。它还与两个或多个本身拥有所有者的属性关联。有趣的是,Element::owner 是一个派生联合。查看 UML 规范,我实际上找不到该子集所有者的任何关联属性。那么一个协会怎么会有一个所有者呢?虽然不同的问题......

标签: associations uml relationship classification


【解决方案1】:

克里斯

我希望这个简单的例子有所帮助。

猜你有一个 Java 类

public class A {
   private B b;
   ...
}

在 UML 中,您可以将此关系建模为从 A 到 B 的关联:

A -> B

具有以下建模元素:

Class B
Class A
  + Property b : B [0..1]    (owned by the class)
Association A_to_B
  + Property from_a : A [1]  (owned by the association)

关联 A_to_B 将有 2 个关联(成员)结束引用上面显示的两个属性(A::b 和 A_to_B::from_a):

现在,让我们考虑以下情况

public class A {
   private B b;
   ...
}
public class B {
   private A a;
   ...
}

在 UML 中,您可以对 A 和 B 之间的关联(双向导航)进行建模:

A B

谁的模型元素将是:

Class B
  + Property a : A [0..1]  (owned by the class)
Class A
  + Property b : B [0..1]  (owned by the class)
Association A_B

关联 A_B 将有 2 个关联(成员)结束引用上面显示的两个属性(A::b 和 B::a)。

【讨论】:

  • 嗨@ASBH!谢谢你的帮助。 owner of association endnavigable 之间的关系是什么?因为我还注意到如果所有者设置为关联,那么导航将自动设置为 False 。如果所有者设置为分类器,则导航将设置为 True 。 (但我不知道为什么 Owner 和 Navigable 一起工作?)请在这两种情况下(使用 Papyrus)查看我的上述示例图表。这就是你想说的吗? postimg.org/image/z4frjeysf
  • @Andrew,查看 UML 2.5 第 6.4.2 节:“箭头符号用于表示关联端可导航性。根据定义,所有类拥有的关联端都是可导航的。按照惯例,所有关联- 元模型中的拥有端不可导航”
  • 由于我也一直在为关联端所有权的真正含义而苦苦挣扎,所以我遇到了这个问题 - 在我的搜索过程中还发现了一个 OMG 文档,我认为它很好地解释了这个问题:Getting it Right on the Dot。跨度>
【解决方案2】:
  • 在做其他事情之前,您应该了解 A 到 B 的关联是什么。
    • 基本上它是 A 和 B 之间的一条实线。它可以表示一个将 A 的类/实例与 B 的类/实例连接起来的结构。该结构可以是任何类型的并且属于任何地方。所有关于线路的信息都描述了这种结构。
    • 如果有两个结构,一个结构将 A 的一个实例与 B 的实例连接,另一个结构将 B 的实例与 A 的实例连接,您可以在 ONE 关联中显示它们。然后,关于其 B 端的信息描述了第一个结构 (b->a),而关于另一端的信息描述了另一个结构。
    • 如果您将有多个从 A 到 B 的结构,则必须绘制两个不同的关联。
    • 如果连接结构很复杂,您可以将其表示为关联类。您可以在此处定义更多详细信息。
    • 一个连接结构可以连接两个以上的类,然后它将显示为一个带有实心分支的大菱形到这些类。还是联想!注意:这两个更复杂的关联在现有工具的支持下非常糟糕。你可以很容易地用它们创造出一些毫无意义的东西。而且他们很难。小心使用。


在 C++ 中,实例 A 可以不是通过指针,而是直接拥有 B 实例。它没有特殊的UML符号,它应该以与正常的指针属性相同的方式显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多