2016-05-10 3 views
0

私は現在、私が取り組んでいるプロジェクト用の一連の特殊なデータ構造クラスを作成していますが、それらは多かれ少なかれいくつかの完全に同一のプロパティと関数を共有していることに気付きました。継承を使用して重複コードを減らすのはどうですか?

私はちょうど重複したコードで暮らすこともできますし、共有された基底クラスから継承させることもできます。その結果、コードの総量が少なくなり、全体的なメンテナンス性が向上します。しかし、うーん、私はこの時点で何をすべきかを決めることができません。

私は多かれ少なかれ継承ルートの恩恵を理解していますが、コードを重複していることと比較すると、それはどういうことでしょうか?

「長期的な」プロジェクトのために行くべき道はどちらですか?

+3

コンポジションを使用することもできます。 – Jarod42

+2

あなたはテンプレートを考えましたか? –

+1

継承を "すべての子は親"の関係*と見なします。これは思考よりも頻繁に起こるものではありません。例えば、方形は長方形ではないかもしれません。長方形は、他の2つのサイトとは独立した2つの対向するサイトの長さを変えることができます。通常、合成(とフリー関数!)はコードの重複を避ける正しい方法です。 –

答えて

1

デザインの観点から、継承はカプセル化に違反します。クラスから継承することで、新しいクラスを親の実装の詳細にリンクします。継承するクラスの特定の実装には必ずしも必要ではありません。

たとえば、クラスvehicleがあるとします。このクラスには、weight_,maxSpeed_fuelCapacity_などの多数のプライベート変数があります。

今度は、クラスbicycleを継承しているとしましょう。新しいクラスは、必要ではないとしても、fuelCapacity_に関連するすべての詳細を持ちます。このようなことは、たとえ実際にコードの揮発性の部分を使用していなくても、親を破る変更が継承するクラスを破る可能性があるため、オブジェクトがより複雑になるため、かなり苦しいことがあります。

もっと安全な選択はcompositionです。

関連する問題