Inheritance 表示一棵树,其中根正好有此特定类型的一个子树

Inheritance 表示一棵树,其中根正好有此特定类型的一个子树,inheritance,tree,constraints,uml,class-diagram,Inheritance,Tree,Constraints,Uml,Class Diagram,我想对一棵树进行建模,在这种情况下,类节点由自身的多个实例组成 现在,如何指示一个约束,如“树的根可以包含所需的任意多个节点,但只能有此特定类型节点的一个实例”(特殊节点本身可以包含任何内容) 下面的图a表明,这两个组合之间存在冲突,我将能够添加尽可能多的specialElement作为根元素,因为它们是treeNodes 我如何表示这个约束 您在关联的末尾缺少属性。更具体的属性可以子集更一般的属性,其多重性正好为[1]。您在关联的末尾缺少属性。更具体的属性可以子集更一般的属性,其多重性正好为[

我想对一棵树进行建模,在这种情况下,类
节点
由自身的多个实例组成

现在,如何指示一个约束,如“树的根可以包含所需的任意多个节点,但只能有此特定类型节点的一个实例”(特殊节点本身可以包含任何内容)

下面的图a表明,这两个组合之间存在冲突,我将能够添加尽可能多的
specialElement
作为根元素,因为它们是
treeNodes

我如何表示这个约束


您在关联的末尾缺少属性。更具体的属性可以子集更一般的属性,其多重性正好为[1]。

您在关联的末尾缺少属性。更具体的属性可以子集更一般的属性,其多重性正好为[1].

您当前的模型有一个缺陷:
root
specialElement
都继承了它们所社交的带有
TreeNode
的组合。因此,您在
root
specialElement
之间表示的组合被理解为另一个组合

有三种简单的解决方法:

  • 使用基于子集的base。但这需要明确地记录组合每一端的角色
  • 直观地显示
    特殊元素
    之间的组合是
    树节点
    的自反组合的特化(只需添加)
  • 删除额外的冗余组合,改为在附加到
    根的注释中添加a,例如在纯文本
    {最多可以有一个specialElement子节点}
    (但我相信有人会设法在OCL中正式表达这一点;-)

有关更多想法,您还可以查看UML。

您当前的模型有一个缺陷:
root
specialElement
都继承了它们专用的
TreeNode
组合。因此,您在
root
specialElement
之间表示的组合被理解为另一个组合

有三种简单的解决方法:

  • 使用基于子集的方法。但这需要明确地记录组合每一端的角色
  • 直观地显示
    特殊元素
    之间的组合是
    树节点
    的自反组合的特化(只需添加)
  • 删除额外的冗余组合,改为在附加到
    根的注释中添加a,例如在纯文本
    {最多可以有一个specialElement子节点}
    (但我相信有人会设法在OCL中正式表达这一点;-)

关于更多的想法,您还可以看看UML。

我想您需要提供一张图纸,使其成为一个好的答案。特别是
子集
部分不明显。这是一个很好的答案,如果你添加一个图表,我将投票!我想你需要提供一张图纸,让它成为一个好的答案。特别是
子集
部分不明显。这是一个很好的答案,如果你添加一个图表,我将投票!谢谢,我也曾经理解过子集银行,我也曾经理解过子集银行