DIP --принцип инверсии зависимостей. Название призывает инвертировать зависимости, определение задает их направление -- сверху вниз, а типовые примеры показывают способ сокрытия реализации. На деле же, все кроме сокрытия является иллюзией. Определение оперирует зависимостью модулей. Но модуль лишь структурная единица. У него нет собственной функциональности. Когда мы говорим, что модуль A зависит от модуля B, то это означает лишь то, что объекты модуля A зависят от объектов из модуля B. Зависимость между модулями вторична и формальна. Рассмотрим типичный пример. У нас есть два модуля H и L, содержащие классы High и Low соответственно. При этом класс High использует поведение класса Low. Интерфейс класса состоит из опубликованных методов и свойств, а также из диапазонов значений свойств, параметров и результатов методов. Изменения, вносимые в класс, можно разделить на две категории: приводящие к изменению интерфейса класса или нет. Изменения первой категории могут оказать влияние на зав