如果我在模型中有确切数量的东西,我应该使用 n 还是 *?

Should I use n or * if I have exact number of things in the model?

我需要为有关游戏(称为 Downfall)的家庭作业创建 UML 图。我必须创建它,以便它适用于任意数量 (n) 的玩家。

如果这是出现在图表多个位置的确切数字,我应该使用 n 还是 *?我会在多重参数和数组大小中使用它。

例如:有n个边,如果边上有一个刻度盘,则该位置每边都有一个刻度盘,所以这个刻度盘有n-1个相连的刻度盘。

根据 UML 规范,n 在句法上是有效的多重性(请参阅 Ister 的回答),但要确保它在语义上也是正确的,您必须定义 n 的含义某处。通常,n 在 UML 图中不用作重数。

我建议您在这种情况下使用 *。如果最小玩家人数为 2 人,您可以使用 2..*.

此外,您可以使用注释或限制条件,例如{ the number of connected dials is equal to the number of sides minus one }。您也可以使用正式的约束语言,例如 OCL。

TL;DR

您可以使用常量,例如 n。不过,我会建议使用不言自明的常量名称,例如 numberOfPlayers 或至少 noOfPlayers 以明确表示它始终是相同的常量。

常量的名称应该不带引号(以区别于字符串,字符串用双引号表示)。

您也可以使用像 n-1 这样的表达式,只要它的计算结果始终为非负整数。


完整解释

让我们到 the UML specification。所有章节和图形参考均来自它。

1。多重性定义 (7.5.3.2)

重数定义为 lowerValue 和 upperValue。

The lower and upper bounds for the multiplicity of a MultiplicityElement are specified by ValueSpecifications (see Clause 8), which must evaluate to an Integer value for the lowerBound and an UnlimitedNatural value for the upperBound (see Clause 21 on Primitive Types)

2。值规范定义

ValueSpecification 定义为 LiteralSpecification (8.2) 或 Expression 或 OpaqueExpression(均在 8.3 中描述)。

LiteralSpecification 本质上只是我们感兴趣的情况下的一个数字,因此它不是您所需要的。但这并不是 www.admiraalit.nl 在他的回答中建议的唯一选择。

3。表达式定义 (8.3.3.1)

表达式是一种通过一些文本表示和最终计算提供值的机制(我在这里进行了简化)。例如:

An Expression is evaluated by first evaluating each of its operands and then performing the operation denoted by the Expression symbol to the resulting operand values

如果您使用不带操作数的简单表达式,它只会变成一个常量,即您模型的模板。因此,只要常量的计算结果为非负整数(或在上限的情况下为 UnlimitedNatural),请随意使用常量作为多重值。

它甚至可能是一个在对象的生命周期内改变其值的表达式,但是确保始终满足这种多样性可能会变得具有挑战性。