Інверсія керування: відмінності між версіями
[перевірена версія] | [перевірена версія] |
Вилучено вміст Додано вміст
→Огляд: виправлення автоматичної помилки "допоки користувач не натисне клавішЕ" |
оформлення |
||
Рядок 1:
'''Інверсія управління''' ({{lang-en|Inversion of Control}}, '''IoC''')
IoC у вигляді [[принцип інверсії залежностей|принципу інверсії залежностей]] входить у п'ятірку принципів [[SOLID (об'єктно-орієнтоване програмування)|SOLID]].
Рядок 6:
== Огляд ==
Наприклад, у випадку традиційного програмування, головна функція програми може викликати функцію із бібліотеки, щоб відобразити список доступних команд, і запросити користувача вибрати одну з них.<ref name=FowlerDI>[http://martinfowler.com/articles/injection.html Dependency Injection].</ref> Бібліотека поверне вибрану опцію як результат виклику функції. Цей стиль використовувався у текстових інтерфейсах. Наприклад, [[поштовий клієнт]] може показати екран з командами для завантаження нових листів, відповіді на поточний лист, розпочати новий лист і
Натомість, у випадку інверсії управління, програма пишеться із використанням [[Програмний каркас|програмного каркасу]], який знає загальні поведінкові і графічні елементи, такі як віконний інтерфейс, меню, керування мишкою
Інверсія управління несе важливу ідею, що повторно використовний код і задача-залежний код розробляються незалежно, хоча й діють разом. [[Програмний каркас|
== Принцип інверсії залежностей ==
Рядок 29:
Якщо об'єкт <tt>x</tt> (класу <tt>X</tt>) викликає методи об'єкту <tt>y</tt> (класу <tt>Y</tt>), то <tt>X</tt> залежить від <tt>Y</tt>. Залежність може бути звернена створенням третього класу, а саме інтерфейсного класу <tt>I</tt>, який повинен містити в собі усі методи, які <tt>x</tt> може викликати у об'єкта <tt>y</tt>. Крім того, <tt>Y</tt> повинен реалізовувати інтерфейс <tt>I</tt>. <tt>X</tt> та <tt>Y</tt> наразі обидва залежать від <tt>I</tt>, і клас <tt>X</tt> більш не залежить від класу <tt>Y</tt>; передбачається, що <tt>X</tt> не реалізує <tt>I</tt>.
Це виключення залежності класу <tt>X</tt> від <tt>Y</tt> шляхом створення інтерфейсу <tt>I</tt> і називається
Слід сказати, що <tt>Y</tt> може залежати від інших класів. До внесення змін <tt>X</tt> залежав від <tt>Y</tt>, тоді <tt>X</tt> побічно залежав від усіх класів, від яких залежить <tt>Y</tt>. За допомогою застосування '''Inversion of Control''' всі побічні залежності були розірвані
== Застосування IoC контейнерів ==
Рядок 39:
=== Java ===
Програмісти, які використовують Java застосовують '''Inversion of Control''' в ''Inversion of Control контейнерах''. Програмне забезпечення робить запит на об'єкт з контейнера, та контейнер створює об'єкт та його залежності. Сервер программ [[ATG Dynamo]] був одним з перших обчислювальних середовищ, які ефективно використовували цей підхід. Сучасні приклади IoC-контейнерів: [[HiveMind]], [http://www.picocontainer.org PicoContainer], [[Spring Framework]] (Spring
=== .NET ===
Рядок 73:
== Див. також ==
* [[Принцип інверсії залежностей]]
* [[Впровадження залежностей]]
Рядок 80:
== Посилання ==
* Максим Базь. [http://z0rch.com/solid_dip SOLID'
{{Soft-stub}}
|