"subsets" 在 UML 中到底是什么意思?
What does "subsets" mean in UML exactly?
UML 2.5.1 规范没有很好地定义关键字 subsets
。我在第 6.4.2 节中找到以下内容:
The constraint {subsets endA} means that the association end to which this constraint is applied subsets the association end endA.
考虑下图:
凭直觉,我认为这意味着以下内容:
- 一个人可以是零个或多个俱乐部的成员。
- 一个人最多可以成为一个俱乐部的领导。
- 如果一个人是一个俱乐部的领导者,那么he/she也是同一个俱乐部的成员。
- 如果一个人是一个俱乐部的领导者,那么he/she仍然可以同时是其他俱乐部的成员。
不知第4条说法是否正确。在与 Jim L. 的讨论中,在 下的评论中,Jim 写道
You can’t restrict the cardinality of a subset and still have an element of the superset that violates the restriction.
如果我理解得很好,如果一个人是一个俱乐部的领导者,那么he/she就不能成为另一个俱乐部的成员。
UML 规范中是否有某些地方比我发现的定义更好subsets
?
关于你的问题,
在 UML 上下文中,这是您引用的官方定义。
附上你的声明。您的陈述 4 是正确的,但正如 Jim 所提到的,不应限制基数。
您可以有 1 位或多位俱乐部领导以及 1 位或多位个人俱乐部领导。
此外,子集有助于定义继承。例如,在您的图表中,如果 Person 是 Club 的子集,并且他们是俱乐部的领导者,那么他们将自动成为该俱乐部的成员。
如图所示,它的逻辑有点挑剔,子集不仅继承自父class(俱乐部),而且有自己的属性(人),同时时间点回到父级。
希望下面的链接概述了我想说的内容。
一些有用的上下文链接:
What subset constraint means in the UML class diagram
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.138.5537&rep=rep1&type=pdf
-
定义
您可能会在有关属性的第 9.5 节中找到您要查找的内容:
Properties are StructuralFeatures that represent the attributes of Classifiers, the memberEnds of Associations, and the parts of StructuredClassifiers.
UML 规范强调它也适用于关联端(第 11.5.3.1 节,第 200 页):
Subsetting of Association ends has the meaning specified for Property (see 9.5.3).
更准确地说,子集的语义在第 9.5.3 节(第 112 页)中定义:
A Property may be marked as the subset of another subsettedProperty. In this case, calculate a set by eliminating duplicates from the collection of values denoted by the subsetting property in some context. Then that set shall be included in (or the same as) a set calculated by eliminating duplicates from the collection of values denoted by the subsettedProperty in the same context.
备注:没有定义将关联作为一个整体进行子集化(即超出关联端,如您的示例)。但是关于链接集(即关联每一端的分类值的元组)而不是值集的专业化原因的段落。现有的定义也可以很容易地应用。
对你的例子的应用
陈述 4 似乎正确。带一个人 A
是俱乐部 C1
、C2
、C3
、C4
的成员,同时也是 C1
的领导者:
定义要求子集 属性 isLeaderOf
中的唯一值集合,即 { C1 }
应包含在子集 [=68= 的唯一值集合中] isMemberOf
,即{ C1, C2, C3, C4 }
。 isLeaderOf
的多重性上限不允许超过一个俱乐部的领导者。所以它只会保持 C1
。包含要求意味着如果 A
是 C1
的领导者,则 C1
必须在俱乐部成员资格的值中。只要 C1 还在,您可以根据需要添加更多的俱乐部会员资格。即使添加多个 C1 会员资格也不会改变您陈述的真实性。
在您的示例中,上限 1 简化了推理。在更一般的情况下,集合的值不一定是唯一的。因此,在声明多重性的下限和上限时需要小心,因为重复值可能会造成棘手的情况。但是,包含要求是根据唯一值有意定义的。
陈述 3 比较棘手,需要推导:您没有对相反的关联端进行子集化。这意味着俱乐部 C
可以有成员 M1
、M2
、M3
,并且可以有领导者 L
,但不能保证领导者是成员同一俱乐部的;你甚至可以有一个没有任何成员的领导者:
- 子集
leader
也可以轻松解决问题。
- 但即便如此,领导者和成员都是人,并且由于 1 的上限,我们可以推断出这种情况是不可能的,因此陈述 3 也是正确的。
UML 2.5.1 规范没有很好地定义关键字 subsets
。我在第 6.4.2 节中找到以下内容:
The constraint {subsets endA} means that the association end to which this constraint is applied subsets the association end endA.
考虑下图:
凭直觉,我认为这意味着以下内容:
- 一个人可以是零个或多个俱乐部的成员。
- 一个人最多可以成为一个俱乐部的领导。
- 如果一个人是一个俱乐部的领导者,那么he/she也是同一个俱乐部的成员。
- 如果一个人是一个俱乐部的领导者,那么he/she仍然可以同时是其他俱乐部的成员。
不知第4条说法是否正确。在与 Jim L. 的讨论中,在
You can’t restrict the cardinality of a subset and still have an element of the superset that violates the restriction.
如果我理解得很好,如果一个人是一个俱乐部的领导者,那么he/she就不能成为另一个俱乐部的成员。
UML 规范中是否有某些地方比我发现的定义更好subsets
?
关于你的问题,
在 UML 上下文中,这是您引用的官方定义。
附上你的声明。您的陈述 4 是正确的,但正如 Jim 所提到的,不应限制基数。
您可以有 1 位或多位俱乐部领导以及 1 位或多位个人俱乐部领导。
此外,子集有助于定义继承。例如,在您的图表中,如果 Person 是 Club 的子集,并且他们是俱乐部的领导者,那么他们将自动成为该俱乐部的成员。
如图所示,它的逻辑有点挑剔,子集不仅继承自父class(俱乐部),而且有自己的属性(人),同时时间点回到父级。
希望下面的链接概述了我想说的内容。
一些有用的上下文链接:
What subset constraint means in the UML class diagram
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.138.5537&rep=rep1&type=pdf
定义
您可能会在有关属性的第 9.5 节中找到您要查找的内容:
Properties are StructuralFeatures that represent the attributes of Classifiers, the memberEnds of Associations, and the parts of StructuredClassifiers.
UML 规范强调它也适用于关联端(第 11.5.3.1 节,第 200 页):
Subsetting of Association ends has the meaning specified for Property (see 9.5.3).
更准确地说,子集的语义在第 9.5.3 节(第 112 页)中定义:
A Property may be marked as the subset of another subsettedProperty. In this case, calculate a set by eliminating duplicates from the collection of values denoted by the subsetting property in some context. Then that set shall be included in (or the same as) a set calculated by eliminating duplicates from the collection of values denoted by the subsettedProperty in the same context.
备注:没有定义将关联作为一个整体进行子集化(即超出关联端,如您的示例)。但是关于链接集(即关联每一端的分类值的元组)而不是值集的专业化原因的段落。现有的定义也可以很容易地应用。
对你的例子的应用
陈述 4 似乎正确。带一个人 A
是俱乐部 C1
、C2
、C3
、C4
的成员,同时也是 C1
的领导者:
定义要求子集 属性 isLeaderOf
中的唯一值集合,即 { C1 }
应包含在子集 [=68= 的唯一值集合中] isMemberOf
,即{ C1, C2, C3, C4 }
。 isLeaderOf
的多重性上限不允许超过一个俱乐部的领导者。所以它只会保持 C1
。包含要求意味着如果 A
是 C1
的领导者,则 C1
必须在俱乐部成员资格的值中。只要 C1 还在,您可以根据需要添加更多的俱乐部会员资格。即使添加多个 C1 会员资格也不会改变您陈述的真实性。
在您的示例中,上限 1 简化了推理。在更一般的情况下,集合的值不一定是唯一的。因此,在声明多重性的下限和上限时需要小心,因为重复值可能会造成棘手的情况。但是,包含要求是根据唯一值有意定义的。
陈述 3 比较棘手,需要推导:您没有对相反的关联端进行子集化。这意味着俱乐部 C
可以有成员 M1
、M2
、M3
,并且可以有领导者 L
,但不能保证领导者是成员同一俱乐部的;你甚至可以有一个没有任何成员的领导者:
- 子集
leader
也可以轻松解决问题。 - 但即便如此,领导者和成员都是人,并且由于 1 的上限,我们可以推断出这种情况是不可能的,因此陈述 3 也是正确的。