Zwillingsklasse

Zwillingsklasse

Eine Zwillingsklasse (englisch twin class) ist eine softwaretechnische Konstruktion zur Realisation von Mehrfachvererbung in der objektorientierten Programmierung.

Bei der Mehrfachvererbung können Namenskonflikte auftreten, wenn in den beerbten Basisklassen gleiche Bezeichner vorhanden sind. Dies führt zu einem verhältnismäßig hohen Verwaltungsaufwand für Compiler, die direkt eine Mehrfachvererbung von Eigenschaften aus verschiedenen Basisklassen erlauben. Diese Problematik kann durch die Verwendung von Zwillingsklassen vermieden werden. Gleichzeitig ergibt sich die Möglichkeit, verschiedene Ausprägungen einer Eigenschaft zu modellieren (siehe auch Diamond-Problem). Beispielsweise können bei einem Amphibienfahrzeug, das die Eigenschaften der Basisklassen Landfahrzeug und Wasserfahrzeug erbt, die sich beide wiederum auf die Basisklasse Fahrzeug beziehen, die sich unterscheidenden Fortbewegungsgeschwindigkeiten an Land und auf dem Wasser nicht ohne weiteres modelliert werden.

Bei Zwillingsklassen gibt es nicht nur eine Instanz, die sich auf zwei Basisklassen bezieht, sondern eine aus zwei Objekten bestehende Zwillings-Instanz, bei der sich beide Erben gegenseitig referenzieren. Ein Amphibienfahrzeug wäre in diesem Fall nicht gleichzeitig Erbe von Landfahrzeug und Wasserfahrzeug, sondern bestünde sowohl aus einer Instanz Wasserfahrzeug (mit einer Fortbewegungsgeschwindigkeit im Wasser) als auch aus einer Instanz Landfahrzeug (mit einer Fortbewegungsgeschwindigkeit an Land). In diesem Fall müssen allerdings unveränderliche Eigenschaften, wie zum Beispiel Gewicht, vom Programmierer unter Umständen redundant in beiden Instanzen verwaltet werden.

Das Prinzip der Zwillingsklassen kann auch leicht auf Objekte mit mehr als zwei Basisklassen übertragen werden.

Literatur

  • Hanspeter Mössenböck, Objektorientierte Programmierung, Springer-Verlag, 1993, ISBN 3-540-55690-7

Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”