Принцип подстановки Лисков
PuzzleCoreLiskov Substitution Principle (LSP).
Доброго времени, уважаемый читатель. Сегодня поговорим о принципе из цикла SOLID, который имеет имя. =)
Сама Барбара Лисков, дает очень понятное описание этому методу, на столько понятное, что, по всему видимому, дошло до нас по причине работ Роберта Мартина.
Лисков, формулирует свой принцип, таким образом:
Пусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.
Ну, тут все понятно, я могу закончить писать статью на эту тему, и начать разбирать следующий принцип.
Хорошо, хорошо, я вас понял. =) Продолжаю разбор данного принципа.
Роберт Мартин определил данный принцип так:
Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.
Теперь простыми словами:
Поведение классов-наследников, не должно противоречить поведению классов-родителей.
Например, есть класс что-то вроде DB. Класс давно живет, работает с базой данных. Приходит в компанию новый программист, и начинает разработку новой фичи. Тут ему приходит в голову: наследую класс, и вот в такой, в такой и в такой метод пишу что то вроде raise Exception... По его задумке это работает, родительский класс, как использовался, так и используется. Дочерний выполняет роль этой самой фичи. Проходит еще время, этот проект перепадает на радость другому программисту. Он начинает работать с проектом, и вот начинается его веселая жизнь, летят эксцепшены, один за другим!
Запомните, если вы делаете не работоспособным, метод класса наследника, или в корне меняете, сказал бы, нарушаете, его логику - вы нарушаете LSP.
Старался максимально кратко и понятно, спасибо!
Подписывайтесь, читайте, ставьте лайки, мне будет очень приятно!)