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

UML类图-多重性是否决定了实现限制?,uml,analysis,class-diagram,diagramming,Uml,Analysis,Class Diagram,Diagramming,以我最喜欢的例子(国际象棋)来考虑简单的聚合:我会创建类似棋盘的二维棋子阵列(至少在我看来这是一个很好的解决方案),例如: 这意味着在每个位置上都可以有一个棋子。但实际上,最多只有32个棋子。 这就是问题所在——类图应该显示什么,实现还是我的假设 棋盘----棋子0..64还是0..32 因为实现肯定允许64位,而游戏逻辑不应该允许超过32位。不应该将其作为0…64,因为有64位棋子,其中只有32位数组不为空。 在类图中,我们不会忽略(减少)空引用。 再一次,这是真的,只有32个对象不为nul

以我最喜欢的例子(国际象棋)来考虑简单的聚合:我会创建类似棋盘的二维棋子阵列(至少在我看来这是一个很好的解决方案),例如:

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

棋盘----棋子0..64还是0..32


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

不应该将其作为
0…64
,因为有64位
棋子,其中只有32位数组不为空。
在类图中,我们不会忽略(减少)空引用。

再一次,这是真的,只有32个对象不为null,但这不是类图,游戏中需要整个64个块,这是类图描述的。
但除此之外,我真的不认为您的方法设计得很好,因为
板上总是有+50%的
数组为空。因此,我的建议是保持(跟踪)棋子,并找到每个棋子所在的位置。您还可能需要删除丢失的
棋子
s.

正如您在上面的示例中所看到的,丢失每个
棋子可能会导致在数组中设置空值,但在类图中,我们总是设置关联的实际大小。

您的解决方案和我的解决方案有很大的不同,您的解决方案针对最佳流程执行进行了优化(针对速度进行了优化),以防您每次移动都只需从
中读取相关块,然后处理单词。
但我的是针对最佳内存管理进行优化的(针对内存使用进行了优化),在这个解决方案中,您只需检查整个阵列,以找出谁属于相关块。


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

谢谢,很好的解释!根据您的方法,我假设您必须使用另一个64个正方形的2D数组来查找可用位置等?我建议通过
列表(无数组)继续跟踪可用的
棋子
,因为列表/数组的大小正在减小,保持空值不是一个好主意。@user25111414是的,但您需要将板坐标存储在某个地方。如果没有表示板8x8网格的阵列,您将如何计算可能的移动、检查可用性?但我同意棋子是分开存放的,只是问如何从那里走得更远。正如我所说,你的方法最适合执行,这意味着你只需检查周围的方块就可以找到可能的移动,但我的方法是说只保留可用的棋子,在这种情况下,您必须检查并处理所有可用的棋子位置(
x
y
),以找出可能的移动。假设您需要移动一个棋子,那么如果您只需按
x
y
对可用的棋子数组进行排序,您将通过在相关棋子索引附近的数组中进行小搜索来找到目标块状态。对不起,按x和y对棋子数组进行排序是什么意思?
chessman [,] board=new chessman[8,8];