如何在 UML 中对二维阵列板建模:关联与属性
How to model 2D array board in UML: associations vs attributes
我必须在 UML 中对元素棋盘建模,类似于国际象棋游戏,但这里 棋盘的维度是可变的。我的问题是在为电路板建模时。我将它建模为一个二维数组(有一个代表空单元格)。
这是我所拥有的示例图像:
- 这是正确的吗?
在我看来,用 piece[][] 属性和关联来表达 Board 和 Piece 之间的关系是冗余,但除此之外我无法理解了解如何仅使用关联来表示二维数组。
- 有没有办法用关联和多重性来表达二维元素数组?
编辑:
- 棋盘大小取决于“行”和“列”属性中的值。 是否可以将其表示为派生属性?
Is there a way to express a 2D array of elements just with association and multiplicity?
不,多重性仅表示元素的数量,而不表示集合的结构(在您的情况下为 matrix/2D-array)。
请注意,在 class 的隔间中使用带有属性的符号是完全相同的,所以 [8][8]
正如您可能想要做的那样(您还缺少 [= 中的多重性11=]) 不是标准的一部分。
在 formal/2017-12-05 §9.5.4 第 113 页:
<property> ::= [<visibility>] [‘/’] <name> [‘:’ <prop-type>] [‘[‘ <multiplicity-range> ‘]’] [‘=’ <default>] [‘{‘ <prop-modifier > [‘,’ <prop-modifier >]* ’}’]<property> ::= [<visibility>] [‘/’] <name> [‘:’ <prop-type>] [‘[‘ <multiplicity-range> ‘]’] [‘=’ <default>] [‘{‘ <prop-modifier > [‘,’ <prop-modifier >]* ’}’]
因此,如果您想遵循标准,则必须使用 [64]
无论您使用关联还是属性。
It seems to me that expressing the relation between Board and Piece both with the piece[][] attribute and with the association is redundant
在你的图表中,忘记了关于多重性的问题以及关联没有多重性意味着 1 的事实,不可能知道关联是否对应于你的属性,因为 属性/memberEnd 丢失。无论如何,同时显示对应于同一 属性 的属性和关联是合法的……即使那样也不能解决您的问题。
编辑后
如果行数和列数不是静态已知的,则件数也是可变的 => 使用的多重性是 [0..*]
(或快捷方式 [*]
)或 [1..*]
取决于你是否可以没有正方形。
对我来说,使用派生属性至少是无用的,但最糟糕的是隐藏你真的有一个集合的事实。
矩阵怎么用
在你的图表中表明你有一个 行 x 列 的矩阵的最简单方法是添加一个注释,当然方法只是信息性的,如果您还想生成代码还不够,但这也取决于您使用的工具。例如:
另一种方法是为数组定义一个模板 class(有关绑定的表示法,请参阅 formal/2017-12-05 第 26 页):
至 comprehensive and excellent answer, I'd nevertheless would like to add that there is an opportunity to improve the model, abstracting it from the 2D array and expressing in an implementation neutral way what you want to achieve, by using a qualifier:
这以实现中立的方式表示,您可以将具有某些坐标的板映射到一块。您可以通过对坐标值的约束来进一步优化此模型。优点是您不受二维数组的约束。您也可以使用哈希映射或使用一对坐标的字典来获取片段。
我必须在 UML 中对元素棋盘建模,类似于国际象棋游戏,但这里 棋盘的维度是可变的。我的问题是在为电路板建模时。我将它建模为一个二维数组(有一个代表空单元格)。
这是我所拥有的示例图像:
- 这是正确的吗?
在我看来,用 piece[][] 属性和关联来表达 Board 和 Piece 之间的关系是冗余,但除此之外我无法理解了解如何仅使用关联来表示二维数组。
- 有没有办法用关联和多重性来表达二维元素数组?
编辑:
- 棋盘大小取决于“行”和“列”属性中的值。 是否可以将其表示为派生属性?
Is there a way to express a 2D array of elements just with association and multiplicity?
不,多重性仅表示元素的数量,而不表示集合的结构(在您的情况下为 matrix/2D-array)。
请注意,在 class 的隔间中使用带有属性的符号是完全相同的,所以 [8][8]
正如您可能想要做的那样(您还缺少 [= 中的多重性11=]) 不是标准的一部分。
在 formal/2017-12-05 §9.5.4 第 113 页:
<property> ::= [<visibility>] [‘/’] <name> [‘:’ <prop-type>] [‘[‘ <multiplicity-range> ‘]’] [‘=’ <default>] [‘{‘ <prop-modifier > [‘,’ <prop-modifier >]* ’}’]<property> ::= [<visibility>] [‘/’] <name> [‘:’ <prop-type>] [‘[‘ <multiplicity-range> ‘]’] [‘=’ <default>] [‘{‘ <prop-modifier > [‘,’ <prop-modifier >]* ’}’]
因此,如果您想遵循标准,则必须使用 [64]
无论您使用关联还是属性。
It seems to me that expressing the relation between Board and Piece both with the piece[][] attribute and with the association is redundant
在你的图表中,忘记了关于多重性的问题以及关联没有多重性意味着 1 的事实,不可能知道关联是否对应于你的属性,因为 属性/memberEnd 丢失。无论如何,同时显示对应于同一 属性 的属性和关联是合法的……即使那样也不能解决您的问题。
编辑后
如果行数和列数不是静态已知的,则件数也是可变的 => 使用的多重性是 [0..*]
(或快捷方式 [*]
)或 [1..*]
取决于你是否可以没有正方形。
对我来说,使用派生属性至少是无用的,但最糟糕的是隐藏你真的有一个集合的事实。
矩阵怎么用
在你的图表中表明你有一个 行 x 列 的矩阵的最简单方法是添加一个注释,当然方法只是信息性的,如果您还想生成代码还不够,但这也取决于您使用的工具。例如:
另一种方法是为数组定义一个模板 class(有关绑定的表示法,请参阅 formal/2017-12-05 第 26 页):
至
这以实现中立的方式表示,您可以将具有某些坐标的板映射到一块。您可以通过对坐标值的约束来进一步优化此模型。优点是您不受二维数组的约束。您也可以使用哈希映射或使用一对坐标的字典来获取片段。