Объясните Open Closed Principle (принцип открытости-закрытости).
Класс должен быть закрыт для изменения, но открыт для расширения. Пишем код так, чтобы другие могли легко расширить функционал, не меняя написанный код.
Пример нарушения принципа:
Допустим, есть игровой персонаж — рыцарь
Мы добавляем возможность играть еще и за волшебника:
Что плохо?
При добавлении персонажа приходится добавлять все больше условий. При наличии 1000 персонажей это будет работать медленно.
Класс начинает обладать функционалом, который, может, и не нужен. У мага может быть набор заклинаний, у рыцаря его нет.
Каждое изменение в основном коде может потребовать изменения во всех зависимых частях кода. Например, придется везде менять меч на посох, меняя написанную логику. Это увеличивает риск ошибок и усложняет процесс добавления изменения.
Существующий код уже написан, оттестирован, одобрен. Его изменение может вызвать много лишних проблем. Лучше не трогать то, что уже работает.
Исправленный код:
Нужно разработать класс так, чтобы новых персонажей можно было добавлять, не редактируя существующий код. Один из вариантов:
Отметьте свой прогресс