UML 中的“子集”究竟意味着什么?

www*_*.nl 6 uml subset associations language-lawyer

subsetsUML 2.5.1 规范没有很好地定义关键字。我在第6.4.2节中发现了以下内容:

\n
\n

约束{subsets endA}意味着应用该约束的关联端是关联端endA的子集。

\n
\n

考虑下图:

\n

子集示例

\n

直觉上,我认为这意味着以下内容:

\n
    \n
  1. 一个人可以是零个或多个俱乐部的成员。
  2. \n
  3. 一个人最多可以成为一个俱乐部的领导者。
  4. \n
  5. 如果一个人是俱乐部的领导者,那么他/她也是同一俱乐部的成员。
  6. \n
  7. 如果一个人是一个俱乐部的领导者,那么他/她仍然可以同时成为其他俱乐部的成员。
  8. \n
\n

我想知道4的说法是否正确。在与 Jim L. 的讨论中,在他对另一个问题的回答下的评论中,Jim 写道

\n
\n

您可以\xe2\x80\x99t 限制子集的基数,但超集的元素仍然违反限制。

\n
\n

如果我很好地理解这一点,如果一个人是一个俱乐部的领导者,那么他/她就不能成为另一个俱乐部的成员。

\n

UML 规范中是否有某个地方subsets比我发现的定义更好?

\n

Chr*_*phe 2

定义

您可以在有关属性的第 9.5 节中找到您要查找的内容:

属性是 StructuralFeatures,表示分类器的属性、关联的 memberEnds以及 StructuredClassifiers 的部分。

UML 规范强调它也适用于关联端(第 11.5.3.1 节,第 200 页):

关联端的子集化具有为属性指定的含义(参见 9.5.3)。

更准确地说,子集的语义在第 9.5.3 节(第 112 页)中定义:

一个属性可以被标记为另一个子集属性的子集。在这种情况下,通过从某些上下文中子集属性表示的值集合中消除重复项来计算集合。然后,该集合应包含在(或相同于)通过从相同上下文中的subsettedProperty 表示的值集合中消除重复项而计算出的集合中。

备注:没有将关联作为一个整体进行子集化的定义(即超出关联端,如您的示例中所示)。但是,关于专业化的段落是关于链接集(即关联两端的分类值的元组)而不是值集的原因。现有的定义也可以很容易地同样应用。

应用到你的例子

陈述 4 看来是正确的。假设一个人A是俱乐部C1C2C3、的成员C4,同时也是 的领导者C1

该定义要求子集属性中的唯一值集合isLeaderOf, ie{ C1 }应包含在子集属性的唯一值集合中isMemberOf, ie { C1, C2, C3, C4 }。多重性的上限isLeaderOf不允许成为多个俱乐部的领导者。所以它C1只会留下来。纳入要求意味着如果A是 的领导者C1C1则必须属于俱乐部会员的价值观。只要 C1 仍然存在,您就可以根据需要添加任意数量的俱乐部会员资格。即使添加多个 C1 会员资格也不会改变您声明的真实性。

在您的示例中,上限 1 简化了推理。在更一般的情况下,集合的值不一定是唯一的。因此,在声明多重性的下限和上限时需要小心,因为重复的值可能会造成棘手的情况。但是,包含要求是根据唯一值有意定义的。

语句 3 更棘手,需要推论:您没有对相反的关联端进行子集化。这意味着俱乐部C可以有成员M1M2M3、 ,并且可以有领导者L,但不能保证领导者是同一个俱乐部的成员;你甚至可以有一个没有任何成员的领导者:

  • 子集leader也可以轻松解决该问题。
  • 但即使如此,领导者和成员都是人,并且由于 1 的上限,我们可以推断出这种情况是不可能的,因此陈述 3 也是正确的。