Sobes.tech
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.