UML MultiplicityElements 中的多个值范围

UML multiple ranges of values in MultiplicityElements

根据 UML 规范,在 MultiplicityElements 中指定多个值范围是否正确?例如,AssociationEnd 的两个范围:3..7、10..20 或一个属性,例如。 account:Account[0..5,8..10]。流行的工具允许这样做。正确吗?

一个MultiplicityElement只能有一个multiplicity range.

我不清楚一个 umlDiagramElement 是否可以关联更多的多重元素。 Specification 2.5 似乎允许第 B.8.15.1

TLDR:不,这种多重性是不正确的。

完整答案

UML 2.5 规范的第 7.5.2 节和第 7.5.3.2 节明确定义了多重性在 MultiplicityElement 中定义为两个数字之间的范围,一个特定的数字(如果 upperlower 是等于)或从数字到无穷大的范围,如果 upper 数字是 *。不幸的是,您不能只列出具体的值。更具体地说,它由定义多重性范围限制的两个数字 lowerupper 列出。

我记得它在一些早期版本的 UML 中是可能的,但是我只在一些书中看到过它(不幸的是我记不清楚了),而不是规范本身。

至于 B.8.15.1,它没有说明可能的值,尤其是没有建议列出多个 values/ranges.

的可能性

因此可能的值为:

  • a
  • a..b(其中 a <= b,如果 a = b 那么它等同于 a
  • *
  • a..*(如果a = 0那么它等价于*

ab 都可以是计算结果为大于或等于 0 的自然数的表达式,前提是 a <= b 用于表达式的所有可能值。

当然,对于内联多重性,它们放在方括号中。

另一方面,根据 9.4.2 StructuralFeatures and Parameters MultiplicityElements,因此它们恰好具有一个多重性。

尽管在语法上不允许使用该符号,但您可能希望指定集合。这可以通过附加约束轻松完成。如果您头脑清醒,您可以构建一个 OCL 脚本。但是像 { multiplicity must be within range 0..5 and 8..10 } 这样的明文就可以了。只需使用 * 即可获得真正的多重性。