Как вы пишете код, который соответствует OCP?

Недавно я пытался узнать об основных принципах проектирования, и OCP немного смутил меня. Имеет смысл, что когда происходит изменение, предпочтительно расширять систему, а не модифицировать существующие и рабочие части. Но не является ли это скорее принципом того, как реализовать изменения в системе, а не как ее спроектировать? Разве весь код в основном не открыт для расширения с использованием подклассов? И как любой код может быть закрыт для модификации - не зависит ли это от того, как человек, осуществляющий изменение, решит его использовать?

Возможно, пример некоторого кода, который не следует OCP и как именно он нарушил этот принцип, был бы наиболее полезным для меня, чтобы понять это.

Спасибо

1 ответ

Решение

Типичным примером будет любая логика, которая разветвляется на тип вещей. Это означает, что каждый раз, когда вам нужно добавить новый тип, вы должны изменить этот код. Использование виртуальных функций означает, что вы можете просто добавлять новые классы для новых типов без изменения существующего кода.

Открытый Закрытый Принцип (PDF)

Там есть примеры кода.

Другие вопросы по тегам