あるクラスのインスタンス変数は、別のクラスのオブジェクトです! 2つのクラス間の関係は何ですか。どちらも同じパッケージに入っています。
1 に答える
2 つのクラスは確かに関連しています。つまり、これらのクラスにはAssociationがあります。ただし、それらの関係の性質は、 AggregationまたはCompositionのいずれかになります。例を挙げて、 Inheritanceとの違いを説明します。次のクラスを検討してください。
Shape
(基本クラス。abstractにすることができます)Circle
、Triangle
などSquare
(派生クラス)Line
、 (集約または構成Colour
で使用されるクラス)
派生クラスのいずれか: Circle
、Triangle
、Square
「IS-A」 Shape
も同様です。これは、サブクラスがスーパークラスのような継承Circle extends Shape
です。publicおよびprotected属性 ( areaなど) と動作 ( など) はすべてmove()
継承され、子クラスからアクセスできます。
ここで、これらの形状はそれぞれLine
(s)で構成されColour
、これらのクラスの実際のインスタンスが形状クラス オブジェクト内の属性 (プロパティ)として存在します。
これは「HAS-A」関係として知られています。なぜなら、Shape
a にSquare
は a Colour
と four Line
(s) があるからです。この関係は、次の 2 つの形式でさらに観察できます。
集約(方向性のある関連)
ここでは、Shape
サブクラスとColour
集約を持ちます。この関係は多対 1です。つまり、形状は 1 つの色のみを持つことができ、1 つ以上の形状は同じ色を持つことができます。構成(集約のより強力な形式です)
ここで、Shape
サブクラスとLine
(s) は1 対多の構成を持ちます。違いは、含まれているオブジェクトの有効期間がそのコンテナーに依存することです。
たとえば、 aTriangle
が破壊された場合、それLine
(s) も破壊されます。一方、赤く塗られた場合、対応するオブジェクトは、多対 1 の関係の一部として、他の形状オブジェクトからも参照される可能性があるColour
ため、まだ生きたままです。
参照:
Has-A 関係 (ウィキペディア)継承よりも構成
(ウィキペディア) 継承
よりも構成を優先しますか? (StackOverflow)
集約 vs 構成 vs 継承 vs 関連付け vs 依存