Open/Closed Principle (OCP) – принцип відкритості/закритості (програмні сутності мають бути відкриті для розширення, але закриті для зміни). Проблема: треба додати функціональність – доводиться змінювати клас. І це суперечить ідеї S.O.L.I.D. Рішення: абстракція та інтерфейсні покажчики. Сучасне об'єктно-орієнтоване проектування, не заперечуючи важливість успадкування, робить ставку на композицію, і на передачу інтерфейсних покажчиків, тому коли ми говоримо про розширення, ми говоримо про інтерфейсні покажчики. Принцип відкритості/закритості вимагає переходити від реалізації до абстракції.
Суть принципу ОСР у цьому, що одного разу створені класи слід змінювати під конкретні потреби конкретної ситуації. Для зміни поведінки деякого класу необхідно явно описати його інтерфейс, і створити іншу реалізацію цього інтерфейсу.
======================================================================
завдання для практики:
-
Реалізуйте систему знижок в інтернет-магазині, використовуючи принцип відкритості/закритості. Додайте можливість клієнтам отримувати знижку на товари в кошику, якщо вони задовольняють певним умовам (наприклад, купують більше 3 товарів). Реалізуйте систему знижок таким чином, щоб вона була розширюваною та легко підтримуваною.
-
Реалізуйте систему управління завданнями, використовуючи принцип відкритості/закритості. Створіть базовий клас Task та класи-спадкоємці для різних типів завдань (наприклад, задачі з програмування, завдання з тестування, завдання з аналізу даних тощо). Реалізуйте методи для додавання, видалення, зміни та виконання завдань, використовуючи принцип відкритості/закритості, щоб система була розширюваною та легко підтримуваною.
-
Реалізуйте систему плагінів для обробки файлів. Створіть базовий клас FileProcessor та класи-спадкоємці для різних типів файлів (наприклад, текстові файли, зображення, відео тощо). Реалізуйте методи для читання, запису, обробки та відображення файлів, використовуючи принцип відкритості/закритості, щоб система була розширюваною та легко підтримуваною.