考虑与我最喜欢的例子(国际象棋)进行简单的聚合:我会创建像二维棋子一样的棋盘(至少在我看来是很好的解决方案),例如:
chessman [,] board=new chessman[8,8];
这意味着在每个位置都可以有一个西洋棋棋子。但实际上,最多只会有32名西洋棋棋子。 这就是问题 - 类图应该显示,实现还是我的假设?
BOARD<> ---- Chessman 0..64或0..32?
因为实现肯定允许64,而游戏逻辑不应允许超过32。
答案 0 :(得分:2)
不应该作为0...64
,因为有64个ChessMan
,其中只有32个数组不为空。
在类图中,我们不会省略(减少)null的引用
再一次,这是真的,只有32个对象不为null,但这不是类图事物,你需要游戏中的整个64个块,这就是类图描述。
但除此之外,我真的没有看到你的方法设计得很好,因为board
数组总是有+ 50%为空。所以我的建议是保持(跟踪)ChessMan
,并找到每个ChessMan
位置。您还可能需要删除丢失的ChessMan
正如您在上面的示例中所看到的那样,丢失每个ChessMan
可能导致在数组中设置空值,但在类图中我们总是设置关联的ACTUAL大小。登记/>
您和我的解决方案存在很大差异,您的解决方案针对最佳流程执行进行了优化(针对速度进行了优化),如果每次移动您只需从board
读取相关块并处理该单词。
但我的内存管理已针对最佳内存管理进行了优化(针对内存使用进行了优化),在此解决方案中,您只需检查整个数组,找出谁属于相关块。
另一种解决方案是继续跟踪位置