Wikipedia · einfach zusammengefasst · Stand
Komposition an Stelle von Vererbung
Komposition anstelle von Vererbung (engl. composition over inheritance oder composite reuse principle) ist eine Technik im Softwareentwurf.
Inhalt3 Abschnitte
Prinzip und Bedeutung
Komposition anstelle von Vererbung (englisch „composition over inheritance“ oder „composite reuse principle“) ist eine Technik des Softwareentwurfs. Sie entkoppelt Klassen, also macht sie weniger voneinander abhängig. Dadurch entstehen flexiblere und stabilere Entwürfe. Insbesondere kann das Verhalten einer Klasse zur Laufzeit verändert werden.
Aufbau mit Schnittstellen
Algorithmen, die eine Klasse verwenden kann, werden als separate Klassen entworfen. Sie sind vorzugsweise von Schnittstellen abgeleitet. Eine Schnittstelle legt fest, welche Methoden vorhanden sein müssen, ohne deren konkrete Ausführung festzulegen.
Eine Klasse, die einen solchen Algorithmus ausführen soll, besitzt eine Membervariable vom Typ der gemeinsamen Schnittstelle. Dieser Variablen kann auch zur Laufzeit eine konkrete Algorithmusklasse zugewiesen werden. Die Klasse bleibt dadurch von den Algorithmen und ihren Details getrennt. Änderungen oder Weiterentwicklungen der Algorithmusklassen haben kaum Einfluss auf die verwendende Klasse; Anpassungen dort werden meist unnötig. Der Code dieser Klasse wird nicht verändert, was dem Open-Closed-Prinzip entspricht.
Java-Beispiel mit Entenverhalten
Im Java-Beispiel beschreiben die Schnittstellen Flyable und Quackable zwei austauschbare Verhaltensweisen. Flyable verlangt die Methode void fly(), Quackable die Methode void quack().
Die abstrakte Klasse Duck besitzt die Membervariablen flyBehavior vom Typ Flyable und quackBehavior vom Typ Quackable. Ihre Methoden fly() und quack() führen das jeweils gespeicherte Verhalten aus, indem sie flyBehavior.fly() beziehungsweise quackBehavior.quack() aufrufen.
Mit setFlyBehavior(final Flyable FLYING) und setQuackBehavior(final Quackable QUACKING) kann einer Ente ein anderes Flug- oder Quakverhalten zugewiesen werden. So lassen sich Flug- und Redeverhalten flexibel kombinieren und während der Laufzeit ändern, ohne die Klasse Duck selbst umschreiben zu müssen.