Un cierto fallo de OOP se muestra con una clase Square heredando de Rectangle, donde lógicamente Square es una especialización de Rectangle y, por lo tanto, debe heredar de él, pero todo se desmorona cuando intenta cambiar la longitud o el ancho de un Square.
¿Existe un término específico para describir lo que está mal en ese caso?
Respuestas:
Wikipedia simplemente se refiere a él como el problema del círculo-elipse
fuente
Lo consideraría una violación del Principio de sustitución de Liskov : la
Square
subclase viola específicamente la invariante de que la longitud y el ancho son independientes.fuente
En un nivel más fundamental que el Principio de sustitución de Liskov, este es un error de categoría o error de categoría
En el contexto del comportamiento de modelado, un cuadrado simplemente no es un tipo de rectángulo.
Cuando te das cuenta de esto, el problema se evapora ya que la suposición inicial (un cuadrado es un tipo de rectángulo) se elimina del juego.
El problema con esta respuesta es que, desde la escuela, se perfora en cualquiera que haga geometría que un cuadrado es un tipo de rectángulo. Pero es muy importante comprender que esto solo es cierto dentro de un contexto muy específico (la clasificación de formas geométricas en función de las propiedades de sus ángulos internos). En términos de comportamiento, un cuadrado no es un rectángulo. Ver un conjunto de clasificación en el contexto incorrecto es un error de categoría.
fuente