Ответ
Что хотят услышать интервьюеры
Интервьюеры ожидают, что кандидат продемонстрирует понимание принципа подстановки Лисков (Liskov Substitution Principle, LSP), его значения в объектно-ориентированном программировании и примеры его применения. Важно, чтобы кандидат мог объяснить, как этот принцип способствует созданию гибкого и поддерживаемого кода, а также как нарушения LSP могут привести к проблемам в проекте.
Определение
Принцип подстановки Лисков (LSP) — это принцип объектно-ориентированного программирования, который утверждает, что объекты подклассов должны быть взаимозаменяемы с объектами суперкласса без изменения корректности программы. Этот принцип помогает обеспечить, что наследование работает как ожидается и что подклассы действительно расширяют функциональность суперкласса.
Пример
Рассмотрим класс Bird и его подклассы Sparrow и Penguin. Если Bird имеет метод fly(), то все подклассы должны корректно реализовывать этот метод.
class Bird:
def fly(self):
return "I can fly!"
class Sparrow(Bird):
pass
class Penguin(Bird):
def fly(self):
raise Exception("Penguins can't fly!")
def let_bird_fly(bird: Bird):
print(bird.fly())
# Применение
let_bird_fly(Sparrow()) # Работает корректно
let_bird_fly(Penguin()) # Вызывает ошибку, нарушая LSPВ этом примере, если мы попытаемся заменить Bird на Penguin, программа перестанет работать корректно, что и есть нарушение принципа подстановки Лисков.
Вывод
Соблюдение LSP способствует гибкости и расширяемости кода, позволяя избежать неожиданного поведения при использовании подклассов.