devterview_$ iniciar simulação

Cenário: Quadrado herda de Retângulo

DifícilSêniorPrincípios

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'.

#lsp#solid#heranca
publicidade

Relacionadas