2

私のお気に入りの例 (チェス) で単純な集約を考えてみましょう: チェスの駒の 2D 配列のようなチェス盤を作成します (少なくとも、私には良い解決策だと思われます)。

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

これは、各位置にチェスマンがいる可能性があることを意味します。しかし実際には、チェスの駒はせいぜい 32 人しか存在しません。それが問題です - クラス図の表示、実装、または私の仮定は何ですか?

ボード<>----チェスマン 0..64 または 0..32?

ゲーム ロジックでは 32 を超えてはならないのに対し、実装では 64 が許可されているためです。

4

1 に答える 1

2

いいえ、配列の 32 のみが null ではない0...6464 があるため、そうすべきではありません。 クラス図では、null である参照を省略 (減少) しません。 繰り返しますが、null 以外のオブジェクトが 32 個しかないことは事実ですが、これはクラス図の問題ではありません。ゲームには 64 個のブロック全体が必要であり、これがクラス図で説明されています。 しかし、それに加えて、配列 の +50% が常に null であるため、あなたのアプローチが非常にうまく設計されているとは思えません。したがって、私の提案は、sを保持(追跡)し、各場所をそれ自体で見つけることです。失われた s を削除する必要がある場合もあります。 上記の例でもわかるように、これはそれぞれを失う可能性がありますChessMan

ここに画像の説明を入力

boardChessManChessManChessMan
ここに画像の説明を入力
ChessMan、配列に null 値を設定しますが、クラス図では常に関連付けの実際のサイズを設定します。

あなたと私のソリューションには大きな違いがあります.あなたのソリューションは、最高のプロセス実行のために最適化されています(速度のために最適化されています)board.
しかし、私のものは最良のメモリ管理のために最適化されています(メモリ使用量のために最適化されています)。このソリューションでは、配列全体をチェックして、関連するブロックに誰が属しているかを調べるだけです。

別の解決策は、場所を追跡し続けることです

于 2013-11-02T19:54:33.023 に答える