Инверсия управления

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Инверсия управления (англ. Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения зацепления в компьютерных программах[источник не указан 98 дней]. Также архитектурное решение интеграции, упрощающее расширение возможностей системы, при котором контроль над потоком управления программы остаётся за каркасом[1].

Формулировка:

  • Модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те, и другие должны зависеть от абстракции.
  • Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Одной из реализаций IoC является внедрение зависимостей (англ. dependency injection)[1]. Внедрение зависимости используется во многих фреймворках, которые называются IoC-контейнерами.

Если сравнить с более низкоуровневыми технологиями, IoC-контейнер — это компоновщик, который собирает не объектные файлы, а объекты ООП (экземпляры класса) во время исполнения программы. Очевидно, для реализации подобной идеи было необходимо создать не только сам компоновщик, но и фабрику, производящую объекты. Аналогом такого компоновщика (естественно, более функциональным) является компилятор, одной из функций которого является создание объектных файлов. В идее компоновки программы во время исполнения нет ничего нового. Предоставление программисту инструментов внедрения зависимостей дало значительно бо́льшую гибкость в разработке и удобство в тестировании кода.[источник не указан 590 дней]

Методы реализации[править | править вики-текст]

Критика[править | править вики-текст]

Все подходы, основанные на инверсии управления, страдают от следующих двух недостатков[2]:

  • логика взаимодействия программы разбросана по отдельным обработчикам событий или классам;
  • поток управления задан неявно и использует общее состояние (shared state) обработчиков событий.

Примечания[править | править вики-текст]

  1. 1 2 Yang, 2012
  2. Agha, G. and Igarashi, A. and Kobayashi, N. and Masuhara, H. and Matsuoka, S. and Shibayama, E. and Taura, K. Concurrent Objects and Beyond: Papers dedicated to Akinori Yonezawa on the Occasion of His 65th Birthday. — Springer Berlin Heidelberg, 2014. — P. 433. — ISBN 9783662444719.

Литература[править | править вики-текст]

  • Yang, H. Software Reuse in the Emerging Cloud Computing Era. — Information Science Reference, 2012. — P. 54. — ISBN 9781466608986.

Ссылки[править | править вики-текст]

  • Martin Fowler. InversionOfControl (англ.). Проверено 5 ноября 2013.
  • Вольный перевод статьи Мартина Фаулера "Inversion of Control Containers and the Dependency Injection pattern". InversionOfControl (рус.). Проверено 10 декабря 2014.