私はこのオブジェクト指向の設計の質問についてしばらく考えていましたが、満足のいく解決策を思い付くことができなかったので、ここの群衆にいくつかの意見を公開したいと思いました。
ターン制のボードゲームを表すゲームクラスがあります。この質問の目的では、モノポリーに似ていると想定できます。私のデザインには、TakeTurnメソッドを含むPlayerクラスがあります。
ゲームはすべてのプレイヤーをループし、TakeTurnメソッドを呼び出して、ターンを完了するために必要なすべてのことを行います。n人のプレイヤーがいて、任意の人数をコンピュータープレイヤーに設定できるようにしたいと思っています。ですから、私の考えは、HumanPlayerクラスとComputerPlayerクラスがあり、どちらもPlayerから派生しているということでした。
ゲームはPlayerクラスのみを認識し、各PlayerでTakeTurnメソッドを順番に呼び出すだけです。私の問題は、ComputerPlayerオブジェクトを完全に自動化できるという事実にあります。つまり、独占の例を維持すると、ロジックの一部を使用してプロパティを購入することを決定できます。ここで、HumanPlayerオブジェクトを使用すると、たとえばプロパティを購入できるようにするために、実際のユーザーから入力を取得する必要があります。これは、異なるインターフェイスを意味し、派生してはならないことを意味する可能性があります。
GameクラスにさまざまなPlayerクラスの実際の実装を明示的に知らない限り、問題の適切な解決策を思いつくことはできませんでした。ゲームクラスでは、人間とコンピューターのプレーヤーだけが存在し、拡張のために効果的に閉じると常に想定できましたが、オブジェクト指向プログラミングとしては適切ではないようです。
これについてのご意見をいただければ幸いです。