2

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

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

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

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

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

4

1 回答 1

4

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

  • memberEnd : 属性[2..*] 每个端表示连接到该端的分类器实例参与关联的链接。这是有序的关联。子集命名空间::成员。
  • ownEnd : 属性[*] 关联本身拥有的端点。这是一个有序的关联。子集 Association::memberEnd、Classifier::feature 和 Namespace::ownedMember。
  • navigableOwnedEnd : 属性[*] 关联本身拥有的可导航端。子集关联::ownedEnd。

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

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

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

于 2010-05-23T10:54:24.390 回答