Чому OCP тісно пов'язаний з інтерфейсами?
OCP тісно пов'язаний з інтерфейсами, тому що саме інтерфейси дозволяють розширювати поведінку без зміни наявного коду, що і є суттю принципу відкритості/закритості.
Детальніше:
1. Інтерфейс задає контракт, який не потрібно змінювати
Інтерфейс визначає набір методів, але не визначає реалізацію. Цей контракт лишається стабільним - він «закритий для модифікації». Поки інтерфейс не змінюється, весь код, що залежить від нього, лишається незмінним.
2. Нові реалізації інтерфейсу - це шлях розширення
Коли з'являється нова потреба, створюється нова реалізація інтерфейсу. Це «відкритість для розширення»: система отримує нову поведінку без зміни наявних класів.
3. Клієнтський код працює не з конкретними класами, а з абстракціями
Код, який використовує інтерфейс, не знає і не повинен знати, яку саме реалізацію впроваджено. Це дозволяє додавати нові варіанти поведінки, не зачіпаючи код, що викликає.
4. Інтерфейси усувають потребу модифікувати центральну логіку
Без інтерфейсів розширення зазвичай вимагає:
- додавати нові
if/else, - дописувати
switch, - додавати нові гілки умови. Усе це є порушенням OCP. Інтерфейс позбавляє від такої конструкції: вибір поведінки переноситься на об'єкт, а не на умовний оператор.
5. Інтерфейси забезпечують поліморфізм
Поліморфізм - ключовий механізм реалізації OCP. Завдяки інтерфейсу різні реалізації можуть бути підставлені непомітно для решти системи.
6. Інтерфейс робить систему гнучкою до змін вимог
Вимоги завжди змінюються, але інтерфейс фіксує межу: стабільний контракт → змінювані реалізації. Це саме те, чого вимагає OCP.
Підсумок: OCP пов'язаний з інтерфейсами тому, що інтерфейси фіксують стабільний контракт, а розширення відбувається через нові реалізації цього контракту, без зміни наявного коду. Це робить систему стійкою до змін і безпечною для розвитку.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.