Das Ganze ist mehr als die Summe seiner Teile
-Aristoteles

Dieses Zitat wird Aristoteles zugeschrieben. Der Grundgedanke ist der der Synergie. In Stephen Coveys Bestseller „The 7 Habits of Highly Effective People“ lautet seine sechste Gewohnheit „Synergize“. Was für Organisationen gilt, trifft auch auf die Informatik zu. Der Körper eines Objekts ist wertvoller als sein Einzelteil. In der Informatik verwenden wir den Begriff Komposition.

Komposition

Was verstehen wir also unter Komposition? „Komposition“ ist eines der grundlegenden Konzepte in der objektorientierten Programmierung. Es beschreibt eine Klasse, die ein oder mehrere Objekte anderer Klassen in Instanzvariablen referenziert. Damit lässt sich eine has-a-Assoziation zwischen Objekten modellieren.“ So beschreibt es auch Stackify hier. Stellen Sie es sich wie ein Orchester vor. Ein einzelner Musiker ist schön, aber wenn man die ganze Gruppe zusammen hat, ist die Musik reicher und tiefer.

Vorteile

Der Hauptvorteil für Code, der mit der richtigen Komposition erstellt wurde, ist die Wiederverwendung. Wenn man ihn richtig entwirft, sollte er leicht wiederverwendbar sein. Ist dies nicht der Fall, kann er recht umständlich sein. Dazu gehört auch eine intuitive und saubere API oder Anwendungsprogrammierschnittstelle. Als erfahrener Java-Programmierer habe ich viele Leute gehört, die sich über das Design der Java-Threading-API beklagt haben. Ein gutes Design sollte es Ihnen ermöglichen, etwas intern zu ändern und nicht zu ändern, wie andere damit interagieren.

Beispiele

Lassen Sie uns ein Beispiel erstellen, damit wir sehen können, wie Komposition in Java aussieht.
Hier haben wir unsere Rollenklasse definiert.
Die Rollenklasse wird in dieser Mitarbeiterklasse verwendet. In der Komposition würde man sagen, dass die Klasse Employee „has-a“ Role.

Hiding

In unserem API-Beispiel sind die Klassen HotDogGrinder und HotDogGrill paketprivat und können nicht von außen angesprochen werden.
Hier ist die öffentliche Seite unserer API, HotDogMachine. Diese Klasse hat einen Verweis auf die beiden internen Klassen, die wir mit unserem API-Design verstecken.

Zusammensetzung vs. Vererbung

Zusammensetzung und Vererbung können von Entwicklern verwechselt werden. Wie Steven Lowe in diesem Blogbeitrag von ThoughtWorks darlegt, müssen wir sorgfältig auswählen, welche der beiden Methoden wir verwenden wollen.

Er gibt die oft gehörte Faustregel „Komposition vor Vererbung“ an. Wie bei jeder Faustregel müssen wir verstehen, dass sie nicht immer zutrifft. Lassen Sie uns also ein paar Dinge klären, bevor wir weitermachen.

Lassen Sie uns Vererbung definieren, da wir bereits ausführlich über Komposition gesprochen haben. Vererbung ist eine der Grundlagen der objektorientierten Programmierung. Wenn wir zum Beispiel eine Lebensmittelklasse haben, dann würde die Brotklasse von der Lebensmittelklasse erben. Bei der Komposition geht es um Elemente, die Teil einer größeren Einheit sind.

Lowe erinnert uns daran, dass wir zwei verschiedene Fragen stellen müssen, wenn wir eines von beiden verwenden wollen. Erstens: „Die Darstellung/Implementierung Ihrer Domänenkonzepte ist eine Dimension.“ Wenn beide in derselben Domäne liegen, ist Vererbung wahrscheinlich die beste Lösung. Zweitens: „Die Semantik Ihrer Domänenkonzepte und ihre Beziehung zueinander ist eine zweite Dimension.“ Wenn die von Ihnen erstellten Komponenten anfangen, sich gegenseitig weiterzuleiten, könnte dies ein Zeichen dafür sein, dass Sie die Verwendung von Vererbung noch einmal überdenken sollten.

Die Komposition ist ein wichtiger Grundsatz in der Softwareentwicklung, den viele von uns Fachleuten durcheinander bringen. Ich habe das selbst schon erlebt, als ich Lösungen erstellt habe, die nicht richtig auf dieses Prinzip ausgerichtet waren. Eine kurze Diskussion am Whiteboard mit einem Kollegen oder eine Skizze auf einem Blatt Papier kann Ihnen helfen zu verstehen, wann es eine „has-a“-Beziehung zwischen zwei Objekten gibt. Nachdem Sie dies gelesen haben, sollten Sie auch die Vorteile verstehen und wissen, wie Sie sie in einem Beispiel anwenden können. Versuchen Sie, ein Beispiel zu erstellen und es zu verwenden, dann sollten Sie wissen, ob Sie auf dem richtigen Weg sind oder ob Vererbung vielleicht ein besserer Weg ist.

1 Anteile

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.