Инверсия (метеорология)
- 1 year ago
- 0
- 0
Инверсия управления ( англ. Inversion of Control , IoC ) — общий принцип программирования, особенно важный в рамках объектно-ориентированной парадигмы, используемый для уменьшения зацепления (связанности) в компьютерных программах . Также архитектурное решение интеграции, упрощающее расширение возможностей системы, при котором поток управления программы контролируется фреймворком .
В обычной программе программист сам решает, в какой последовательности делать вызовы процедур. Но если используется фреймворк , программист может разместить свой код в определенных точках выполнения (используя callback или другие механизмы), затем запустить «главную функцию» фреймворка, которая обеспечит все выполнение и вызовет код программиста тогда, когда это будет необходимо. Как следствие, происходит утеря контроля над выполнением кода — это и называется инверсией управления (фреймворк управляет кодом программиста, а не программист управляет фреймворком).
Инверсия управления бывает не только во фреймворках, но и в некоторых библиотеках (но обычно библиотеки не создают инверсии управления — они предоставляют набор функций, которые должен вызывать программист).
Другим примером инверсии контроля можно считать облегчённые версии системных драйверов, так называемые фильтрующие драйверы. В этом случае основной поток управления реализуется ядром ОС и обычным «тяжёлым» драйвером, а конкретная функциональность реализуется за счёт функций обратного вызова (callback), которые фильтр регистрирует при старте. Собственно, такой же принцип работает и в случае других фильтров, будь то фильтрация видеопотока или потоков веб-запросов к java-сервлетам.
Одной из реализаций инверсии управления в применении к управлению зависимостями является внедрение зависимостей ( англ. dependency injection ) . Внедрение зависимости используется во многих фреймворках , которые называются IoC-контейнерами.
Если сравнить с более низкоуровневыми технологиями, IoC-контейнер — это компоновщик , который собирает не объектные файлы , а объекты ООП ( экземпляры класса ) во время исполнения программы. Очевидно, для реализации подобной идеи было необходимо создать не только сам компоновщик, но и фабрику , производящую объекты. Аналогом такого компоновщика (естественно, более функциональным) является компилятор , одной из функций которого является создание объектных файлов. В идее компоновки программы во время исполнения нет ничего нового. Предоставление программисту инструментов внедрения зависимостей дало значительно бо́льшую гибкость в разработке и удобство в тестировании кода .
Все подходы, основанные на инверсии управления, страдают от следующих двух недостатков :