表示一棵树,其中根只有一个 child 这种特定类型

Representing a tree where the root has exactly one child of this specific type

我想建模一棵树,其中 class Node 由其自身的多个实例组成。

现在如何指示一个约束,如“树的根可以包含所需的任意数量的节点,但只能有一个这种特定类型节点的实例”(特殊节点本身可以​​包含任何东西

如下图a所示,我们在这两个组成之间有冲突,我应该可以将specialElement添加到一个根中,因为它们是treeNodes

我如何表示这个约束?

您的关联末尾缺少属性。一个更具体的 属性 可以子集化一个更一般的 属性 并且具有恰好 [1].

的多重性

您当前的模型有一个缺陷:rootspecialElement 都继承了它们社会化的 TreeNode 的组成。因此,您在 rootspecialElement 之间表示的组合被理解为额外的组合。

三种简单的解决方法:

  • 使用 基于子集。但这需要明确记录组合两端的角色。
  • 直观地显示rootspecialElement之间的组合是TreeNode的反身组合的特化(只需添加)。
  • 删除额外的冗余组合,而是在附加到 root 的注释中添加一个 constraint,例如以纯文本 { can have at most one specialElement child node }(但我相信有人会设法表达这个正式加入 OCL ;-) )

更多的想法,你也可以看看 in UML