La inversión de control ( IoC ) es un importante principio de programación orientada a objetos que se utiliza para reducir el acoplamiento (coupling) en programas informáticos [1] . También es una solución de integración arquitectónica que simplifica la expansión de las capacidades del sistema, en el que el marco de trabajo controla el flujo de control del programa [2] .
En un programa normal, el programador decide en qué orden hacer las llamadas a procedimientos. Pero si se usa un marco , el programador puede colocar su código en ciertos puntos de ejecución (usando devoluciones de llamada u otros mecanismos), luego ejecutar la "función principal" del marco que manejará toda la ejecución y llamará al código del programador cuando sea necesario. Como resultado, hay una pérdida de control sobre la ejecución del código; esto se denomina inversión de control (el marco controla el código del programador y no el programador controla el marco).
La inversión de control ocurre no solo en marcos, sino también en algunas bibliotecas (pero generalmente las bibliotecas no crean inversión de control; proporcionan un conjunto de funciones que el programador debe llamar).
Una implementación de la inversión de control aplicada a la gestión de dependencias es la inyección de dependencias [ 2 ] [ 3] . La inyección de dependencia se usa en muchos marcos llamados contenedores IoC.
En comparación con las tecnologías de nivel inferior, un contenedor IoC es un enlazador que no recopila archivos de objetos , sino objetos OOP ( instancias de clase ) durante la ejecución del programa . Obviamente, para implementar tal idea, era necesario crear no solo el propio enlazador, sino también una fábrica que produce objetos. Un análogo de dicho enlazador (por supuesto, más funcional) es un compilador , una de cuyas funciones es la creación de archivos de objetos. La idea de vincular un programa en tiempo de ejecución no es nada nuevo. Proporcionar al programador herramientas de inyección de dependencia ha proporcionado mucha más flexibilidad en el desarrollo y comodidad en la prueba del código [4] .
Todos los enfoques basados en la inversión del control adolecen de las siguientes dos desventajas [5] :