我需要为有关游戏的作业(称为 Downfall)创建 UML 图。我必须创建它,以便它适用于任意数量 (n) 的播放器。
如果这是出现在图表多个位置的确切数字,我应该使用 n 还是 *?我会在多重参数和数组大小中使用它。
例如:有n个边,如果边上有一个表盘,那么那个位置的每一边都必须有一个表盘,所以这个表盘有n-1个相连的表盘。
我需要为有关游戏的作业(称为 Downfall)创建 UML 图。我必须创建它,以便它适用于任意数量 (n) 的播放器。
如果这是出现在图表多个位置的确切数字,我应该使用 n 还是 *?我会在多重参数和数组大小中使用它。
例如:有n个边,如果边上有一个表盘,那么那个位置的每一边都必须有一个表盘,所以这个表盘有n-1个相连的表盘。
您可以使用常量,例如n
. 不过,我建议使用一个不言自明的常量名称,例如numberOfPlayers
或至少noOfPlayers
让它明显地表明它始终是同一个常量。
常量的名称应不带引号(以将其与双引号中的字符串区分开来)。
您也可以使用表达式 like n-1
,只要它始终计算为非负整数即可。
让我们看看UML 规范。所有章节和图参考都来自它。
多重性定义为lowerValue 和upperValue。
MultiplicityElement 的多重性的下限和上限由 ValueSpecifications 指定(参见第 8 条),它必须计算为 lowerBound 的整数值和上界的 UnlimitedNatural 值(参见第 21 条关于原始类型)
ValueSpecification 定义为 LiteralSpecification (8.2) 或 Expression 或 OpaqueExpression(均在 8.3 中描述)。
LiteralSpecification 本质上只是我们感兴趣的案例中的一个数字,所以它不是您需要的。但这并不是 www.admiralalit.nl 在他的回答中建议的唯一选择。
表达式是一种通过一些文本表示和最终计算来提供值的机制(我在这里进行了简化)。例如:
表达式的求值方法是首先计算其每个操作数,然后对结果操作数值执行表达式符号表示的操作
如果你使用一个没有操作数的简单表达式,它就会变成一个常量,作为你的模型的模板。因此,请随意使用常数作为多重性值,只要该常数的计算结果为非负整数(或在上限的情况下为 UnlimitedNatural)。
它甚至可能是一个在对象的生命周期内改变其值的表达式,但是确保始终满足这种多样性可能会变得具有挑战性。
根据 UML 规范,n
在语法上是有效的多重性(参见 Ister 的答案),但为了确保它在语义上也是正确的,您必须定义n
某处的含义。通常,n
在 UML 图中不用作多重性。
我建议你*
在这种情况下使用。如果最少玩家人数为 2,您可以使用2..*
.
此外,您可以使用注释或约束,例如{ the number of connected dials is equal to the number of sides minus one }
. 您也可以使用正式的约束语言,如 OCL。