オブジェクト指向の方法で設計し、考える方法の感触を得ようとしており、このトピックに関するコミュニティからのフィードバックを得たいと考えています。以下は、オブジェクト指向でデザインしたいチェス ゲームの例です。これは非常に広い設計であり、この段階での私の焦点は、誰がどのメッセージを担当しているか、オブジェクトがどのように相互に作用してゲームをシミュレートしているかを特定することだけです。悪い設計要素 (高結合、悪い結束など) がある場合は指摘し、それらを改善する方法を教えてください。
チェスゲームには次のクラスがあります
- ボード
- プレーヤー
- ピース
- 四角
- チェスゲーム
Board は正方形で構成されているため、Board に Square オブジェクトの作成と管理を任せることができます。各ピースも正方形上にあるため、各ピースはそれが置かれている正方形への参照も持っています。(これは意味がありますか?)。次に、各ピースは、ある正方形から別の正方形に移動する責任があります。Player クラスは、所有するすべてのピースへの参照を保持し、それらの作成にも責任があります (プレーヤーはピースを作成する必要がありますか?)。Player にはメソッド takeTurn があり、このメソッドは、ピースの位置を現在の位置から別の位置に変更するピース Class に属するメソッド movePiece を呼び出します。今、私は Board クラスが何を担当しなければならないのかについて混乱しています。ゲームの現在の状態を判断し、いつゲームが終了するかを知るために必要だと思いました。しかし、ピースが変わるとそれが変わる」の場所は、ボードをどのように更新する必要がありますか? ピースが存在し、ピースが移動すると更新される正方形の個別の配列を維持する必要がありますか?
また、ChessGame は最初に Board オブジェクトと player オブジェクトを作成し、これらのオブジェクトがそれぞれ正方形とピースを作成してシミュレーションを開始します。簡単に言うと、ChessGame のコードは次のようになります。
Player p1 =new Player();
Player p2 = new Player();
Board b = new Board();
while(b.isGameOver())
{
p1.takeTurn(); // calls movePiece on the Piece object
p2.takeTurn();
}
ボードの状態がどのように更新されるかは不明です。ピースにはボードへの参照が必要ですか? 責任の所在はどこにある?誰がどの参照を保持していますか? あなたの意見を参考にして、このデザインの問題点を指摘してください。私は意図的にアルゴリズムやゲーム プレイの詳細に焦点を当てていません。私はデザインの側面にのみ関心があるからです。このコミュニティが貴重な洞察を提供できることを願っています。