Class 如何在UML中建模2D阵列板:关联与属性

Class 如何在UML中建模2D阵列板:关联与属性,class,multidimensional-array,uml,composition,class-diagram,Class,Multidimensional Array,Uml,Composition,Class Diagram,我必须用UML建模一个由元素组成的棋盘,这类似于一个国际象棋游戏,但这里棋盘的维度是可变的。我的问题是在为电路板建模时。我将它建模为一个二维的片段数组(有一个片段表示空单元格) 以下是我拥有的示例图像: 这是正确的吗? 在我看来,用Piece[]]属性和关联来表示Board和Piece之间的关系是多余的,但是我不知道如何仅用关联来表示二维数组 有没有一种方法可以仅仅通过关联和多重性来表示二维元素数组? 编辑: 电路板大小取决于“行”和“列”属性中的值可以将其表示为派生属性吗? 有没

我必须用UML建模一个由元素组成的棋盘,这类似于一个国际象棋游戏,但这里棋盘的维度是可变的。我的问题是在为电路板建模时。我将它建模为一个二维的片段数组(有一个片段表示空单元格)

以下是我拥有的示例图像:

  • 这是正确的吗?
在我看来,用Piece[]]属性和关联来表示Board和Piece之间的关系是多余的,但是我不知道如何仅用关联来表示二维数组

  • 有没有一种方法可以仅仅通过关联和多重性来表示二维元素数组?
编辑:

  • 电路板大小取决于“行”和“列”属性中的值可以将其表示为派生属性吗?
有没有一种方法可以仅仅通过关联和多重性来表示二维元素数组

不,多重性只表示元素的数量,而不是集合的结构(在您的例子中是矩阵/2D数组)

请注意,在类中使用带有属性的表示法是完全相同的,因此
[8][8]
您可能希望这样做(您还缺少
[]
中的多重性)不是标准的一部分

在第113页§9.5.4中:
::=[]['/'][':'['[']'][''['.]][''.]*'.]['.[''.]]['.]['.]['.]['.]['.[''.][''.][''.]['.[''.[''.][''.][''.].][''.]]].['.['.[''.]代码>

因此,如果要遵循标准,则必须使用关联或属性

在我看来,用Piece[]]属性和关联来表达Board和Piece之间的关系是多余的

在您的关系图中,忘记了关于多重性的问题以及关联1没有多重性的事实,因为缺少属性/memberEnd的名称,所以不可能知道关联是否对应于您的属性。无论如何,显示同一属性对应的属性和关联是合法的。。。即使这样也不能解决你的问题


编辑后

如果行和列的数量不是静态已知的,则工件的数量也是可变的=>要使用的多重性是
[0..*]
(或快捷方式
[*]
)或
[1..*]
,具体取决于是否可以有正方形

对我来说,使用派生属性至少是无用的,但最糟糕的是隐藏了一个事实,即您确实拥有一个片段集合


如何使用矩阵

指示图表中有一个x行列矩阵的最简单方法是添加一个注释,当然,这种方法只是提供信息,在您还想生成代码的情况下是不够的,但这也取决于您使用的工具。例如:

另一种方法是为数组定义模板类(有关绑定的表示法,请参见第26页,共页):

要获得全面而出色的答案,我想补充一点,就是有机会改进模型,将其从2D数组中抽象出来,并以一种与实现无关的方式表达您想要实现的目标,方法是使用:


这意味着以一种实现中立的方式,您可以使用一些坐标将电路板映射到一个工件。您可以通过对坐标值的约束进一步细化此模型。优点是您不必绑定到二维阵列。您也可以使用哈希图或使用一对坐标的字典来获取该片段。

你好,布鲁诺,非常感谢您的回答。它回答了我很多问题!问题是我真的不知道董事会的大小。它取决于board类中的行和列属性。我对问题进行了编辑,将其包括在内。很抱歉,我试图简化这个问题,但我错过了。非常感谢!在将您的答案标记为已接受之前,请澄清一件事:那么,如果我理解正确,在UML中就没有办法指定集合的结构了?我不能以任何方式证明这个板是一个2D元素数组?@NilSuria我编辑了我的答案,当然还有其他方式,包括超出标准但被包括Mine在内的工具所接受。非常感谢@bruno。我把你的回答标为接受。第二个选项看起来就是我要找的,但是我需要研究一下一些类模板,因为我不理解它们是如何工作的。@ NuluriaUML模板类是Java.thank C++中的模板的等价物。我考虑过它,但没有提到它,因为我不支持我的工具中的这个符号。。。是的,这是一个可耻的理由^^