Інверсія управління

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

Найпопулярнішою реалізацією IoC є Dependency Injection Principle (принцип впровадження залежностей). Dependency Injection використовується в багатьох фреймворках, вони називаються IoC контейнери. Від застосовується програмістами, які використовують такі об'єктно-орієнтовані мови програмування, як 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 не реалізує I.

Це виключення залежності класу X від Y шляхом створення інтерфейсу I і називається Inversion of Control.

Слід сказати, що Y може залежати від інших класів. До внесення змін X залежав від Y, тоді X побічно залежав від усіх класів, від яких залежить Y. За допомогою застосування Inversion of Сontrol всі побічні залежності були розірвані — не тільки залежність X від Y.

[ред.] Застосування Inversion of Control

[ред.] C++

[ред.] Java

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

[ред.] .NET

[ред.] PHP4

[ред.] PHP5

[ред.] Python

[ред.] RUBY

[ред.] ActionScript

[ред.] Посилання

Особисті інструменти
Простори назв

Варіанти
Дії
Навігація
Участь
Панель інструментів
Друк/експорт
Іншими мовами