Kreis-Ellipse-Problem

Das Kreis-Ellipse-Problem ist ein prominentes, wiederholt diskutiertes Problem aus dem Bereich der objektorientierten Programmierung im Zusammenhang mit der Modellierung von Vererbungsbeziehungen. Einerseits ist ein Kreis eindeutig eine Ellipse, was dafür spricht, dass es sich um einen Subtyp der Ellipse handelt. Andererseits führt die Unterstützung einer nachträglichen, unabhängigen Veränderung der Länge der beiden Halbachsen, die für eine Ellipse sinnvoll sein kann, bei einem Kreis zu einem Problem, das häufig im Zusammenhang mit dem Liskovschen Substitutionsprinzip diskutiert wird.

Ein analoger Fall ist die Beziehung zwischen Quadrat und Rechteck.

Beispiel

In einer typischen Klassenhierarchie zur Implementierung einer Grafiksoftware könnte von einer Basisklasse GrafischesElement – neben anderen Unterklassen – die Klasse Ellipse abgeleitet werden und von dieser wiederum die Klasse Kreis. Bereits in der Basisklasse gibt es eine Methode Zeichne, die das jeweilige Grafikelement auf den Bildschirm darstellt. Nun ist durchaus denkbar, dass die Methoden SkaliereX und SkaliereY in der Klasse Ellipse eingeführt werden, um dem Benutzer die nachträgliche Anpassung der Halbachsen zu ermöglichen. Kreis als Spezialisierung der Ellipse erbt diese Methoden. Allerdings ist ein Kreis nach Anpassung nur einer der beiden Halbachsen kein Kreis mehr. Ein möglicher Ausweg aus diesem Dilemma wäre, bei einem Kreis bei Anpassung einer der Halbachsen die andere automatisch anzugleichen. Allerdings wäre dies ein Verstoß gegen das liskovsche Substitutionsprinzip, da ein Objekt der Klasse Kreis sich nicht mehr verhält, wie man es für eine Ellipse erwarten würde.

Lösungsvorschläge

Hauptsächlich werden folgende Lösungsmöglichkeiten dieses Problems diskutiert:

Bewertung

Es lässt sich nicht unabhängig vom konkreten Anwendungsfall festlegen, ob Kreis sich als Spezialisierung von Ellipse eignet oder nicht. Im Wesentlichen hängt es davon ab, ob eine Ellipse nach Instanziierung in der Größe anpassbar sein soll oder nicht.

Literatur

Einzelnachweise

  1. ↑ B. Meyer: The many faces of inheritance: A taxonomy of taxonomy. In: IEEE Computer, Vol. 29, Seite 105–108, 1996.