Kann das Diamant-Problem wirklich gelöst werden?

Ein typisches problem in OO-Programmierung ist das Diamant-problem. Ich habe Elternteil der Klasse A mit zwei sub-Klassen B und C. A hat eine abstrakte Methode, B und C umzusetzen. Jetzt habe ich eine sub-D-Klasse, erbt von B und C. Das Diamant-problem ist nun, was die Umsetzung ist D verwenden, die ein B oder ein C?

Leute behaupten, Java kennt keine Diamant-problem. Ich kann nur Mehrfachvererbung mit interfaces und da Sie keine Implementierung haben, habe ich kein diamond-problem. Ist das wirklich wahr? Ich denke nicht so. Siehe unten:

[entfernt Fahrzeug Beispiel]

Ist ein Diamant-problem ist immer die Ursache von schlechtem Klassen-design und etwas, was weder der Programmierer noch der compiler braucht, um zu lösen, weil es nicht in den ersten Platz?


Update: Vielleicht ist mein Beispiel war schlecht gewählt.

Sehen Sie dieses Bild

Diamond-Problem http://cartan.cas.suffolk.edu/oopdocbook/opensource/src/multinheritance/PersonStudentTeacher.png

Natürlich kann man virtuelle Person in C++ und somit haben Sie nur eine Instanz von person in Erinnerung, aber das eigentliche problem besteht IMHO. Wie würden Sie implementieren getDepartment() für GradTeachingFellow? Bedenken, er könnte student in einer Abteilung und lehren in einer anderen. So können Sie entweder eine Abteilung oder das andere; es ist keine perfekte Lösung des Problems und die Tatsache, dass keine Umsetzung könnte vererbt werden (z.B. Schüler und Lehrer könnten beide Schnittstellen) scheint nicht das problem zu lösen für mich.

InformationsquelleAutor der Frage Mecki | 2009-02-18

Schreibe einen Kommentar