2012-06-15 26 views
5

祖母が光を放つことを望むことを望む。非常に高い概観は、私はコーディングの初心者ではありませんが、OOPにとってまだ新しいことです。このメッセージクラスは、私たちが書いている大規模なシミュレーションアプリケーションの中心にあります。私はそれを愚かにしたくありません。このインターフェイスは、アプリケーションをシーケンサから実行者に、そしてその逆に半分に削減します。深いクラスの継承階層 - 悪い考えですか?

私の質問は、この深い継承階層を持つことは悪い考えであるかどうかです(画像はまだ鮮明になっておらず、最後に5または6深くなるかもしれません)。これは、いくつかの子クラスに継承するのではなく、親クラスへの直接的な関連付けを持つこととは対照的です。

深い継承階層は良い考えではなく、子クラスが単に親のデータを継承している場合は、その子をデータとして単純に子に含めるべきですが、なぜか私の頭を包み込むのに苦労している。もし私が継承階層を深めにしたり、そういうものを作ることに決めたら、どういう悪いことが起こりますか?明らかに小さなパフォーマンスヒットがあり、階層の最上部で変化するものはアプリ全体に大きな波紋を残すでしょうが、それ以外は問題はありません。それとは別に、パフォーマンスのマイナーな違いについてはほとんど気にしません。

Class Hierarchy

(ボーナス質問:?もののこの種を扱う既製のパッケージがあります我々は扱わ低レベルの物理シミュレーションのほとんどを持っているが、我々は持っているつもりだシーケンスプログラム私が作ったのは、私が前にした約10,000人のシミュレーション開発者に似ているという疑いがあります。ロサンゼルスで暮らすことは嫌いではないでしょうか?採用しています)

+0

詳細はわかりませんが、レイアウトはかなり厄介です。 qについては。 2、あまりにもバットuは7年前に私に尋ねなかった。 –

答えて

9

子クラスが単に親データを継承する場合

これは悪い考えです。この基本的なクラスは、一連の(具体的な)クラスが尊重する最も一般的なコントラクトとして定義されるということです。これは通常、契約が約の動作であり、実装ではないことを意味します。

私が相続財産の階層を7倍にすることに決めた場合、どんなに悪いことが起こるでしょうか?ここ

大きな問題は平凡です:

  • 脆弱基底クラス(ベースへの変更は、派生にとっては悪夢です)
  • 増加カップリング(あまりにも多くの基底クラスでは、密結合が来る)
  • カプセル化が弱くなる
  • テストの問題(リーフレベルのオーバーライドされたメソッドは、エンドユーザの動作を常に正確に再現するためにテストすることはできません)
  • メンテナンス

は(あなたは多くのWhy Ada isn't popularにこの論文を熟読したい(強い結合から来ている)、特に、項目6、パラ6。)

この種のものを扱う既製のパッケージはありますか?

あなたが探しているものはわかりませんが、自動化された階層簡略化ツールを探しているなら、わかりません。また、そのようなパッケージが存在する場合は、あなたの言語に大きく依存し、あなたは言及していません。

このような問題のほとんどは、集約や特質や依存性注入などの選択肢を見ることで解決できます。これらは設計時の問題であり、一般的にコンパイラーや数百万のLOCよりもホワイトボードで最もよくアイロンがけされています(IMO)。

1

この質問はかなり遅れていますが、私はこれについて多くの考えを持ち、深い継承階層に噛まれています。彼らが悪い1つの理由は、必然的に多くのサブクラスを専門とするため、分類が間違ってしまうためです。しかし、いったんクラス構造が整ったら、変更するのは難しくなります。これは、クライアントコードを破るためです。

私はこれについてブログしましたhere

関連する問題