@FonVald
Backend Developer

Является ли использование в методе класса super() одним из требований для соблюдения принципа открытости/закрытости или подмены Барбары Лисков SOLID?

С коллегами возник спор, хочу докопаться до истины.

Вот к примеру определения из wiki (SOLID)
- Принцип открытости/закрытости (The Open Closed Principle)
«программные сущности … должны быть открыты для расширения, но закрыты для модификации.»
- Принцип подстановки Барбары Лисков (The Liskov Substitution Principle)
«объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы.» См. также контрактное программирование.
Наследующий класс должен дополнять, а не изменять базовый.

Из чего я делаю выводы
1) Руководствуясь принципом открытости/закрытости мы добавляем новый "тип" как класс наследник базового тем самым базовый класс становится открытым для расширения (наследования) и не нужно модифицировать его метод в зависимости от "типа" тем самым делая его закрытым. Главная идея от наследников ожидать работу того же метода что и в базовом классе. То есть *super()* не является необходимым условием при следовании этому принципу.
2) Руководствуясь принципом подмены Лисков, как раз таки использование *super()* будет говорить нам о том что мы дополняем функционал метода а не полностью изменяем базовый. Тем самым гарантируя ожидаемую работу программы.

А как вы считаете/знаете к какому принципу можно отнести использование super()?
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FulTupFul
Если класс уже был написан, одобрен, протестирован, воз-
можно, внесён в библиотеку и включён в проект, после этого
пытаться модифицировать его содержимое нежелательно.
Вместо этого вы можете создать подкласс и расширить в нём
базовое поведение, не изменяя код родительского класса
напрямую.
Метод super как раз позваляет вам использовать перекрытые методы суперкласса в потомке. Он не явлется обязательным. Если вам не нужно получить результат работы метода суперкласса в наследнике то можете неиспользовать метод super.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы