私はJavaでチェスゲームをデザインしています(AIはなく、ユーザーが制御します)、まだOOPに慣れています。私には2つの質問があります。Javaでチェスゲームのオブジェクトを設計する
私はGame
、Cell
、Piece
とBoard
オブジェクト、Player
オブジェクトに加えて、持つことを考えていました。
私の質問は本当に必要なのですか?もちろん、私はする必要はありませんが、いずれかのオプションは、より良いデザインと考えられていますか?一方では、Playerはプレーヤーの部分に関する情報を格納するのに便利であり、takeTurn()
などのメソッドを含める必要があります。 (私の実装では、可能なすべての動きを把握したいので、メソッドgetAllMoves()
を使用します)。一方、Playerは単に既存のデータを再編成したものではありませんか?各ピースには、既にどのプレイヤーが所属しているかの表示があります。私のゲームにはAIが含まれていないので、ではなく、Game
に属することが考えられます。再び最初の手では、おそらくPlayer
は、そのデータを使用しますが処理を実行しない方法getAllMoves()
しか持てません。
最初の質問に対する回答が「はい」の場合に関連する2番目の質問は、どのようにオブジェクト間の関係を整理するかです。 getAllMoves()
はセルの配列を入力として取り込みます。 Playerクラスは、そのセルが入力として渡されたセルの一部であるという事実に依存するということは奇妙に感じられます。プレーヤーごとに分割されたセルのデータがボード内のすべてのセルの配列と一緒に保持され、一緒に更新されて、それらが合意することを保証すれば、それはより良いと感じるでしょう。もちろん、彼らが同意するという保証はどちらかの方法で存在しますが、PlayerオブジェクトはBoard
オブジェクトで行われる保証について認識してはいけません。
どのようにこれらの質問に対処しますか?
ありがとうございます!
[BDUF](http://en.wikipedia.org/wiki/Big_Design_Up_Front)を試しているように聞こえます。[TDD]のようなオブジェクトモデルを駆使する別の方法が考えられますhttp://msdn.microsoft.com/en-us/magazine/dd882516.aspx) – razlebe
私はチェスのようなゲームをデザインすることは、OOPに慣れるための非常に良いアプローチだと思います。直下のサブクラスとのインタフェースによってアソシエーションを好むことを忘れないでください。 –