D - Dependency Inversion (Принцип інверсії залежностей)

D - Dependency Inversion (Принцип інверсії залежностей)
Модулі верхнього рівня повинні залежати від модулів нижнього рівня. І ті, й інші мають залежати від абстракцій. Абстракції не повинні залежати від деталей. Деталі мають залежати від абстракцій.

Модулі (або класи) верхнього рівня - класи, які виконують операцію за допомогою інструмента.
Модулі (або класи) нижнього рівня - інструменти, які потрібні для виконання операцій.
Абстракції – представляють інтерфейс, що з'єднує два класи.
Деталі - специфічні характеристики роботи інструменту.

Згідно з цим принципом, клас не повинен з'єднуватися з інструментом, який застосовує для виконання операції. Натомість він повинен бути з'єднаний з інтерфейсом, який допоможе встановити зв'язок між інструментом та класом.

Крім того, принцип говорить, що ні інтерфейс, ні клас, не повинні вникати в специфіку роботи інструменту. Навпаки, цей інструмент повинен відповідати вимогам інтерфейсу.

Призначення

Цей принцип служить у тому, щоб усунути залежність класів верхнього рівня від класів нижнього рівня рахунок введення інтерфейсів.