Oi, Stepherson
Desisti de escrever outro artigo. (Fiz umas pequenas mudanças neste para deixá-lo mais claro.)
Respondendo sua dúvida:
O problema, neste caso, é que o código cliente pode supor pela API do `Retangulo` que altura e comprimento são coisas independentes e pode lidar com elas assim (código especifico para quando um for o dobro do outro, por ex). Isso não será verdade caso um objeto `Quadrado` seja passado em tempo de execução, porque, ao “setar” o comprimento, a altura será inadvertidamente setada “por tabela” ficando igual ao comprimento!
Em uma herança correta, não podemos definir uma invariante como essa na classe derivada (invariante = altura e comprimento devem ser iguais!) sendo que isso não é verdade na classe base.
Qualquer dúvida só chamar!