Diamond-Problem

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 11. Juli 2007 um 02:29 Uhr durch 62.57.88.89 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Das Diamond-Problem ist ein Problem bei der Verwendung von Mehrfachvererbung im Rahmen der Objektorientierten Programmierung und Wissensmodellierung. Es kann auftreten, wenn eine Klasse D auf zwei verschiedenen Vererbungspfaden (B und C) von ein und derselben Basisklasse A abstammt. Zeichnet man die Vererbungsbeziehungen zwischen den Klassen in einem Diagramm auf, so ergibt sich die Form einer Raute (englisch rhombus oder diamond), nach der das Diamond-Problem benannt ist.

Vererbungsbeziehungen beim Diamond-Problem
Vererbungsbeziehungen beim Diamond-Problem

Die Probleme der Mehrfachvererbung lassen sich am Beispiel eines Amphibienfahrzeugs verdeutlichen, das sowohl die Eigenschaften eines Land- als auch die eines Wasserfahrzeuges erbt. Das Diamond-Problem tritt hierbei auf, wenn beide von der Klasse Fahrzeug abstammen, die eine Methode des Fortbewegens besitzt. Die Frage ist nun, ob sich ein Amphibienfahrzeug wie ein Land- oder ein Wasserfahrzeug oder wie ein Land- und ein Wasserfahrzeug fortbewegt. Diese Mehrdeutigkeit kann nur im Einzelfall gelöst werden; so hat ein Amphibienfahrzeug beispielsweise zwei Fortbewegungsgeschwindigkeiten, aber nur ein Gewicht, obwohl Fahrzeug nur eine Fortbewegungsgeschwindigkeit hat.

Twins

Das Problem mit dem verhältnismäßig hohen Verwaltungsaufwand für Compiler kann leicht durch die Verwendung von sogenannten Twins (englisch für Zwillinge) vermieden werden. Gleichzeitig ergibt sich die Möglichkeit, verschiedene Ausprägungen einer Eigenschaft (im obigen Beispiel zum Beispiel die Fortbewegungsgeschwindigkeiten an Land oder auf dem Wasser) zu modellieren.

Bei Twins gibt es nicht nur eine Instanz, die sich auf zwei Basisklassen bezieht. Stattdessen gibt es eine Zwillings-Instanz, bei der sich beide Erben gegenseitig referenzieren. Ein Amphibienfahrzeug wäre in diesem Fall nicht gleichzeitig Erbe von Landfahrzeug und Wasserfahrzeug, sondern besteht sowohl aus einer Instanz Wasserfahrzeug (mit einer Fortbewegungsgeschwindigkeit im Wasser) als auch aus einer Instanz Landfahrzeug (mit einer Fortbewegungsgeschwindigkeit an Land). In diesem Fall muss allerdings die Eigenschaft Gewicht vom Programmierer redundant verwaltet werden.

Literatur