構成と集計
クラスとオブジェクトは相互に関連付けることができます。継承は「IS A」関係を表します。ライオンは動物です。この関係は継承を使用して簡単に表現できます。ここで、 が
Animal
親クラス、
Lion
が子クラスになります。しかし、世界のすべての関係がこのように適切に説明されるわけではありません。たとえば、キーボードは確かにコンピュータと何らかの関係がありますが、
それはコンピュータではありません。手は人と何らかの関係がありますが、人ではありません。これらのケースは、「IS A」ではなく「HAS A」という、異なるタイプの関係を表します。手は人ではありませんが、人には手があります。キーボードはコンピュータではありませんが、コンピュータにはキーボードがあります。"があります"
。これらの概念の違いは、関係の「厳密さ」にあります。簡単な例を見てみましょう
Car
。どの車にもエンジンが付いています。さらに、どの車両も乗客を乗せることができます。
Engine engine
とフィールドの基本的な違いは何ですか
Passenger[] passengers
?
A
乗客が車内に座っている場合、それは乗客
B
も
C
車内にいることを意味するわけではありません。1台の車両に複数の乗客が乗車できます。さらに、乗客全員が車から降りても、車はスムーズに機能し続けます。
Car
クラスと配列の関係は
Passenger[] passengers
それほど厳密ではありません。それは
集約と呼ばれます。このトピックに関する優れた記事は次のとおりです:
クラス (オブジェクト) 間の関係。これは、集計のもう 1 つの良い例です。
Student
学生を表すクラスと、
StudentGroup
学生のグループを表すクラスがあるとします。学生は、物理学クラブ、スター・ウォーズ学生ファンクラブ、またはコメディクラブのメンバーになることができます。
コンポジションは、より厳密なタイプの関係です。合成を使用する場合、オブジェクトには別のオブジェクトがありますが、同じタイプの別のオブジェクトに属することはできません。最も単純な例は車のエンジンです。車にエンジンが付いている場合、そのエンジンは別の車に属することはできません。ご覧のとおり、この関係は
Car
との関係よりもはるかに厳密です
Passengers
。
GO TO FULL VERSION