Uma certa falha do OOP é mostrada com uma classe Square herdada de Rectangle, onde logicamente Square é uma especialização de Rectangle e, portanto, deve herdar dele, mas tudo desmorona quando você tenta alterar o comprimento ou a largura de um Square.
Existe um termo específico para descrever o que está acontecendo de errado com esse caso?
Respostas:
A Wikipedia apenas se refere a ele como o problema da elipse circular
fonte
Eu consideraria uma violação do Princípio da Substituição de Liskov - a
Square
subclasse viola especificamente a invariante de que comprimento e largura são independentes.fonte
Em um nível mais fundamental que o Princípio da Substituição de Liskov, esse é um erro de categoria ou erro de categoria
No contexto do comportamento de modelagem, um quadrado simplesmente não é um tipo de retângulo.
Quando você percebe isso, o problema evapora, pois a suposição inicial (um quadrado é um tipo de retângulo) é removida do jogo.
O problema com esta resposta é que, desde a escola, é estudado quem faz geometria que um quadrado é um tipo de retângulo. Mas é muito importante entender que isso só é verdade dentro de um contexto muito específico (a classificação de formas geométricas com base nas propriedades de seus ângulos internos). Em termos de comportamento, um quadrado não é um retângulo. Visualizar um conjunto de classificação no contexto errado é um erro de categoria.
fonte