#inheritance #final #open-closed-principle
#наследование #Финал #принцип open-closed
Вопрос:
Принцип «Открыто-закрыто» является одним из пяти ОСНОВНЫХ принципов объектно-ориентированного проектирования. В нем говорится, что «программные объекты (классы, модули, функции и т.д.) Должны быть открыты для расширения, но закрыты для модификации».
Но в последнее время большинство языков программирования предоставляют способ завершения классов таким образом, чтобы они не наследовались в будущем, предоставляя такие ключевые слова, как final
. Некоторые языки, такие как Kotlin, имеют свои классы по умолчанию final (он же opt-in open).
Я также прочитал несколько статей, в которых говорится, что наследование интерфейса должно быть предпочтительнее наследования реализации с обоснованными рассуждениями, такими как проблема хрупкого базового класса. Но OCP сообщает, что классы должны быть открыты для расширения. Итак, я должен рассмотреть возможность объявления моих классов открытыми? или окончательный? Какая вообще хорошая практика?
Ответ №1:
Я думаю, что нет!
Основная причина этого изложена ниже.
Принцип open-closed атакует это очень простым способом. В нем говорится, что вы должны разрабатывать модули, которые никогда не меняются. Когда требования меняются, вы расширяете поведение таких модулей, добавляя новый код, а не изменяя старый код, который уже работает. »
Таким образом, мы можем сказать, что это структурный формат для любого кода!
Ответ №2:
Наследование — это всего лишь один из методов, используемых для выполнения OCP. Шаблон стратегии, шаблон декоратора, обычная композиция, параметрический полиморфизм и другие методы также могут быть использованы для достижения этих целей. Наследование всегда будет вариантом, но его следует избегать, если это возможно, при необходимости.