- Inversión de control
-
Inversión de control (Inversion of Control en inglés, IoC) es un método de programación en el que el flujo de ejecución de un programa se invierte respecto a los métodos de programación tradicionales, en los que la interacción se expresa de forma imperativa haciendo llamadas a procedimientos (procedure calls) o funciones. Tradicionalmente el programador especifica la secuencia de decisiones y procedimientos que pueden darse durante el ciclo de vida de un programa mediante llamadas a funciones. En su lugar, en la inversión de control se especifican respuestas deseadas a sucesos o solicitudes de datos concretas, dejando que algún tipo de entidad o arquitectura externa lleve a cabo las acciones de control que se requieran en el orden necesario y para el conjunto de sucesos que tengan que ocurrir.
En cierto modo es una implementación del Principio de Hollywood, una metodología de diseño de software, cuyo nombre proviene de las típicas respuestas que se les dan a los actores amateurs en las audiciones que tienen lugar en la meca del cine [1]: no nos llames; nosotros te llamaremos.
Es el principio subyacente a la técnica de Inyección de Dependencias, siendo términos frecuentemente confundidos.
Contenido
Historia
En los comienzos de la programación, los programas eran lineales y monolíticos. El flujo de ejecución era simple y predecible, ejecutándose línea tras línea.
Aparecieron dos conceptos que revolucionaron la programación: la modularidad y la reutilización de los componentes: se crean bibliotecas de componentes reutilizables. El flujo se complica, saltando de componente a componente, y aparece un nuevo problema: la dependencia (acoplamiento) entre nuestros componentes.
El problema se empieza a considerar lo suficientemente importante como para definir nuevos conceptos en el diseño :
- Inversión de Control (IoC)
- Inyección de Dependencias (Dependency Injection, DI)
Definición
El flujo habitual se da cuando es el código del usuario quien invoca a un procedimiento de una biblioteca.
La inversión de control sucede cuando es la biblioteca la que invoca el código del usuario.
Típicamente sucede cuando la biblioteca es la que implementa las estructuras de alto nivel y es el código del usuario el que implementa las tareas de bajo nivel.
La utilización de interfaces y la aparición de los frameworks han popularizado este término. De hecho es el concepto central del Framework de Spring, ya que implementa un "Contenedor" que se encarga de gestionar las instancias (así como sus creaciones y destrucciones) de los objetos del usuario. Por tanto las aplicaciones que utilicen el framework de Spring (no Spring propiamente dicho) utilizarán Inversión de Control.
Véase también
Enlaces externos
- Inversion Of Control - Martin Fowler
- Inversion of Control Containers and the Dependency Injection pattern - Martin Fowler
- Inversión de Control en Lyckapedia
Categorías:- Arquitectura de software
- Patrones de diseño
Wikimedia foundation. 2010.