オブジェクトとそれらの関係を設計するときに、構成と汎化を決定する方法は?

StackOverflow https://stackoverflow.com/questions/602063

  •  03-07-2019
  •  | 
  •  

質問

クラスを設計するときに、構成または一般化に進む方法を決定するという、この答えをstackoverflowコミュニティから探すことを考えました。

役に立ちましたか?

解決

任意の数量の別のオブジェクトのセットを持つクラスがある場合、コンポジションを使用します。共通のプロパティを一連のオブジェクトと共有するが、他の異なるプロパティまたは動作を持つこともできるクラスがある場合、汎化を使用します。

たとえば、自動車にはエンジン、ホイールなどのコンポーネントがあります。これは構成関係です。ただし、車両は車の一般化です。なぜなら、トラックのように、異なる特性を持つ別の種類の車両を使用できるからです。車とトラックは、車両の派生クラスです。

他のヒント

2つのクラス間の関係が「is-a」であるかどうかを自問してください。または「has-a」タイプ

公開継承(IS_A)について話している場合、重要なのは、リスコフの代替原則と、継承に関してそれが何を意味するかを理解することです。特に、IS-A関係はコンテキスト依存であることを意味します。これは、パブリック継承の見落とされがちな側面です。

上記の例を使用するには、呼び出しコードに影響を与えずにVehicleクラスを使用するように記述されたプログラムでVehicleクラスを代入できる場合にのみ、CarクラスとTruckクラスをVehicleから派生させる必要があります。

実装の継承(別名、C ++のプライベート継承)について話している場合、再利用メカニズムとして継承よりも合成を優先する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top