Junior — Middle
Pode dar um exemplo do princípio de substituição de Liskov na programação orientada a objetos?
sobes.tech IA
Resposta da IA
O Princípio da Substituição de Liskov (Liskov Substitution Principle, LSP) afirma que objetos de uma subclasse devem poder substituir objetos da classe base sem violar a correção do programa.
Exemplo em C#:
class Bird {
public virtual void Fly() {
Console.WriteLine("O pássaro voa");
}
}
class Sparrow : Bird {
public override void Fly() {
Console.WriteLine("O pardal voa");
}
}
class Ostrich : Bird {
public override void Fly() {
throw new NotSupportedException("A avestruz não consegue voar");
}
}
void MakeBirdFly(Bird bird) {
bird.Fly();
}
// Uso:
MakeBirdFly(new Sparrow()); // correto
MakeBirdFly(new Ostrich()); // viola o LSP, pois lança exceção
Neste exemplo, a classe Ostrich viola o princípio de substituição de Liskov, pois não suporta o comportamento da classe base Bird (o método Fly), lançando uma exceção. Para cumprir o LSP, deve-se modificar a hierarquia de classes ou dividir as interfaces para que as subclasses não precisem implementar comportamentos não suportados.