UML 类图 - 多重性是否决定了实现限制?

问题描述 投票:0回答:1

考虑使用我最喜欢的示例(国际象棋)进行简单聚合:我会创建像 2D 棋子数组一样的棋盘(至少在我看来这是一个很好的解决方案)例如:

chessman [,] board=new chessman[8,8];

这意味着每个位置上都可以有一个棋子。但实际上,最多只有32个棋子。 这就是问题所在 - 类图应该显示什么,实现还是我的假设?

棋盘<>----棋子0..64还是0..32?

因为实现上肯定允许64个,而游戏逻辑不应该允许超过32个。

uml analysis class-diagram diagramming multiplicity
1个回答
2
投票

不,它应该是

0...64
,因为有64个
ChessMan
,其中只有32个数组不为空。
在类图中,我们不会省略(减少)为空的引用。
enter image description here
再说一次,确实只有 32 个不为空的对象,但这不是类图的东西,你需要游戏中的整个 64 个块,这就是类图描述的。
但除此之外,我真的不认为你的方法设计得很好,因为总是有 +50% 的
board
数组为空。所以我的建议是保留(跟踪)
ChessMan
,并找到每个
ChessMan
本身的位置。您可能还需要删除丢失的
ChessMan

enter image description here
正如您在上面的示例中看到的,丢失每个
ChessMan
可能会导致在数组中设置空值,但在类图中,我们始终设置关联的实际大小。

你和我的解决方案有很大的区别,你的解决方案针对最佳流程执行进行了优化(针对速度进行了优化),以防每次移动时你只需从
board
读取相关块并处理单词。
但我的已经针对最佳内存管理进行了优化(针对内存使用进行了优化),在此解决方案中,您只需检查整个数组即可找出谁属于相关块。

另一个解决方案是继续跟踪位置

© www.soinside.com 2019 - 2024. All rights reserved.