Теперь рассмотрим второй принцип #SOLID - принцип открытости/закрытости (он же Open/Closed Principle, он же OCP).
Этот принцип предполагает, что программные сущности, такие как классы, модули или функции, должны быть открыты для расширения, но закрыты для модификации.
Поясню: это означает, что новая функциональность должна быть добавлена без изменения уже существующего кода исключительно путем **наследования**, интерфейсов или других подобных механизмов.
Приведу пример: у нас есть функция, которая умеет рисовать квадраты, но в новом классе понадобилось чтобы она вообще рисовала сколькоугодно-угольники. Для этого мы не изменяем исходную функцию, а создаем в новом классе другую функцию с таким же именем, но с другими параметрами и уже в ней реализуем рисование многоугольников.
Принцип OCP позволяет создавать более гибкие и расширяемые программы, поскольку новые функции могут быть добавлены без опасности переработки уже существующего кода.