【问题标题】:UML Aggregation with and without arrow head带箭头和不带箭头的 UML 聚合
【发布时间】:2014-03-11 10:01:09
【问题描述】:

我一直认为 UML 聚合定义为路径开头的黑色(实心)菱形,结尾处没有箭头:

|--------|        |--------|
| :MyA   |<>------| :MyB   |
|--------|        |--------|

今天我遇到了&lt;&gt;-----&gt; 之类的符号(右端有一个明确的箭头)。所以我在 UML 2.4 规范中查找了它,实际上找到了两个版本的参考。

我最喜欢的参考资料:Craig Larman 的“UML 和模式”只提到了第一个没有箭头的版本。在 UML 规范中,我发现了关于 navigable ends 的通知,但我不确定这是否相关以及有什么区别?

有人能更彻底地解释一下,并举例说明每个版本的使用吗?

【问题讨论】:

    标签: uml aggregation


    【解决方案1】:

    任何关联端都可以在导航箭头的帮助下被指定为“可导航”。但是,UML 的“可导航性”概念没有精确的含义,人们将其与关联端归另一端的类所有的概念混淆了。类的关联端所有权的概念意味着关联端对应于该类的引用属性。这个问题仅在去年的新 UML 版本 2.5 中得到澄清,该版本引入了一个新的视觉符号来表示关联端所有权,即 中的“点”。这很可能是您遇到的内容的预期含义,即,它的真正含义是以下引用属性:

    更多解释见tutorial

    对评论的补充回答:如果您的类模型指定了所有关联端的所有权,并且您的类图显示了它们,并且没有所有权点(也没有导航箭头),如,那么根据UML 2.5,关联端由关联本身“拥有”。由于我们在 MyA 端都没有所有权点,因此两端都由复合关联“拥有”。就编写/生成的代码而言,这意味着复合关联不是通过 MyA 或 MyB 中的引用属性实现的,而是必须借助单独的类来实现,例如“MyA-has- MyB",它有两个引用属性,用于引用任何组合链接的聚合和组件,如以下矩形类:

    【讨论】:

    • 您能否通过省略点或箭头的示例扩展您的答案并进一步解释差异?
    • 只是一个小修正:点符号已经出现在 2.1 中,但在 UML 文档本身中并没有真正使用。较新的 2.5 版本更广泛地使用了这种表示法。附带说明:在企业架构师中,您必须单击 4 次才能为关联设置相应的属性,因此它不仅是第二类,而且是第四类:-(
    【解决方案2】:

    一个箭头表示关联可以通过这种方式导航。没有箭头意味着该关联可以双向导航。省略了两个箭头。

    这可能是个问题,因为undefined navigability 的两端看起来一样,但这是标准。

    您可以在我的回答 https://stackoverflow.com/a/21478862/715269 中更深入地了解关联/导航性/聚合

    【讨论】:

    • 您所说的“没有箭头意味着关联可以双向导航”的说法是不正确的。没有箭头表示未指定可导航性。
    • @gwag 去查看 VP UML 帮助或 UML 标准页面上显示的图表。不久前我也和你一样想,但那些双向箭头已经过时了。
    • 在最新的 UML 2.5 规范中,他们描述了三个通过工具实现视觉完整性的选项(第 211 页)。第二个是“抑制所有箭头和十字:无法推断导航”,第三个是“抑制具有双向导航性的关联的箭头(在这种情况下,双向导航性与以下情况无法区分)根本没有导航)。无论如何,如果您在图表中与箭头有关联,而另一个没有箭头,则这不具有您建议的含义(可双向导航)。
    • @gnat 如果您有一个与两个箭头的关联而另一个没有箭头,那么您是对的。但是,如果第一个箭头带有一个箭头,而第二个箭头没有,则它具有我所说的相同的双目录/未定义值。我确实看到与帖子有任何矛盾。
    • 我们的讨论只是表明,整个 UML 的“可导航性”概念令人困惑,几乎没有意义。真正重要的(以及暗示“可导航性”的东西)是关联端所有权的概念。因此,建议不应该关心“可导航性”,而只关心关联端的所有权。
    【解决方案3】:

    方向意味着客户端/服务器或主/从关系。在聚合的情况下,通常情况是程序员使用聚合来查找该对象的子组件(例如,使用汽车查找汽车零件)。零件类的方向性使这种关系变得明确,尽管在大多数情况下它是多余的。

    【讨论】:

      【解决方案4】:

      一个关联有两个端点。关联的末端通过 UML 属性建模,该属性可由关联相关末端涉及的分类器拥有,在这种情况下,关联被称为可导航的,因为源分类器可以直接引用目标实例(关联另一端的实例)通过该属性。否则代表关联端的属性可能归关联实例本身所有

      http://lowcoupling.com/post/47802411601/uml-diagrams-and-models-with-papyrus

      【讨论】:

      • 可导航性(箭头)和关联端的所有权不同。虽然 UML 的“可导航性”概念没有精确的含义,但类的关联端所有权意味着关联端对应于该类的引用属性。这个问题仅在去年的新 UML 版本 2.5 中得到澄清。见oxygen.informatik.tu-cottbus.de/IT/JsFrontendApp/tutorial.html第5章
      猜你喜欢
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2013-04-17
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      相关资源
      最近更新 更多