Sobes.tech
Назад к вопросам
Junior — Middle
73

Объясните, что означает принцип подстановки Лисков и как он применяется в объектно-ориентированном программировании.

Компании, где спрашивали
Магнит Тех

Ответ от нейросети

sobes.tech AI

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

Проще говоря, если класс B наследуется от класса A, то объекты класса B должны вести себя так, чтобы их можно было использовать вместо объектов класса A без неожиданных ошибок или изменений в логике.

Это достигается тем, что подкласс не должен:

  • Нарушать инварианты базового класса.
  • Сужать предусловия методов (требовать более строгие входные данные).
  • Расширять постусловия (давать менее гарантированный результат).

Пример:

class Bird {
    func fly() {
        print("Птица летит")
    }
}

class Sparrow: Bird {
    override func fly() {
        print("Воробей летит")
    }
}

// Нарушение LSP, если добавить класс Penguin, который не умеет летать
class Penguin: Bird {
    override func fly() {
        fatalError("Пингвин не умеет летать")
    }
}

В этом примере Penguin нарушает LSP, так как его нельзя использовать вместо Bird без ошибок. Правильнее было бы выделить интерфейс летающих птиц отдельно.

Таким образом, LSP помогает создавать иерархии классов, которые легко расширять и поддерживать, избегая неожиданных ошибок при замене объектов.