Sobes.tech
Back to questions
Junior — Middle
72

Можно ли привести пример принципа подстановки Лисков в объектно-ориентированном программировании?

Answer from AI

sobes.tech AI

Принцип подстановки Лисков (Liskov Substitution Principle, LSP) гласит, что объекты подкласса должны быть взаимозаменяемы с объектами базового класса без нарушения корректности программы.

Пример на C#:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("Птица летит");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("Воробей летит");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("Страус не умеет летать");
    }
}

void MakeBirdFly(Bird bird) {
    bird.Fly();
}

// Использование:
MakeBirdFly(new Sparrow()); // корректно
MakeBirdFly(new Ostrich()); // нарушает LSP, т.к. вызывает исключение

В этом примере класс Ostrich нарушает принцип подстановки Лисков, так как не поддерживает поведение базового класса Bird (метод Fly), вызывая исключение. Чтобы соблюдать LSP, нужно либо изменить иерархию классов, либо разделить интерфейсы, чтобы подклассы не вынуждены были реализовывать неподдерживаемое поведение.