Assoziation, Aggregation und Zusammensetzung in OOP erklärt

Die Unified Modeling Language (UML) ist ein De-facto-Standard für die Modellierung objektorientierter Systeme. In UML gibt es fünf verschiedene Arten von Beziehungen: Zuordnung, Aggregation, Zusammensetzung, Abhängigkeit und Vererbung. Dieser Artikel enthält eine Diskussion der ersten drei dieser Konzepte, wobei die verbleibenden einem anderen Blog-Beitrag überlassen werden.

Assoziation in der objektorientierten Programmierung

Assoziation ist eine semantisch schwache Beziehung (eine semantische Abhängigkeit) zwischen ansonsten nicht verwandten Objekten. Eine Zuordnung ist eine Verwendungsbeziehung zwischen zwei oder mehr Objekten, in der die Objekte ihre eigene Lebensdauer haben und es keinen Eigentümer gibt.

Stellen Sie sich als Beispiel die Beziehung zwischen einem Arzt und einem Patienten vor. Ein Arzt kann mehreren Patienten zugeordnet werden. Gleichzeitig kann ein Patient mehrere Ärzte zur Behandlung oder Beratung aufsuchen. Jedes dieser Objekte hat seinen eigenen Lebenszyklus und es gibt keinen „Eigentümer“ oder Elternteil. Die Objekte, die Teil der Zuordnungsbeziehung sind, können unabhängig voneinander erstellt und zerstört werden.

In UML wird eine Assoziationsbeziehung durch einen einzelnen Pfeil dargestellt. Eine Assoziationsbeziehung kann als Eins-zu-Eins, Eins-zu-Viele oder Viele-zu-Viele (auch als Kardinalität bezeichnet) dargestellt werden. Im Wesentlichen bezeichnet eine Assoziationsbeziehung zwischen zwei oder mehr Objekten einen Kommunikationspfad (auch als Verbindung bezeichnet) zwischen ihnen, so dass ein Objekt eine Nachricht an ein anderes senden kann. Das folgende Codefragment zeigt, wie zwei Klassen, BlogAccount und BlogEntry, miteinander verknüpft sind.

öffentliche Klasse BlogAccount

   {

       private BlogEntry [] blogEntries;

       // Andere Mitglieder der BlogAccount-Klasse

   }}

öffentliche Klasse BlogEntry

   {

       Int32 blogId;

       Zeichenfolge;

       Zeichenfolgentext;

       // Andere Mitglieder der BlogEntry-Klasse

   }}

Aggregation in der objektorientierten Programmierung

Aggregation ist eine spezielle Form der Assoziation zwischen zwei oder mehr Objekten, bei der jedes Objekt seinen eigenen Lebenszyklus hat, aber auch ein Eigentum besteht. Aggregation ist eine typische Ganz- / Teil- oder Eltern / Kind-Beziehung, kann jedoch physische Eindämmung bedeuten oder nicht. Eine wesentliche Eigenschaft einer Aggregationsbeziehung ist, dass das Ganze oder der Elternteil (dh der Eigentümer) ohne den Teil oder das Kind existieren kann und umgekehrt.  

Beispielsweise kann ein Mitarbeiter einer oder mehreren Abteilungen einer Organisation angehören. Wenn jedoch die Abteilung eines Mitarbeiters gelöscht wird, wird das Mitarbeiterobjekt nicht zerstört, sondern lebt weiter. Beachten Sie, dass die Beziehungen zwischen Objekten, die an einer Aggregation teilnehmen, nicht wechselseitig sein können. Das heißt, eine Abteilung kann einen Mitarbeiter „besitzen“, aber der Mitarbeiter besitzt die Abteilung nicht. Im folgenden Codebeispiel ist eine Aggregationsbeziehung zwischen den Klassen BlogAuthor und BlogAccount erkennbar.

öffentliche Klasse BlogAuthor

   {

       private Int32 authorId;

       private Zeichenfolge Vorname;

       private Zeichenfolge lastName;

       // Andere Mitglieder der BlogAuthor-Klasse

   }}

öffentliche Klasse BlogAccount

   {

       private BlogEntry [] blogEntries;

       // Andere Mitglieder der BlogAccount-Klasse

   }}

Die Aggregation wird normalerweise in UML durch eine Linie mit einem hohlen Diamanten dargestellt. Wie die Zuordnung kann die Aggregation eine Eins-zu-Eins-, Eins-zu-Viele- oder Viele-zu-Viele-Beziehung zwischen den teilnehmenden Objekten beinhalten. Im Fall einer Eins-zu-Viele- oder Viele-zu-Viele-Beziehung können wir sagen, dass es sich um eine redundante Beziehung handelt.

Komposition in objektorientierter Programmierung

Die Zusammensetzung ist eine spezielle Form der Aggregation. Wenn in der Komposition das übergeordnete Objekt zerstört wird, existieren auch die untergeordneten Objekte nicht mehr. Zusammensetzung ist eigentlich eine starke Art der Aggregation und wird manchmal als "Todes" -Beziehung bezeichnet. Beispielsweise kann ein Haus aus einem oder mehreren Räumen bestehen. Wenn das Haus zerstört wird, werden auch alle Räume, die Teil des Hauses sind, zerstört. Das folgende Codefragment zeigt eine Zusammensetzungsbeziehung zwischen zwei Klassen, House und Room.

Haus der öffentlichen Klasse

{

   privates Zimmer Zimmer;

   öffentliches Haus()

   {

       Raum = neuer Raum ();

   }}

}}

Wie die Aggregation ist auch die Komposition eine Ganz / Teil- oder Eltern / Kind-Beziehung. In der Zusammensetzung wird der Lebenszyklus des Teils oder Kindes jedoch vom Ganzen oder Elternteil gesteuert, dem es gehört. Es ist zu beachten, dass diese Steuerung entweder direkt oder transitiv sein kann. Das heißt, der Elternteil kann direkt für die Erstellung oder Zerstörung des Kindes verantwortlich sein, oder der Elternteil kann ein bereits erstelltes Kind verwenden. In ähnlicher Weise kann ein übergeordnetes Objekt das Steuerelement an ein anderes übergeordnetes Objekt delegieren, um das untergeordnete Objekt zu zerstören. Die Zusammensetzung wird in UML durch eine Linie dargestellt, die die Objekte mit einem durchgezogenen Diamanten am Ende des Objekts verbindet, dem das andere Objekt gehört.

Ich hoffe, diese Diskussion über Assoziations-, Aggregations- und Kompositionsbeziehungen hat Ihnen geholfen zu verstehen, wie sich diese drei Konzepte unterscheiden. Denken Sie daran, dass Aggregation und Zusammensetzung beide Teilmengen der Assoziation sind. Sowohl in der Aggregation als auch in der Komposition kann ein Objekt einer Klasse der Eigentümer eines Objekts einer anderen Klasse sein. Und sowohl in der Aggregation als auch in der Komposition gehören die untergeordneten Objekte zu einem einzelnen übergeordneten Objekt, dh sie haben möglicherweise nur einen Eigentümer.

Schließlich sind in einer Aggregationsbeziehung die Lebenszyklen von übergeordneten und untergeordneten Objekten unabhängig. In einer Kompositionsbeziehung bedeutet der Tod eines Elternobjekts auch den Tod seiner Kinder.