b'\n_START_ARTICLE_\nInversi\xc3\xb3n de control\n_START_PARAGRAPH_\nInversi\xc3\xb3n de control (Inversion of Control en ingl\xc3\xa9s, IoC) es un principio de dise\xc3\xb1o de software en el que el flujo de ejecuci\xc3\xb3n de un programa se invierte respecto a los m\xc3\xa9todos de programaci\xc3\xb3n tradicionales. En los m\xc3\xa9todos de programaci\xc3\xb3n tradicionales la interacci\xc3\xb3n se expresa de forma imperativa haciendo llamadas a procedimientos 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\xc3\xb3n de control se especifican respuestas deseadas a sucesos o solicitudes de datos concretas, dejando que alg\xc3\xban 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._NEWLINE_Esta nueva filosof\xc3\xada es muy \xc3\xbatil cuando se usan frameworks de desarrollo. Es el framework el que toma el control, el que define el flujo de actuaci\xc3\xb3n o el ciclo de vida de una petici\xc3\xb3n. Es decir, es el framework quien ejecuta el c\xc3\xb3digo de usuario.\xe2\x80\x8b_NEWLINE_La inversi\xc3\xb3n de control es un t\xc3\xa9rmino gen\xc3\xa9rico que puede implementarse de diferentes maneras. Por ejemplo se puede implementar mediante eventos o mediante Inyecci\xc3\xb3n de Dependencias.\xe2\x80\x8b\n_START_SECTION_\nMotivaci\xc3\xb3n\n_START_PARAGRAPH_\nEn los comienzos de la programaci\xc3\xb3n, los programas eran lineales y monol\xc3\xadticos. El flujo de ejecuci\xc3\xb3n era simple y predecible, ejecut\xc3\xa1ndose l\xc3\xadnea tras l\xc3\xadnea._NEWLINE_Aparecieron dos conceptos que revolucionaron la programaci\xc3\xb3n: la modularidad y la reutilizaci\xc3\xb3n 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._NEWLINE_El problema se empieza a considerar lo suficientemente importante como para definir nuevos conceptos en el dise\xc3\xb1o como la Inversi\xc3\xb3n de Control (IoC) implementada a trav\xc3\xa9s de Inyecci\xc3\xb3n de Dependencias o de eventos\n_START_SECTION_\nDefinici\xc3\xb3n\n_START_PARAGRAPH_\nLa inversi\xc3\xb3n de control ocurre cuando trabajamos con una biblioteca y la propia biblioteca es la que invoca el c\xc3\xb3digo del usuario. Es t\xc3\xadpico que la biblioteca implemente las estructuras de alto nivel y es el c\xc3\xb3digo del usuario el que implementa las tareas de bajo nivel.\n_START_SECTION_\nEjemplos\n_START_PARAGRAPH_\nLa Inversi\xc3\xb3n de control es el concepto central del  Framework de Spring y usa la implementaci\xc3\xb3n por Inyecci\xc3\xb3n de dependencias, ya que implementa un "Contenedor" que se encarga de gestionar las instancias (as\xc3\xad como sus creaciones y destrucciones) de los objetos del usuario. _NEWLINE_La mayor\xc3\xada de las bibliotecas para el desarrollo de aplicaciones con GUI, como GTK o QT usan inversi\xc3\xb3n de control y est\xc3\xa1n dirigidas por eventos.\xe2\x80\x8b'