www.wikidata.de-de.nina.az
Das Diamond Problem entsteht durch Mehrfachvererbung in 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 als Diagramm so ergibt sich die Form einer Raute englisch rhombus oder diamond nach der das Diamond Problem benannt ist Vererbungsbeziehungen beim Diamond Problem Inhaltsverzeichnis 1 Beispiel 2 Modellierung in C 3 Vermeidung 4 Literatur 5 EinzelnachweiseBeispiel BearbeitenDie 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 sowie die Eigenschaften Hochstgeschwindigkeit und Sitzplatze fur Insassen besitzt Die Frage ist nun ob sich ein Amphibienfahrzeug wie ein Land oder ein Wasserfahrzeug oder wie ein Land und ein Wasserfahrzeug fortbewegt Ausserdem variiert die Hochstgeschwindigkeit je nach Verwendung die Anzahl der Sitzplatze aber nicht Es ware also sinnvoll fur erstere zwei verschiedene fur letztere aber nur einen Wert zu speichern Die erste Mehrdeutigkeit kann nur im Einzelfall gelost werden so hat ein Amphibienfahrzeug beispielsweise zwei Fortbewegungsarten methoden obwohl Fahrzeug nur eine Fortbewegungsart hat Modellierung in C BearbeitenIn C ist es moglich bei Definition der Klassen B und C anzugeben ob sie sich eine gemeinsame Instanz der Klasse A teilen sollen Diamond oder ob sie jeweils ihre eigene Instanz besitzen sollen normale Mehrfachvererbung Diamond Vererbung Normale Mehrfachvererbungclass A int a class B virtual A int b class C virtual A int c class D B C int d class A int a class B A int b class C A int c class D B C int d nbsp nbsp Speicherlayout nbsp Die Klassen B und C haben jeweils einen Verweis auf Member der Oberklasse A und haben Zugriff auf ein und dieselbe Variable a der Oberklasse A nbsp Die Klassen B und C haben jeweils ihre eigenen Kopien der Member der Oberklasse A und damit Zugriff auf zwei unterschiedliche Variablen a Vermeidung BearbeitenWegen der Probleme die bei Mehrfachvererbung auftreten konnen unterstutzen einige objektorientierte Programmiersprachen keine Mehrfachvererbung Teilweise werden Alternativkonzepte angeboten wie zum Beispiel die Konstruktion von Zwillingsklassen Die Programmiersprache Eiffel bietet Konstrukte renaming zur transparenten Auflosung der bei Mehrfachvererbung auftretenden Namenskonflikte Smalltalk und Oberon verbieten Mehrfachvererbung Java die NET Sprachen oder auch Object Pascal lassen keine Mehrfachvererbung zu bieten jedoch einen speziellen Typ der abstrakten Klasse an das Interface von dem mehrfach geerbt werden kann Im Unterschied zur Vererbung von Klassen wird hier nur die Deklaration vererbt nicht die Implementierung der Funktionen und vor allem keine Membervariablen Ab Java 8 kann ein Interface auch Methoden beinhalten jedoch konnen diese keine Membervariablen verwenden 1 C bietet das Konzept der virtuellen Basisklasse wodurch eine Replikation der Member der Basisklasse in der abgeleiteten Klasse vermieden wird PHP benutzt unter dem Begriff horizontal reuse Horizontale Wiederverwendung ab der Version 5 4 sogenannte Traits welche lose Klassenfragmente sind und in andere Klassen eingebunden werden konnen 2 3 Literatur BearbeitenEddy Truyen Wouter Joosen Bo Jorgensen Petrus Verbaeten A Generalization and Solution to the Common Ancestor Dilemma Problem in Delegation Based Object Systems In Proceedings of the 2004 Dynamic Aspects Workshop 2004 S 103 119 Einzelnachweise Bearbeiten docs oracle com stefan marr de wiki php net Abgerufen von https de wikipedia org w index php title Diamond Problem amp oldid 223309069