Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що означає "залежність від абстракції, а не від реалізації"?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Фраза **«залежність від абстракції, а не від реалізації»** означає, що модуль повинен працювати через інтерфейс або абстрактний контракт, а не через конкретний клас, який виконує роботу. **Ключове:** залежати від абстракції означає спиратися на контракт, а не залежати від реалізації означає не прив'язуватися до конкретних способів виконання цього контракту - це фундамент DIP.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняФраза **«залежність від абстракції, а не від реалізації»** означає, що модуль повинен працювати **через інтерфейс або абстрактний контракт**, а не через конкретний клас, який виконує роботу. Іншими словами: *клієнт повинен знати, що робить залежність, але не повинен знати, як вона це робить*. Детальніше: ### 1. Абстракція: це контракт (інтерфейс / базовий клас) Абстракція визначає набір методів, гарантованих будь-якою реалізацією. Вона описує *поведінку*, а не конкретний спосіб виконання. Приклад абстракції: ```python class NotificationChannel: def send(self, msg): raise NotImplementedError ``` ### 2. Реалізація: це конкретний клас, що виконує роботу Він знає *як* робити відправку: ```python class EmailChannel(NotificationChannel): def send(self, msg): print("Email:", msg) ``` ### 3. Клієнт повинен залежати тільки від абстракції Неправильно: ```python def notify_user(): channel = EmailChannel() # залежить від реалізації channel.send("hello") ``` Правильно: ```python def notify_user(channel: NotificationChannel): channel.send("hello") # залежить від абстракції ``` ### 4. Навіщо це потрібно - дозволяє підставляти будь-яку реалізацію без зміни клієнтського коду; - спрощує тестування (можна підставити мок чи фейкову реалізацію); - знижує зв'язаність і робить архітектуру гнучкішою; - дозволяє змінювати інфраструктуру без переписування бізнесу. ### 5. Ознака правильної архітектури Увесь високорівневий код залежить лише від інтерфейсів. Низькорівневі деталі реалізують ці інтерфейси і можуть вільно замінюватися. Підсумок: **Залежати від абстракції: значить спиратися на контракт.** **Не залежати від реалізації: значить не прив'язуватися до конкретних способів виконання цього контракту.** Це фундамент DIP і один з головних принципів гнучкої архітектури.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.