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 die sechste Gewohnheit „Synergie“. 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.
Was verstehen wir also unter Komposition? „Komposition ist eines der grundlegenden Konzepte in der objektorientierten Programmierung. Es beschreibt eine Klasse, die in Instanzvariablen ein oder mehrere Objekte anderer Klassen 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 von Code, der mit der richtigen Komposition erstellt wurde, ist die Wiederverwendung. Wenn Sie ihn richtig entwerfen, sollte er leicht wiederverwendbar sein. Ist dies nicht der Fall, so 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, die Klasse Employee „hat eine“ Rolle.
Verstecken
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 verweist auf die oft gehörte Faustregel „Komposition vor Vererbung“. 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, an andere weitergegeben zu werden, könnte dies ein Zeichen dafür sein, dass Sie die Verwendung von Vererbung noch einmal überdenken sollten.
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 es in einem Beispiel anwenden können. Versuchen Sie, einige Beispiele zu erstellen und zu verwenden, dann sollten Sie wissen, ob Sie auf dem richtigen Weg sind oder ob Vererbung vielleicht ein besserer Weg ist.
Sehen Sie sich weitere tolle Inhalte an und abonnieren Sie MyITCareerCoach.com