オブジェクト指向の方法で設計および思考する方法を理解しようとしています。このトピックについて、コミュニティからフィードバックをもらいたいと思っています。以下は、オブジェクト指向で設計したいチェスゲームの例です。これは非常に幅広い設計であり、この段階での私の焦点は、ゲームをシミュレートするために、どのメッセージの責任者とオブジェクトが互いにどのように相互作用するかを特定することです。悪いデザインの要素(高い結合、悪い凝集など)があるかどうか、そしてそれらをどのように改善するかを指摘してください。
チェスゲームには次のクラスがあります
- ボード
- プレーヤー
- ピース
- 平方
- ChessGame
ボードは正方形で構成されているため、ボードは正方形オブジェクトの作成と管理を担当することができます。各ピースも正方形上にあるため、各ピースには、それが置かれている正方形への参照もあります。(これは意味がありますか?)次に、各ピースは、ある正方形から別の正方形に移動する責任があります。プレーヤークラスは、彼が所有するすべてのピースへの参照を保持し、それらの作成にも責任があります(プレーヤーはピースを作成する必要がありますか?)。プレーヤーにはメソッドtakeTurnがあり、このメソッドは、ピースの場所を現在の場所から別の場所に変更するピースクラスに属するメソッドmovePieceを呼び出します。今、私は理事会クラスが正確に何に責任を負わなければならないかについて混乱しています。ゲームの現在の状態を判断し、ゲームがいつ終了するかを知る必要があると思いました。しかし、作品が変わるとそれは s場所ボードはどのように更新する必要がありますか?ピースが存在し、ピースが移動すると更新される正方形の個別の配列を維持する必要がありますか?
また、ChessGameは最初にボードオブジェクトとプレーヤーオブジェクトを作成し、次にそれぞれ正方形とピースを作成してシミュレーションを開始します。簡単に言えば、これは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();
}
ボードの状態がどのように更新されるかはわかりません。ピースにはボードへの参照が必要ですか?責任はどこにあるべきですか?誰がどのような参照を保持していますか?あなたの入力を手伝って、このデザインの問題を指摘してください。私はデザインの側面にのみ興味があるので、アルゴリズムやゲームプレイの詳細には意図的に焦点を合わせていません。このコミュニティが貴重な洞察を提供できることを願っています。
takeTurn()
p1の動きがゲームを終了した場合、p2は呼び出すべきではありません。あまり気の利いたコメント:プレイヤーwhite
とを呼び出す方が自然だと思いますblack
。