Junior — Middle
¿Puede dar un ejemplo que ilustre el principio de sustitución de Liskov en programación orientada a objetos?
sobes.tech AI
Respuesta de la IA
El Principio de Sustitución de Liskov (Liskov Substitution Principle, LSP) establece que los objetos de una subclase deben ser intercambiables con los objetos de la superclase sin violar la corrección del programa.
Ejemplo:
// Superclase
class Bird {
void fly() {
System.out.println("El pájaro vuela");
}
}
// Subclase que extiende correctamente el comportamiento
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("El gorrión vuela");
}
}
// Violación de LSP
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("La avestruz no puede volar");
}
}
// Uso
void makeBirdFly(Bird bird) {
bird.fly(); // Se espera que el pájaro pueda volar
}
// Si se pasa Ostrich, el método fly() lanzará una excepción, violando LSP.
Para cumplir con LSP, es mejor dividir la jerarquía:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("El gorrión vuela"); }
}
class Ostrich extends Bird {
// No implementa Flyable, ya que no puede volar
}
De esta forma, los objetos de las subclases pueden usarse sin comportamientos inesperados.