Практические приемы работы по принципам ООП
Публичные методы класса всегда имплементируют интерфейс.
Class → <I> → Class
Объект Низкого уровня (меняется часто) знает об объектах Высокого уровня (меняется редко) за счет наличия прямой ссылки - обращается к нему через интерфейс и подписывается на события, что делает объект Высокого уровня зависимым от абстракции. Объект Высокого уровня не знает об объектах Низкого уровня, что позволяет менять объекты Низкого уровня не меняя объекты Высокого уровня.