1. ホーム
  2. oop

オブジェクト指向設計に関連するコンポジションとは?

2023-09-21 05:26:23

質問

私は、quot;favor composition over inheritance"についてよく聞きます(このサイトでも読みます)。

しかし、コンポジションとは何でしょうか?継承はPerson : Mammal : Animalで理解できるのですが、Compostionの定義がどこにあるのかよくわかりません...。どなたか教えてください。

どのように解決するのですか?

合成とは、単純な型を組み合わせて、より複雑な型を作ることです。あなたの例では、合成は次のようになります。

Animal:
    Skin animalSkin
    Organs animalOrgans


Mammal::Animal: 
    Hair/fur mammalFur
    warm-blooded-based_cirulation_system heartAndStuff

Person::Mammal: 
    string firstName
    string lastName

もし、完全にコンポジションにしたい場合(そして、すべての継承を取り除く)には、次のようになります。

Animal:
    Skin animalSkin
    Organs animalOrgans

Mammal:
    private Animal _animalRef
    Hair/fur mammalFur
    warm-blooded-based_cirulation_system heartAndStuff

Person:
    private Mammal _mammalRef
    string firstName
    string lastName

この方法の利点は,型 MammalPerson は、その前の親のインタフェースに適合する必要はありません。この というのは、スーパークラスの変更がサブクラスに深刻な影響を与えることがあるからです。 彼らはまだこれらのクラスのプライベートなインスタンスを通してこれらのクラスのプロパティと動作にアクセスすることができ、これらの元スーパークラスの動作を公開したい場合は、単にパブリック メソッドでそれらをラップすることができます。

私はここで良い例と良いリンクを見つけました。 http://www.artima.com/designtechniques/compoinh.html