От автора: первые два принципа, рассмотренные ранее, по большому счету довольно просты, логичны и очень просты для понимания. Но вот принцип подстановки Барбары Лисков, особенно его оригинальная формулировка, многих загоняет в тупик. Поэтому в текущем уроке, на двух примерах, я постараюсь простым языком объяснить суть принципа и к чему приводит его нарушение.
Основная формулировка рассматриваемого принципа была представлена на конференции в 1987 Барборой Лисков и звучит следующим образом: «Пусть q(x) применимо к объектам x типа T. Тогда q(y) должно быть применимо для объектов y типа S, где S является подтипом T».
Конечно, для начинающего программиста очень сложная и не понятная формулировка, поэтому немного позже в книге Роберта С. Мартина было приведено более понятное и упрощенное определение: «Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом».
Что означает, следующее – объекты в проекте могут быть заменены объектами, наследующими их без каких-либо изменений в клиентском коде приложения. А значит классы наследники могут переопределить методы родительского класса, но только так, чтобы не изменять существующий функционал в клиентском коде.
Здесь можно много говорить и приводить различные трактовки принципа, но лучше рассмотреть все это на примерах. Соответственно в видео версии урока показаны два примера поясняющих суть принципа Лисков. Первый пример – классический, класс по расчету площади прямоугольника и второй – реализация шаблонизатора для сайта.