Ein gewisser Fehler von OOP wird mit einer Klasse Square angezeigt, die von Rectangle erbt, wobei Square logischerweise eine Spezialisierung von Rectangle ist und daher davon erben sollte, aber alles fällt auseinander, wenn Sie versuchen, die Länge oder Breite eines Quadrats zu ändern.
Gibt es einen speziellen Begriff, um zu beschreiben, was in diesem Fall falsch läuft?
Antworten:
Wikipedia nennt es lediglich das Kreisellipsenproblem
quelle
Ich würde es als Verstoß gegen das Liskov-Substitutionsprinzip ansehen - die
Square
Unterklasse verletzt speziell die Invariante, dass Länge und Breite unabhängig sind.quelle
Auf einer grundlegenderen Ebene als das Liskov-Substitutionsprinzip ist dies ein Kategoriefehler oder ein Kategoriefehler
Im Kontext des Modellierungsverhaltens ist ein Quadrat einfach keine Art von Rechteck.
Wenn Sie dies erkennen, verschwindet das Problem, da die ursprüngliche Annahme (ein Quadrat ist eine Art Rechteck) nicht mehr im Spiel ist.
Das Problem mit dieser Antwort ist, dass seit der Schule jeder, der Geometrie macht, weiß, dass ein Quadrat eine Art Rechteck ist. Es ist jedoch sehr wichtig zu verstehen, dass dies nur in einem sehr spezifischen Kontext zutrifft (die Klassifizierung geometrischer Formen anhand der Eigenschaften ihrer Innenwinkel). In Bezug auf das Verhalten ist ein Quadrat kein Rechteck. Ein Satz von Klassifikationen im falschen Kontext anzuzeigen, ist ein Kategoriefehler.
quelle