Що означає принцип відкритості/закритості?
Принцип відкритості/закритості (Open/Closed Principle, OCP) означає, що модуль повинен бути відкритий для розширення, але закритий для модифікації.
Детальніше:
1. Сенс "відкритий для розширення"
Поведінку класу можна змінювати чи доповнювати, але не через зміну його внутрішнього коду, а через додавання нових компонентів: нових класів, стратегій, обробників, адаптерів. Тобто розширення функціональності має відбуватися ззовні.
2. Сенс "закритий для модифікації"
Уже написаний і протестований код не повинен змінюватися при появі нових вимог. Будь-яка модифікація наявної логіки створює ризик появи помилок, тому OCP вимагає, щоб базовий код лишався стабільним.
3. Мотивація принципу
Коли вимоги змінюються (а вони завжди змінюються), архітектура повинна дозволяти адаптацію без переписування старої логіки. Це знижує ризик регресій, підвищує передбачуваність поведінки і прискорює розробку.
4. Що вважається порушенням OCP
- Коли для додавання нового варіанта поведінки потрібно змінювати тіло наявного методу.
- Коли поява нових вимог змушує переписувати вже працюючий клас.
- Коли основний код доводиться адаптувати під нові умови замість того, щоб підключити нові реалізації.
5. Що відповідає OCP
- Використання інтерфейсів і абстракцій, що дозволяють підставляти нові реалізації.
- Застосування шаблонів на кшталт Strategy, Decorator, Factory Method, поліморфізму.
- Архітектура, в якій додавання нової поведінки не зачіпає наявний код.
Підсумок: OCP - це принцип, який робить код стійким до змін вимог: старий код лишається незмінним, нова поведінка додається через розширення, а не модифікацію.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.