Método de inversión of control
12 Temas que no puedes dejar de leer
UDO MONAGAS
ión c ico c r u ó ía e d ón f i T o a s r r t o u l g c n I Mar Conc Biblio
Método de inversión of control
Contenido *Introducción *Programa *Programación *Interfaz *Biblioteca *Framework o infraestructura digital *Inversión de Control *Inyección de constructor *Inyección de Setter *Inyección de Interface *Conclusión *Bibliografía
Editorial UNIVERSIDAD DE ORIENTE NÚCLEO DE MONAGAS ESCUELA DE INGENIERÍA Y CIENCIAS APLICADAS ÁREAS DE GRADO CSC MATURÍN / MONAGAS / VENEZUELA
Segunda Edición Diseño David Farrera Irenes Daguar
EQUIPO
PROLOG
Introdución La Inversión of Control 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 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 La historia de la informática y de la computación se ha caracterizado fundamentalmente en la existencia de centenares de lenguajes, de programación, de forma tal que siempre se ha hablado de la babel de los lenguajes, aunque bien es cierto que son solo unas decenas escasas los que han tenido un impacto significativo y unos pocos utilizados en las industrias, los negocios y la ciencia
La inversión de control sucede cuando es la biblioteca la que invoca el código del usuario. 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. Inicialmente las interfaces de usuario eran desarrolladas pensando solamente en su correcto funcionamiento, luego se comprobó la necesidad de que fueran fácilmente usables y después se hizo patente la importancia de la estética en las mismas, punto en el que el diseño gráfico entró de lleno en el mundo de las interfaces de usuario. Un sistema de este tipo no sólo tiene que funcionar, debe ser agradable a la vista, acorde con las inquietudes estéticas del mundo que nos rodea. C o l o re s, fo r m a s, agru p a c i o n e s y comunicación forman en la actualidad parte indispensable de una interfaz de usuario.
Marco Teórico
programa
Programa Secuencia finita de dígitos y caracteres, directamente legible por las personas y por el ordenador.
Programación................. Es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales. El código fuente es escrito en un lenguaje de programación. El propósito de la programación es crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal.
programación
Interfaz .............................. Es una conexión física y funcional entre dos aparatos o sistemas independientes. Generalizando esta definición, dados dos sistemas cualesquiera que se deben interfaz comunicar entre ellos la interfaz será el mecanismo, entorno o herramienta que hace posible dicha comunicación. Utilizándose para describir multitud de entornos de comunicación entre sistemas físicos, eléctricos, electrónicos y lógicos
Interfaces.....
Biblioteca....
Las interfaces de usuario son utilizadas en multitud de sistemas que nos rodean y hacen nuestra vida más cómoda y segura. Los ingenieros y diseñadores industriales han venido trabajando en este campo desde hace mucho tiempo, creando sistemas de comunicación adecuadas entre los objetos que crean y los usuarios de los mismos. Por ejemplo, el sistema de botones de control de un televisor o el mando a distancia que lo controla, los diferentes mecanismos de control de un automóvil.
Es esencialmente un conjunto de funciones que se pueden llamar, estos días, por lo general organizados en las clases. Cada llamada que hace un poco de trabajo y devuelve el control al cliente. Tomado de la página web: http://www.iteramos.com/ pregunta/14178/la-inversion-decontrol-vs-inyeccion-dedependencia
Framework o infraestructura digital Es
una estructura conceptual y tecnológica de soporte definido, normalmente con artefactos o módulos de software concretos, que puede servir de base para la organización y desarrollo de software. Típicamente, puede incluir soporte de programas, bibliotecas, y un lenguaje interpretado, entre otras herramientas, para así ayudar a desarrollar y unir los diferentes componentes de un proyecto. Los frameworks tienen como objetivo principal ofrecer una funcionalidad definida, auto contenida, siendo construidos usando patrones de diseño, y su característica principal es su alta cohesión y bajo acoplamiento. oooooooooooooooooooooooooooooo
Spring Container El contenedor de Spring es uno de los puntos centrales de Spring, se encarga de crear los objetos, conectarlos entre si, configurarlos y además controla los ciclos de vida de cada objeto mediante el patrón de Inyección de Dependencias ( Dependency Injection ó DI ). Podemos personalizar el contenedor de Spring mediante configuración XML o programáticamente, a lo largo del tutorial, veremos como hacerlo de ambas maneras.
Algunas de las cosas que tendremos que configurar a la hora de crear un Contexto de Aplicación de Spring son: 1. Crear Beans* individualmente o a través de un "escaneador" de ficheros. oooooooooooooooooooo 2. Configurar los servicios que usará 3. Los beans son la manera que tiene de denominar Spring a los objetos Java de los que se encarga, es decir aquellos que se encuentren en el contenedor de Spring
Inversión
de
Control Es un fenómeno común que te encuentras al ampliar los marcos. De hecho es a menudo visto como una característica definitoria de un marco. (Fowler, 2005). I nve rs i ó n d e c o n t ro l e s u n a p a r t e fundamental de lo que hace un marco diferente a una biblioteca. Una biblioteca es esencialmente un conjunto de funciones que se pueden llamar, en estos días por lo general organizados en clases. Cada llamada hace algún trabajo y devuelve el control al cliente. Un marco encarna algún diseño abstracto, con un comportamiento más integrada. Para utilizarlo es necesario insertar su comportamiento en varios lugares en el marco ya sea por subclases o enchufando en sus propias clases. El código del marco y luego llama a su código en estos puntos. (Johnson y Foote, SF).
Inversión de control (Inversion of Control e n i n g l é s, I o C ) e s u n m é t o d o d e 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.
Formas de Inyección de Dependencia La idea básica de la inyección de dependencia es tener un objeto independiente, un ensamblador, que rellena un campo en la clase lister con una implementación apropiada para la interfaz de buscador, resultando en un diagrama de dependencia a lo largo de las líneas de la Figura 2 Las dependencias de un inyector de Dependencia
Hay tres estilos principales de la inyección de dependencia:
Inyección de constructor En el siguiente ejemplo podemos ver como el objeto declara sus dependencias en el constructor, podemos observar que no hay código que se encargue de buscar esa dependencia o crearla, simplemente la declara, esto nos ayuda a tener clases Java mucho más limpias a la vez que nos ayuda a facilitar el Testing, ya que en un entorno de Tests podríamos intercambiar ese objeto por un Mock sin cambiar el código ( mediante la configuración de Spring ).
Formas de Inyección de Dependencia Para informar a Spring de cuál es la dependencia que tiene que inyectar en GeneradorPlaylist podemos hacerlo mediante XML o anotaciones, en el siguiente ejemplo vamos a ver como se conf iguraría mediante XML:
Inyección de Setter Spring también permite inyectar la dependencia mediante los Setter (métodos set*()), cada forma de inyectar las dependencias tiene sus ventajas y s u s d e s ve n t a j a s, a u n q u e l a m ayo r í a d e l o s desarrolladores prefieren inyectar las dependencias mediante los métodos Set. oooooooooooooooooooo Para indicarle a Spring que queremos que inyecte la dependencia, podemos hacerlo mediante anotaciones o XML, vamos a ver cómo sería mediante anotaciones.
Mediante la anotación @autowired le indicamos a Spring que se tiene que encargar de buscar un Bean que cumpla los requisitos para ser inyectado, en este caso el único requisito es que sea del tipo Buscador Canciones, en caso de que hubiese más de un Bean que cumpliese esos requisitos tendríamos que decirle a Spring cuál es el Bean correcto
Inyección de Interface La tercera técnica de inyección es definir y utilizar las interfaces para la inyección. Avalon es un ejemplo de un marco que utiliza esta técnica en lugares. Voy a hablar un poco más sobre esto más adelante, pero en este caso voy a utilizar con un código de ejemplo simple.
Con esta técnica empiezo definiendo una interfaz que voy a utilizar para realizar la inyección a través. Aquí está la interfaz para la inyección de un buscador de película en un objeto.
interfaz pública InjectFinder { vacío injectFinder (buscador MovieFinder); } Esta interfaz se define por el que proporciona la interfaz MovieFinder. Tiene que ser implementado por cualquier clase que quiere usar un buscador, como el Lister. clase MovieLister implementa InjectFinder public void injectFinder (buscador MovieFinder) { this.finder = buscador; } Uso de un enfoque similar para inyectar el nombre del archivo en la aplicación del buscador. interfaz pública InjectFinderFilename { anular injectFilename (String filename)
Conclusión A través del tiempo nos hemos visto en la necesidad de ir evolucionando en los programas principalmente en la interfaz debido que con esta herramienta pueden crear sistemas de comunicación entre los objetos y los usuarios. Los Módulo debe ofrecer un grupo de servicios diseñados para que el resto del programa pueda interactuar con el usuario, una característica principal de un marco es que los métodos definidos por el usuario para adaptar la ventana a menudo se pueden llamar desde dentro del propio marco o ventana, en lugar de código de la aplicación del usuario. El marco a menudo desempeña el papel del programa principal en la coordinación y secuenciación de actividad de la aplicación. Esta inversión de control da marcos el poder para servir como esqueletos extensibles. Los métodos suministrados por el usuario adaptar los algoritmos genéricos definidos en el marco para una aplicación particular. Inversión de control es una parte fundamental de lo que hace un marco diferente a una biblioteca. Una biblioteca es primordial para un conjunto de funciones que se pueden llamar, en estos días por lo general organizados en clases. Cada llamada hace algún trabajo y devuelve el control al cliente. . El uso de cierres de este tipo es muy conveniente, pero muchas lenguas no los admite. Otra forma de hacer esto es tener el marco definir eventos y tienen el código de cliente suscribirse a estos eventos. .NET Es un buen ejemplo de una plataforma que tiene las características del lenguaje para que las personas declaren eventos en widgets.
Referencia 1. D e f i n i c i 贸 n d e i n t e r fa z - Q u 茅 e s, S i g n i f i c a d o y C o n c ep t o http://definicion.de/interfaz/#ixzz3VAbUjmz7 Consultado el 07 de abril de 2015. 2. Daniel Diaz Suarez,2013. Definicion de inversi贸n de control. http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=Spring _Container_Inyeccion_Dependencias Consultado el 07 de abril de 2015. 3. http://www.devjoker.com/contenidos/articulos/165/Interfaces.aspx Consultado el 22 de marzo de 2015. 4. http://www.educa.una.py/politecnica/mod/page/view.php?id=2743 Consultado el 22 de marzo de 2015.
www