Delegation (Softwareentwicklung)

aus Wikipedia, der freien Enzyklopädie

Wechseln zu: Navigation, Suche
Die Klasse Auto delegiert einen Teil ihrer Verantwortung an die Klasse Motor
Die Klasse Auto delegiert einen Teil ihrer Verantwortung an die Klasse Motor

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 die 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:

  • Philosophisch 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 Klasse Liste zur Verfügung. Jedoch ist semantisch nicht klar, was eine Methode hinzufuegen 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.

Persönliche Werkzeuge
Andere Sprachen