私は現在いくつかの理由でJavaを学んでいますが、主な理由の1つは、Javaが非常にOOP指向の言語であり、Javaでコードを書くことは、OOPプログラミングの背後にあるコアコンセプトを理解するのに本当に役立ちます。
しかし、クラス間の関係を定義するのに苦労しています。継承と構成の違いは理解できますが、全体像を把握するのが難しく、すべてのクラスが全体としてどのように連携する必要があるのかがわかりません。
OOPを使用してTic-TacToeの簡単なゲームを作成する方法の例。
クラスの作成
Game
-クラスのインスタンスを作成し、gameBoard
誰が最初に開始するかを決定し、勝ち負けのゲームを追跡し、ゲームを開始および終了します。クラスを作成する
gameBoard
-三目並べボードを更新し、移動が合法である場合は次のプレーヤーのターンを決定し、勝者がいついるかを決定します抽象クラスを作成します-プレーヤーのタイル(XまたはO)を保持し、引数としてインスタンスを受け取り、プレーヤーが行った移動をインスタンス参照に渡す
Player
メソッドを含みますgameBoard
Human
クラスを拡張するクラスを作成しますPlayer
。キーボードからのプレーヤー入力を処理するメソッドが含まれていますComputer
クラスを拡張するクラスを作成しますPlayer
。インスタンスを引数として取りgameBoard
、ゲームボードを分析して勝利の動き、ブロックの動き、またはその他の動きを探し、次に動きを行うメソッドがあります
これが私がとるアプローチです。ただし、すべてのクラスを関連付けるのに少し問題があります。一部のメソッドとフィールドがどこに属するべきかについて、線が少しぼやけているように見える場合があります。
編集:改訂された質問:
プログラムのあらゆる側面を定義してカプセル化しようとすることにあまり夢中にならずに、クラスの明確で定義された役割を決定するための良い方法論は何でしょうか?私のオブジェクトの多くは、他のクラスから呼び出されて、各クラスが持つ特定の機能、つまりPlayer
更新gameBoard
、gameBoard
更新を実行できますGame
が、これが良い習慣であるかどうかはわかりません。オブジェクト参照が多すぎます。