Inversion of Control

Inversion of Control (IoC) — важный принцип объектно ориентированного программирования, который используется для уменьшения связности в компьютерных программах.

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

Содержание

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

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

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

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

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

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

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

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

Применнение Inversion of Control

Java

Программисты использующие Java применяют Inversion of Control в Inversion of Control контейнерах. Программное обеспечение запрашивает объект из контейнера, и контейнер создаёт объект и его зависимости. Сервер приложений ATG Dynamo был одним из первых вычислительных сред эффективно использовавших этот подход. Современные примеры таких контейнеров: HiveMind, PicoContainer, Spring Framework (отметим, что Spring — полноценная корпоративная платформа, а не только IOC контейнер), Apache Excalibur, Seasar, и DPML Metro.

.NET

PHP4

PHP5

RUBY

Groovy на Grails

Groovy на Grails использует Spring Framework для запуска приложений.

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home