Javarevisited

In der objektorientierten Programmierung ist ein Objekt mit einem anderen verbunden, um die von diesem Objekt bereitgestellte Funktionalität und den Dienst zu nutzen. Diese Beziehung zwischen zwei Objekten wird im objektorientierten allgemeinen Software-Design als Assoziation bezeichnet und in der Unified Modelling Language oder UML durch einen Pfeil dargestellt. Sowohl Komposition als auch Aggregation sind Formen der Assoziation zwischen zwei Objekten, aber es gibt einen feinen Unterschied zwischen Komposition und Aggregation, der sich auch in ihrer UML-Notation widerspiegelt. Wir bezeichnen die Assoziation zwischen zwei Objekten als Komposition, wenn eine Klasse andere Klassen besitzt und die anderen Klassen nicht sinnvoll existieren können, wenn ihr Besitzer zerstört wird, z. B. ist die Klasse „Mensch“ eine Komposition aus mehreren Körperteilen, einschließlich Hand, Bein und Herz. Wenn ein menschliches Objekt stirbt, existieren alle seine Körperteile nicht mehr sinnvoll, dies ist ein Beispiel für Komposition.
Programmierer verwechseln oft zwischen Assoziation, Komposition und Aggregation in objektorientierten Design-Diskussionen, diese Verwirrung macht auch den Unterschied zwischen Assoziation, Komposition und Aggregation zu einer der beliebtesten Fragen in Java-Interviews, nur nach dem Unterschied zwischen abstrakter Klasse und Schnittstelle.
Ein weiteres Beispiel für Komposition ist ein Auto und seine Teile, z.B. Motoren, Räder, etc. Einzelne Teile des Autos können nicht funktionieren, wenn ein Auto zerstört wird. Während im Fall der Aggregation auch Objekte existieren können, die nicht Teil des Hauptobjekts sind, wie z. B. ein Spieler, der Teil eines Teams ist, kann auch ohne Team existieren und Teil eines anderen Teams werden.
Ein weiteres Beispiel für Aggregation ist Schüler in der Klasse Schule, wenn die Schule geschlossen wird, existiert der Schüler noch und kann dann einer anderen Schule beitreten oder so. In der UML-Notation wird eine Komposition durch eine gefüllte Raute dargestellt, während die Aggregation durch eine leere Raute dargestellt wird, was ihren offensichtlichen Unterschied in Bezug auf die Stärke der Beziehung zeigt.
Die Komposition ist stärker als die Aggregation. Kurz gesagt, eine Beziehung zwischen zwei Objekten wird als Assoziation bezeichnet, und eine Assoziation wird als Komposition bezeichnet, wenn ein Objekt ein anderes besitzt, während eine Assoziation als Aggregation bezeichnet wird, wenn ein Objekt ein anderes Objekt verwendet.
In diesem OOPS-Tutorial werden wir ein paar weitere Beispiele sehen, um den Unterschied zwischen Assoziation, Komposition und Aggregation besser zu verstehen.
Btw, wenn Sie neu in der Welt der objektorientierten Programmierung und des Designs sind, dann empfehle ich Ihnen auch, einen praktischen Kurs wie UML and Object-Oriented Design Foundations von Karloy Neisztor auf Udemy durchzugehen. Es ist ein großartiger Kurs, um den kompletten Prozess der objektorientierten Analyse und des Designs für die Erstellung von Qualitätssoftware zu verstehen.

Ein Beispiel für Assoziation, Komposition und Aggregation in Java

Hier ist ein Beispiel für Komposition und Aggregation, in Form von Java-Code. Wenn Sie sich diesen Code ansehen, können Sie die Unterschiede zwischen diesen beiden Arten erkennen. Übrigens wird Komposition auch im objektorientierten Design der Vererbung vorgezogen, sogar Joshua Bloch hat in seinem Klassiker „Effective Java“ auf ihre Bedeutung hingewiesen.

1. Komposition:

Da Engine is-part-of Car ist, ist die Beziehung zwischen ihnen Composition. Hier sehen Sie, wie sie zwischen Java-Klassen implementiert sind.

public class Car {

2. Aggregation:

Da Organization als Mitarbeiter Person hat, ist die Beziehung zwischen ihnen Aggregation. So sehen sie in Form von Java-Klassen aus

public class Organization { private List employees;}
public class Person { private String name; }

UML-Diagramm der Assoziation, Komposition und Aggregation

UML hat verschiedene Notationen, um Aggregation, Komposition und Assoziation zu bezeichnen. Assoziation wird durch einen einfachen Pfeil dargestellt, während Aggregation durch einen leeren Pfeil mit Rautenspitze und Komposition durch einen gefüllten Pfeil mit Rautenspitze dargestellt wird.
Wenn Sie ein UML-Diagramm für zwei verwandte Klassen A und B zeichnen, in dem A mit B assoziiert ist, dann wird es durch A -> B dargestellt. Auf ähnliche Weise werden Aggregation und Komposition zwischen zwei Klassen dargestellt.
Hier sind UML-Notationen für eine andere Art der Abhängigkeit zwischen zwei Klassen.

Wie gesagt, alle drei bezeichnen Beziehungen zwischen Objekten und unterscheiden sich nur in ihrer Stärke, Sie können sie auch wie unten dargestellt betrachten, wobei Komposition die stärkste Form der Beziehung darstellt und Assoziation die allgemeinste Form ist.

Assoziation vs. Komposition vs. Aggregation

Hier ist die Liste der Unterschiede zwischen Komposition und Aggregation im Punktformat, zur schnellen Übersicht. Wie gesagt, der Hauptunterschied zwischen den beiden besteht darin, dass im Fall der Komposition ein Objekt EIGENTÜMER eines anderen Objekts ist, während im Fall der Aggregation ein Objekt nur ein BENUTZER eines anderen Objekts ist.
1) Wenn A und B zwei Klassen sind, die so miteinander verbunden sind, dass B aufhört zu existieren, wenn A zerstört wird, dann wird die Assoziation zwischen zwei Objekten als Komposition bezeichnet. Ein Beispiel ist Auto und Motor. Wenn hingegen A und B so miteinander verbunden sind, dass B existieren kann, ohne mit A verbunden zu sein, dann wird diese Verbindung als Aggregation bezeichnet.

Weitere Beispiele für Komposition und Assoziation in der OOP finden Sie in Head First Object-Oriented Analysis and Design.

2) Im Fall der Komposition besitzt A B, z.B. Person ist der Besitzer seiner Hand, seines Verstandes und seines Herzens, während im Fall der Aggregation A B benutzt, z.B. Organisation benutzt Leute als Mitarbeiter.
3) Im UML-Diagramm wird Assoziation durch eine normale Pfeilspitze dargestellt, während Komposition durch eine gefüllte Rautenpfeilspitze und Aggregation durch eine leere Rautenpfeilspitze dargestellt wird, wie im folgenden und im angehängten Diagramm im dritten Absatz gezeigt.
Assoziation A—->B
Zusammensetzung A—–<gefüllt>B
Aggregation A—–<>B
4) Aggregation ist eine leichtere Form der Komposition, bei der ein Teilobjekt sinnvollerweise ohne Hauptobjekte existieren kann.
5) In Java können Sie das Schlüsselwort final verwenden, um Composition darzustellen. Da bei Composition das Owner-Objekt erwartet, dass ein Teilobjekt vorhanden ist und funktioniert, geben Sie mit final die Garantie, dass dieses Teilobjekt existiert, wenn Owner erstellt wird. Dies ist eigentlich ein Java-Idiom, um eine starke Form der Assoziation, d.h. der Komposition zwischen zwei Objekten, darzustellen.
6) Ein weiteres interessantes Wort, das nützlich ist, um den Unterschied zwischen Komposition und Aggregation im Software-Design zu verstehen, ist „part-of“ und „has“. Wenn ein Objekt Teil eines anderen Objekts ist, z.B. Motor ist Teil von Auto, dann ist die Assoziation oder Beziehung zwischen ihnen Komposition. Andererseits, wenn ein Objekt nur ein anderes Objekt hat, z.B. Auto hat den Fahrer, dann ist es Aggregation.
Das ist alles über den Unterschied zwischen Assoziation, Komposition und Aggregation in UML, Java und objektorientiertem Design. Da es bei der objektorientierten Analyse mehr darum geht, die Beziehung zwischen den Objekten zu definieren, ist es wichtig zu wissen, welche Art von Beziehung zwischen ihnen besteht; Komposition und Aggregation sind zwei Möglichkeiten, die Beziehung zwischen zwei Objekten darzustellen.
Weiteres Lernen
SOLID Principles of Object Oriented Design
Absolute Einführung in die objektorientierte Programmierung in Java
Java – Objektorientierte Programmierung
Weitere Artikel zur Verbesserung Ihrer objekt-Objektorientierte Programmierung und Design-Fähigkeiten
Top 10 Objektorientierte Design-Prinzipien, die Java-Programmierer kennen sollten
Warum Komposition gegenüber Vererbung in Java bevorzugen
Unterschied zwischen Überladen und Überschreiben in Java
Top 10 Interview-Fragen zu abstrakten Klassen und Schnittstellen
20 Fragen zu Java-Designmustern und Software-Design

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.