継承よりもコンポジションを優先しますか? 質問する

継承よりもコンポジションを優先しますか? 質問する

なぜ好むのか継承の代わりに合成? それぞれのアプローチにはどのようなトレードオフがありますか? 逆の質問ですが、コンポジションではなく継承を選択すべきなのはいつでしょうか?

ベストアンサー1

継承よりも合成を優先します。合成の方が柔軟性が高く、後で変更しやすいからです。ただし、常に合成するアプローチは使用しないでください。合成では、依存性注入/セッターを使用して、動作をその場で簡単に変更できます。継承はより厳格で、ほとんどの言語では複数の型から派生することはできません。そのため、TypeA から派生すると、ほぼ問題はありません。

上記に対する私の厳しいテストは次のとおりです。

  • TypeB は、TypeA が想定される場所で TypeB を使用できるように、TypeA の完全なインターフェース (すべてのパブリック メソッドも含む) を公開しますか?継承を示します。

    • たとえば、セスナの複葉機は、飛行機の完全なインターフェースを公開します。つまり、それ以上のインターフェースを公開します。そのため、飛行機から派生するのに適しています。
  • TypeB は TypeA によって公開される動作の一部のみを必要としますか?コンポジションの必要性を示します。

    • たとえば、鳥には飛行機の飛行動作のみが必要な場合があります。この場合、それをインターフェース/クラス/両方として抽出し、両方のクラスのメンバーにするのが理にかなっています。

更新:私の回答に戻ってきましたが、バーバラ・リスコフの具体的な言及がなければ不完全であるようです。リスコフの置換原則「この型から継承すべきか?」のテストとして

おすすめ記事