Delegation (Softwareentwicklung)
aus Wikipedia, der freien Enzyklopädie
Im Bereich der objektorientierten Programmierung bezeichnet der Begriff der Delegation eine Form der Interaktion von Klassen. Im Gegensatz zur Vererbung gibt eine Klasse bei der Delegation einen Teil ihrer Verantwortung an eine andere Klasse ab.
[Bearbeiten] Beschreibung
Bei der Delegation gibt eine Klasse die Verantwortlichkeit für einen Teil ihrer Funktionalität an eine andere Klasse ab. Dies kann zum Beispiel der Aufruf einer Methode einer Hilfsklasse sein, die auch von anderen Klassen verwendet wird und deren Funktionalität nicht originär Teil der aufrufenden Klasse ist. Ein anderes Beispiel ist der Verwendung des Entwurfsmusters Fassade, bei dem eine Klasse eine Fassade, das heißt eine Schnittstelle zu einem komplexen Untersystem darstellt. In diesem Fall besteht die Aufgabe der Fassade hauptsächlich in der Delegation von Funktionalität an andere Unterklassen des Subsystems.
Einen Spezialfall stellen reine Wrapper-Methoden dar, die Funktionsaufrufe an eine andere Klasse weiterleiten. Dies wird häufig verwendet, um dem Gesetz von Demeter zu genügen.
[Bearbeiten] Delegation vs. Vererbung
Gerade unerfahrene Programmierer bevorzugen oft die Vererbung gegenüber der Delegation, um die Funktionalität einer anderen Klasse einzubinden. Zum Beispiel könnte eine Klasse Auto
dabei von einer Klasse Liste
abgeleitet werden, da ja – so die Begründung – ein Auto aus mehreren Teilen besteht, die in Auto-Objekten enthalten sein müssen. Dieser Ansatz hat aber mehrere Probleme:
- Philophisch gesehen ist ein Auto keine Liste, es verwendet lediglich eine solche zur Verwaltung seiner Teile. Durch den falschen Einsatz der Vererbung kann ein falscher Eindruck erweckt werden.
- Die Klasse
Auto
stellt durch den Einsatz der Vererbung alle Methoden der KlasseListe
zur Verfügung. Jedoch ist semantisch nicht klar, was eine Methodehinzufuegen
hier zu bedeuten hat. Besser wäre der Einsatz spezifischer Methoden. - Eine solche Art der Vererbung kann leicht zu einer Verletzung des Liskovschen Substitutionsprinzipes führen, das heißt die abgeleitete Klasse erfüllt nicht den Vertrag der Basisklasse; sie verhält sich anders.
Aus diesem Grund wäre bei diesem Beispiel die Verwendung der Delegation oder der Aggregation sinnvoller gewesen.