0

私は 2D ゲーム用のコードを書き始め、可能な限り一般的なものを維持しようとするクラス「オブジェクト」を作成しました。(w、h、x、y など) のようなあらゆる種類の要素 (建物、ppl、インターフェイス ボタンなど) に共通するいくつかのメソッドと属性がありますが、それらのほとんどは適用された場合にのみ意味を持ちます。および特定のタイプのアイテム。ゲーム内のすべてのタイプのアクターに対して、新しいクラスを継承する必要があるのでしょうか? これが一般的な方法なのか、それとも別の方法で管理する必要があるのか​​ 疑問に思っています。

前もって感謝します。

4

3 に答える 3

1

動作を導入する場合はサブクラス化しますが、違いが属性ベースの場合はそうしないでください。

Animal (.colour と .makeSound を持っています) -> Dog (.eatOwnPoop を持っています) -> RedDog (いや、具体的すぎて、色で覆われています)

Animal に ".makeSound" があることに注目してください。.bark を dog に入れることもできましたが、.meow を cat などに入れる必要がありました。サブクラスは単純にオーバーライドして具体的なサウンドを提供できます。

ただし、インターフェースを使用してコードをより適切にクロスカットすることはできますが、これは非常に長いトピックであり、ニーズに対しておそらくやり過ぎです (ただし、実行するユニット テストには役立つ可能性があります)。

于 2012-06-15T23:36:16.377 に答える
1

継承を使いすぎているようです。「...のような一般的な属性」と「...特定のタイプに適用された場合にのみ意味をなす」とを同時に言うのは、確かに危険信号です。また、 などのドメイン オブジェクトが のbuildingようなインターフェイス オブジェクトと共通の基本クラスを共有していることは危険信号buttonです。最後に、システム内のすべてのクラスの派生元となる独自のobjet( ?) クラスを定義することは非常にまれです。object考えられないことではありませんが、他のコメントと組み合わせると、非生産的な道を歩み始めたように思えます。

「 Head First OOA&D」など、オブジェクト指向の設計と分析に関する優れたチュートリアルを参照することをお勧めします。

于 2012-06-15T23:38:11.110 に答える
0

あなたは何もする必要はありません。一般に、派生クラスがある種の共通性を示しているが、継承の各レベルで特定の機能を必要とする性質により特化されている場合は、派生クラスを使用すると便利です。ポリモーフィックな動作が必要な場合にも使用できます。あなたは非常にオープンエンドの質問をしましたが、基本的に継承を使用する必要があるとは感じていません。なぜなら、すべての問題が継承を必要とするわけではなく、実際には継承を使いすぎて、実際には必要のない場所に継承を導入する人もいるからです。全体として、オブジェクト指向設計に関する優れた本をまだ読んでいない場合は、コードを別の視点から考え、ソフトウェアと設計の見方を大幅に改善することを強くお勧めします。それ。

于 2012-06-15T23:46:34.850 に答える