Junior — Middle
Pode dar um exemplo que demonstre o 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 ser substituídos por objetos da superclasse sem violar a correção do programa.
Exemplo:
// Superclasse
class Bird {
void fly() {
System.out.println("O pássaro voa");
}
}
// Subclasse que estende corretamente o comportamento
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("O pardal voa");
}
}
// Violação do LSP
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("A avestruz não consegue voar");
}
}
// Uso
void makeBirdFly(Bird bird) {
bird.fly(); // Espera-se que o pássaro possa voar
}
// Se passar Ostrich, o método fly() lançará uma exceção, violando o LSP.
Para cumprir o LSP, é melhor dividir a hierarquia:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("O pardal voa"); }
}
class Ostrich extends Bird {
// Não implementa Flyable, pois não consegue voar
}
Assim, objetos de subclasses podem ser usados sem comportamentos inesperados.