【问题标题】:When to use memberEnd and when navigableOwnedEnd in an UML class diagram?在 UML 类图中何时使用 memberEnd 以及何时使用 navigableOwnedEnd?
【发布时间】:2011-02-22 21:33:51
【问题描述】:

我已经下载了 Altova UModel 的试用版并开始使用 UML。作为一个实际的开始,我正在为一个个人信息管理器应用程序建模,其中包括一个网络书签管理。

一个书签可以同时属于多个(或不属于)标签,并且一个标签可以包含多个(如果它包含的所有书签都被删除,则不属于)书签。该关系必须是双向可导航的 - 用户必须能够查看具有特定标签的所有书签以及书签的所有标签。

Bookmark 和 Tag 类之间正确的 UML 关系是什么?

据我现在对 UML 的理解,它是一个关联(而不是聚合)。但是对于 2 路可导航多对多关系,我可以将结束角色指定为“memberEnd”或“当 navigableOwnedEnd”,以图形方式连接在两种情况下看起来都相同(箭头)(据我所知,这意味着可导航性)但是只有在使用“memberEnd”时才会在类框中显示一个属性。

如果我的意思是双向导航多对多关系,我应该如何在模型中指定它?

【问题讨论】:

    标签: class uml relation altova umodel


    【解决方案1】:

    来自 UML 上层结构规范,v2.1.2 第 7.3.3 节:

    • memberEnd : 属性[2..*] 每个端代表连接到该端的分类器实例参与关联的链接。这是有序的关联。子集命名空间::member。
    • ownedEnd : 属性[*] 由协会本身拥有的目的。这是一个有序的关联。子集关联::memberEnd, Classifier::feature 和 Namespace::ownedMember。
    • navigableOwnedEnd : 属性[*] 由关联本身拥有的可导航端。子集关联::ownedEnd。

    因此,如果末端由关联“拥有”,则使用ownedEnd/navigableOwnedEnd 类型,否则使用memberEnd 类型。

    两者都可以用于“双向导航多对多关系”;如果每个关系链接在您的设计中都是一个单独的实例,则它可以拥有末端(例如,A 类和 B 类具有对相关 As 和 B 的引用对列表的引用),但如果关系链接是隐式的,那么它不拥有任何东西(例如,A 类有一个对相关 B 的引用列表,B 类有一个对相关 As 的引用列表)。

    从 90 年代后期开始使用 UML,你是我遇到的第一个关心差异的人!

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 2010-09-29
      • 2014-08-05
      • 2013-11-22
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多