Cenário: Quadrado herda de Retângulo
Pergunta
Por que fazer `Quadrado extends Retangulo` (com `setLargura`/`setAltura`) é o exemplo clássico de violação do princípio de substituição de Liskov?
Resposta esperada
Matematicamente um quadrado é um retângulo, mas o subtipo tem que se comportar como o supertipo em todo contexto que espera o supertipo. Um cliente que recebe um `Retangulo` assume que `setLargura(5)` não muda a altura — é o contrato implícito. Se você passa um `Quadrado` que, pra manter-se quadrado, também muda a altura quando você seta a largura, esse cliente quebra (um teste tipo 'set largura 5, set altura 4, área deve ser 20' falha). A herança forçou o Quadrado a mentir sobre o contrato de Retangulo. Saídas: não herdar (Quadrado e Retangulo são tipos separados, talvez ambos implementem uma interface `Forma` com `area()`), ou modelar como imutável (sem setters, um 'com nova largura' devolve nova instância). A lição: 'é um' na linguagem natural não garante subtipo de comportamento.
Por que perguntam isso
Cenário pleno/sênior — o exemplo canônico do LSP. Bom candidato dá a saída (tipos separados ou imutável) e a lição sobre 'é um'.