我班级的聚合关系(在ArrayCoordinate和Tile之间)是否正确(尤其是箭头方向)?如果没有,请您快速解释一下?
注意:我读过一些关于这个主题的文章,我觉得不能完全理解这个问题。提前谢谢。
编辑: 关于图表的简短描述: 这些是我基于瓦片策略游戏的课程。 Tile类表示我的“游戏板”上的每个图块,以存储图块可以包含的对象(例如,字符,树等)。并且ArrayCoordinate表示tile的索引,用于迭代目的(类似于C#Point类)。
编辑2: 在Tile和ArrayCoordinate上,简短的关系解释是:每个Tile都有一个ArrayCoordinate,没有没有ArrayCoordinate的tile。并且每个Tile总是至少有一个TileObject也有ArrayCoordinate,直接访问它的位置而不先访问Tile。 (对不起,如果我的解释很混乱,请随时询问
答案 0 :(得分:1)
只要我们知道它的解释,每个UML
都是正确的(因为我们可能不遵循UML
的标准。)
关于您的问题:
我班级的聚合关系(
ArrayCoordinate
之间) 和瓷砖)是正确的(尤其是箭头方向)?
即使我知道你的UML
是在visual studio上设计的,我也不知道它的设计细节,我会回答一般UML
图表。
答案取决于你如何解释自己的UML
。大多数情况下,当A类和B类之间存在1-n的关系时,有一个来自A类的箭头指向B类,它可以选择在B类附近有一个*(表示有很多那些B)并且还可以在箭头中包括一个名称,该名称指示支持该聚合的字段的名称。如果通常在箭头中指示名称,则可以将其从UML
字段中删除,这样您就没有冗余信息(复制)。但是,您的UML
在箭头上没有名称,也没有可能表明该关系实际存在的字段。
其次,根据我的推理,UML
和TileObject
之间聚合的Tile
表示方向错误,或者它缺失并且实际存在,但{{1}因为它不提供这些信息(扩展你的UML
类会有所帮助)。
编辑:关于你的新TileObject TileObject
我会说缺少一个支持与UML
的关系的字段但是似乎visual studio代表1-与填充菱形的关系,不包括支持该关系的字段。
此外,有时视觉工作室代表1-1的关系,有时它不代表;在您的示例中,它表示Tile
和Tile
与未填充的菱形之间的关系,但它不会在BattleManager
和TileObject
之间执行此操作。如果这是真的那么我想知道为什么ArrayCordinate
和Tile
之间存在n-n关系。 (它应该是1-n关系吗?)
正如我所提到的,我并不熟悉visual studio TileObject
设计师,但我会尽量保持UML
设计的一致性(如果可能的话)。您想要跳过一致性的唯一时间是尝试压缩您的设计。
关于你的第二次编辑:我认为你真的应该避免缩短类之间的关系。通过这样做,您创建了一个额外的依赖项,您必须知道该新字段的目的是什么(它没有功能目的,但要么是效率目标)。最后,大多数时候这样做的好处并不值得。
最后回答您的问题:UML
和ArrayCordinate
之间的关系很好,因为您说明了以下内容:
Tile
表示图块的索引,用于迭代
这意味着必须在ArrayCoordinate
和ArrayCoordinate
之间存在1-n的关系。