что если заменить в рабочем коде объекты родительского класса на объекты дочернего - результат выполнения кода не должен меняться. Подкласс лишь дополняет родителя, а не заменяет его логику.
Правильно я понимаю, что следуя этому принципу мы можем овверрайдить методы только абстрактных классов, а предметые классы дополнять лишь введением новых методов в наследника?
Вообще-тотлогику мы как раз таки можем заменять. Иначе зачем нам вообще дали virtual, override и в целом наследование
Ну в lsp довольно жёсткие требования к оверрайду методлв по поводу пред и постусловий. А это ведь тоже логика. Принцип прямо толкает тебя на то, чтобы ты сделал абстрактный класс, что в целом неплохо. Но понимания полного пока не могу достичь
Когда ты оверрайдить, ты можешь вызывать базовый метод)
Это-то само собой, но это же не спасёт от проблем, от которых ограждает lsp
Ну LSP подразумевает, что ты можешь добавлять новое поведение, при этом сохраняя старое
Мне кажется это рекомендация, а не правило. Если я хочу сделать какую то фабрику, и вдруг она начнет отдавать не правильные обьекты, я хочу исключение, а логически не правильные данные. И да исключение позволяют выявить не правильно работающий код, а не скрывать его.
Обсуждают сегодня