5. Dependency inversion principle
Принцип инверсии зависимости
модули высокого уровня должны зависеть от модулей более низкого уровня
все они должны зависеть от абстракции
абстракции не должны зависеть от деталей
детали должны зависеть от абстракций