Name, Kurzform |
Composit
Reuse Prinzip
|
Synonyme |
Composit
Reuse Principle (CRP),
Favour
composition over inheritance (FcoI),
Komposition
an Stelle von Vererbung
|
Beschreibung |
(1)
Gängige englische Kurzform: „Favour composition over
inheritance“.
(2)
Ausführlicher: Wiederverwendung sollte durch Komposition
erreicht werden, nicht durch Vererbung.
(3)
Noch ausführlicher: Wiederverwendung sollte durch polymorphe
Komposition von Objekten erreicht werden, nicht durch
Vererbungsbeziehungen zwischen Klassen. |
Erläuterung |
Zur
Realisierung wiederverwendbarer Software-Elemente stehen im
objektorientierten Kontext insbesondere zwei Alternativen zur
Verfügung:
Mit
der Vererbung gehen jedoch eine Reihe von Problemen einher,
darunter:
Eine
detaillierte Beschreibung dieser und weiterer Probleme wird in
[Hunt2000] wiedergegeben.
Mit
der Möglichkeit der Komposition steht allerdings eine
Wiederverwendungsmöglichkeit zur Verfügung, welche diese
Probleme nicht aufweist. Sprechen keine anderen Gründe für die
Nutzung einer Vererbungshierarchie als die Wiederverwendung, so
sollte die Komposition bevorzugt werden. |
Beispiel |
Die
Komposition wiederverwendbarer Dienstklassen ist in Zeiten von
Dependency Injection Frameworks eine Selbstverständlichkeit
geworden. Auf ein Quellcode-Beispiel wird daher an dieser Stelle
verzichtet.
|
Historie |
|
Art des Prinzips |
|
Grad der formalen Spezifikation | Gut. Es dürfte allerdings rein syntaktisch kaum zu erkennen sein, ob die Nutzung einer Vererbungsbeziehung primär mit dem Ziel der Wiederverwendung erfolgte. |
Vorteile |
|
Nachteile |
|
Übergeordnete Prinzipien |
|
Abgleitete Prinzipien | - |
Qualitätsmerkmale |
(+)
Verständlichkeit, (+) Veränderbarkeit
(+) Zuverlässigkeit |
Quellen
[GOF95] - Design Patterns, Gamma et. al, 1995
[Hunt2000] – Inheritance Considered Harmful: When to use inheritance and when to use composition, John Hunt, Alex McManus, Fred Long, Edel Sheratt, 2000
[Hunt2000] – Inheritance Considered Harmful: When to use inheritance and when to use composition, John Hunt, Alex McManus, Fred Long, Edel Sheratt, 2000
[Knoernschild2002]
– Java
Design, Objects, UML, and Process,
Kirk Knoernschild, 2002