我的聚合和组合是否正确?

时间:2013-12-11 10:03:34

标签: c# uml class-diagram

我班级的聚合关系(在ArrayCoordinate和Tile之间)是否正确(尤其是箭头方向)?如果没有,请您快速解释一下?

注意:我读过一些关于这个主题的文章,我觉得不能完全理解这个问题。提前谢谢。

My class diagram

enter image description here

enter image description here

编辑: 关于图表的简短描述: 这些是我基于瓦片策略游戏的课程。 Tile类表示我的“游戏板”上的每个图块,以存储图块可以包含的对象(例如,字符,树等)。并且ArrayCoordinate表示tile的索引,用于迭代目的(类似于C#Point类)。

编辑2: 在Tile和ArrayCoordinate上,简短的关系解释是:每个Tile都有一个ArrayCoordinate,没有没有ArrayCoordinate的tile。并且每个Tile总是至少有一个TileObject也有ArrayCoordinate,直接访问它的位置而不先访问Tile。 (对不起,如果我的解释很混乱,请随时询问

1 个答案:

答案 0 :(得分:1)

只要我们知道它的解释,每个UML都是正确的(因为我们可能不遵循UML的标准。)

关于您的问题:

  

我班级的聚合关系(ArrayCoordinate之间)   和瓷砖)是正确的(尤其是箭头方向)?

即使我知道你的UML是在visual studio上设计的,我也不知道它的设计细节,我会回答一般UML图表。

答案取决于你如何解释自己的UML。大多数情况下,当A类和B类之间存在1-n的关系时,有一个来自A类的箭头指向B类,它可以选择在B类附近有一个*(表示有很多那些B)并且还可以在箭头中包括一个名称,该名称指示支持该聚合的字段的名称。如果通常在箭头中指示名称,则可以将其从UML字段中删除,这样您就没有冗余信息(复制)。但是,您的UML在箭头上没有名称,也没有可能表明该关系实际存在的字段。

其次,根据我的推理,UMLTileObject之间聚合的Tile表示方向错误,或者它缺失并且实际存在,但{{1}因为它不提供这些信息(扩展你的UML类会有所帮助)。

编辑:关于你的新TileObject TileObject我会说缺少一个支持与UML 的关系的字段但是似乎visual studio代表1-与填充菱形的关系,不包括支持该关系的字段。 此外,有时视觉工作室代表1-1的关系,有时它不代表;在您的示例中,它表示TileTile与未填充的菱形之间的关系,但它不会在BattleManagerTileObject之间执行此操作。如果这是真的那么我想知道为什么ArrayCordinateTile之间存在n-n关系。 (它应该是1-n关系吗?)

正如我所提到的,我并不熟悉visual studio TileObject设计师,但我会尽量保持UML设计的一致性(如果可能的话)。您想要跳过一致性的唯一时间是尝试压缩您的设计。

关于你的第二次编辑:我认为你真的应该避免缩短类之间的关系。通过这样做,您创建了一个额外的依赖项,您必须知道该新字段的目的是什么(它没有功能目的,但要么是效率目标)。最后,大多数时候这样做的好处并不值得。

最后回答您的问题:UMLArrayCordinate之间的关系很好,因为您说明了以下内容:

  

Tile表示图块的索引,用于迭代

这意味着必须ArrayCoordinateArrayCoordinate之间存在1-n的关系。