Skip to main content

Чому OCP тісно пов'язаний з інтерфейсами?

OCP тісно пов'язаний з інтерфейсами, тому що саме інтерфейси дозволяють розширювати поведінку без зміни наявного коду, що і є суттю принципу відкритості/закритості.

Детальніше:

1. Інтерфейс задає контракт, який не потрібно змінювати

Інтерфейс визначає набір методів, але не визначає реалізацію. Цей контракт лишається стабільним - він «закритий для модифікації». Поки інтерфейс не змінюється, весь код, що залежить від нього, лишається незмінним.

2. Нові реалізації інтерфейсу - це шлях розширення

Коли з'являється нова потреба, створюється нова реалізація інтерфейсу. Це «відкритість для розширення»: система отримує нову поведінку без зміни наявних класів.

3. Клієнтський код працює не з конкретними класами, а з абстракціями

Код, який використовує інтерфейс, не знає і не повинен знати, яку саме реалізацію впроваджено. Це дозволяє додавати нові варіанти поведінки, не зачіпаючи код, що викликає.

4. Інтерфейси усувають потребу модифікувати центральну логіку

Без інтерфейсів розширення зазвичай вимагає:

  • додавати нові if/else,
  • дописувати switch,
  • додавати нові гілки умови. Усе це є порушенням OCP. Інтерфейс позбавляє від такої конструкції: вибір поведінки переноситься на об'єкт, а не на умовний оператор.

5. Інтерфейси забезпечують поліморфізм

Поліморфізм - ключовий механізм реалізації OCP. Завдяки інтерфейсу різні реалізації можуть бути підставлені непомітно для решти системи.

6. Інтерфейс робить систему гнучкою до змін вимог

Вимоги завжди змінюються, але інтерфейс фіксує межу: стабільний контракт → змінювані реалізації. Це саме те, чого вимагає OCP.

Підсумок: OCP пов'язаний з інтерфейсами тому, що інтерфейси фіксують стабільний контракт, а розширення відбувається через нові реалізації цього контракту, без зміни наявного коду. Це робить систему стійкою до змін і безпечною для розвитку.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.