我需要为游戏的功课创建UML图(称为Downfall)。我必须创建它,以便它可以在任意数量(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。
您可以使用常量,例如n
。不过,我建议您使用一个不言自明的常量名称,例如numberOfPlayers
或至少使用noOfPlayers
,以使它很明显始终是相同的常量。
常量的名称应不带引号(以区别于双引号表示的字符串)。
您也可以使用n-1
之类的表达式,只要它始终始终为非负整数即可。
the UML specification出发。所有节和图参考均来自此。
多重性定义为lowerValue和upperValue。
MultiplicityElement的多重性的上限和下限由ValueSpecifications指定(请参阅第8章),ValueSpecifications必须将lowerBound的整数值和上限的UnlimitedNatural值计算为整数(请参阅基本类型的条款21)
ValueSpecification被定义为LiteralSpecification(8.2)或Expression或OpaqueExpression(均在8.3中进行了描述。
LiteralSpecification本质上只是我们感兴趣的一个数字,所以它不是您所需要的。但这不是www.admiraalit.nl在他的回答中建议的唯一选择。
表达式是一种通过一些文本表示形式并最终通过计算来提供值的机制(我在这里简化)。例如:
首先通过评估其每个操作数来评估表达式,然后对所得的操作数值执行由表达式符号表示的运算
如果使用不带操作数的简单表达式,它将简单地成为一个常量,该常量是模型的模板。因此,只要常量的求值为非负整数(上限时为UnlimitedNatural),就可以随意使用常量。
它甚至可能是在对象的整个生命周期中改变其值的表达式,但是确保始终满足这种多样性可能会变得很困难。