Интернет магазин китайских планшетных компьютеров



Компьютеры - Обращение контроля

22 января 2011


Оглавление:
1. Обращение контроля
2. Применение Inversion of Control



Инверсия управления — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах и входящий в пятерку важнейших принципов SOLID.

Наиболее популярной реализацией IoC является Dependency Injection Principle. Dependency Injection используется во многих framework'ах, они называются IoC контейнеры. Он применяется программистами, использующими такие объектно-ориентированные языки программирования, как Smalltalk, C++, Java или языки платформы .NET.

Техническое описание

Термины и определения

Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Класс X зависит от класса Y, если выполняется одно из следующих условий:

  • X has-a Y и вызывает его
  • X is-a Y
  • X зависит от некоторого класса Z, который зависит от Y

X зависит от Y не значит, что Y зависит от X. Если же существуют обе зависимости, то это называется циклической зависимостью: X не может быть использован без Y, и наоборот. Существование большого числа циклических зависимостей в объектно-ориентированной программе может быть показателем неоптимального программного построения.

Разрыв зависимости

Если объект x вызывает методы объекта y, то X зависит от Y. Зависимость может быть обращена введением третьего класса, а именно интерфейсного класса I, который должен содержать все методы, которые x может вызвать у объекта y. Кроме того, Y должен реализовать интерфейс I. X и Y сейчас оба зависят от I, и класс X более не зависит от класса Y; предполагается, что X не реализует I.

Это исключение зависимости класса X от Y введением интерфейса I называется Inversion of Control).

Следует отметить, что Y может зависеть от других классов. До внесения изменений X зависел от Y, таким образом X косвенно зависел от всех классов, от которых зависит Y. Применением Inversion of Сontrol все эти косвенные зависимости также были разорваны — не только зависимость X от Y. Новый интерфейс I ни от чего не зависит.



Просмотров: 1593


<<< Неизменяемый объект
Объектный пул >>>