Junior — Middle
Puoi fare un esempio di come viene applicato il principio di sostituzione di Liskov nella pratica della programmazione?
sobes.tech AI
Risposta dell'AI
Принцип подстановки Лисков (Liskov Substitution Principle, LSP) говорит, что объекты подкласса должны быть взаимозаменяемы с объектами базового класса без нарушения корректности работы программы.
Пример на JavaScript (Node.js):
class Bird {
fly() {
console.log('Птица летит');
}
}
class Sparrow extends Bird {
fly() {
console.log('Воробей летит');
}
}
class Ostrich extends Bird {
fly() {
throw new Error('Страус не умеет летать');
}
}
function makeBirdFly(bird) {
bird.fly();
}
const sparrow = new Sparrow();
makeBirdFly(sparrow); // Воробей летит
const ostrich = new Ostrich();
makeBirdFly(ostrich); // Ошибка — нарушается LSP
Здесь класс Ostrich нарушает принцип подстановки Лисков, так как подкласс не поддерживает поведение базового класса (метод fly). Чтобы соблюдать LSP, лучше разделить классы на летающих и нелетающих птиц, например, через интерфейсы или отдельные базовые классы.