Ejemplo inversión de control(Sin Spring)

 Hoy vamos a crear un ejemplo práctico aplicando el concepto de inversión de control e inyección de dependencia, pero sin utilizar Spring. Si todavía no has revisado la entrada sobre inversión de control, te recomiendo que lo hagas, antes de continuar con el ejemplo.

Continuando, ingresa al  IDE Eclipse para iniciar a programar la practica  de hoy.

Ejemplo

El ejemplo consiste en crear un programa que permita crear objetos de tipo Computador, a su vez Computador estará formado de un Procesador, por último, que permita cambiar de Procesador aplicando la inversión de control.

Vamos a crear 3 clases Java, Computador, Procesador y TestIoC respectivamente, donde TestIoC será la clase principal(implementará el método main).

Clase Procesador

         Definimos un único método llamado procesar(), que imprime un mensaje por consola. 

Clase Procesador

Clase Computador

Creamos dos atributos, precio y procesador, además un método verDetalles() que imprime información de la clase. 

Clase Computador

Clase TestIoC

Crear un objeto computador y ver su información, ten presente, que al crear el objeto computador, también se crea el objeto Procesador.

Clase TestIoC

Resultado


Hasta este punto, hemos implementado el ejemplo de la forma tradicional, todavía no hemos aplicado el concepto de inversión de control ni de inyección de dependencia. A partir de la siguiente sección inicia la practica de inversión de control.

Inversión de control

El primer paso es tener claro que proceso es el que se va a invertir, para el ejemplo anterior, se invertirá el control respecto a la creación del objeto Procesador definido en la clase Computador.

¿Qué proceso se va a invertir?

La creación del objeto Procesador definido en la clase Computador

¿Qué partes participan en la inversión de control?

La clase Computador y la clase Principal TestIoC.

Implementación

Hasta el momento, la clase Computador es quien construye el objeto Procesador, observe la siguiente imagen:


Puede notar como la Clase Computador se encarga de crear el objeto procesador (new Procesador ()), ósea, Computador tiene el control sobre el proceso que se desea invertir.

Ahora vamos a realizar algunos cambios en la clase Computador para invertir el control  respecto a creación del objeto Procesador, hacemos lo siguiente: 


La clase Computador sigue teniendo los mismos atributos, el cambio se dio  en el atributo procesador, ya que ahora se define como una dependencia, ya no se crea el objeto como tal (no utiliza new Procesador ())

Con esta implementación, la clase Computadora tendrá una dependencia de Procesador, la que se proveerá(inyectar) a través del constructor.

¿Entonces, quién tiene ahora el control  para crear el objeto procesador?

Ya hemos logrado que la clase Computador no tenga el control para crear el objeto Procesador, entonces, a quien delegamos ahora ese proceso. El control se cederá a la clase TestIoC , quien tiene el método main.

La clase TestIoC  será quien se encargue de crear  y configurar el objeto Procesador, a esta altura ya hemos invertido el control. Observe la imagen:


En la imagen anterior, la aplicación principal es quien crea el objeto procesador e inyecta  al objeto computador, entonces, la aplicación principal ahora tiene el control sobre el proceso de crear el objeto procesador y no la clase Computador, como ocurría antes. 

¿Qué ventajas tiene aplicar el concepto de inversión de control?

Permite desacoplar el código, es decir, tomando el ejemplo anterior, si se desea cambiar de procesador a la computadora, lo que debe hacer es crear una clase que extienda de Procesador y utilizarla como dependencia para el computador.

Vamos a cambiar de procesador para ejemplo anterior

Clase ProcesadorIntel

Creamos la clase ProcesadorIntel que extienda de Procesador y sobrescribimos el mensaje del método procesar.

Cambiar de implementación

Para cambiar el tipo de dependencia, lo único que debe hacer es cambiar el objeto que se inyecta al objeto computador, utilizamos la clase recientemente creada ProcesadorIntel.

Con un simple cambio, hemos cambiado el tipo de dependencia, y todo esto sin modificar ni una sola línea en la clase Computador. 

La inversión de control nos permite cambiar el tipo implementación de forma flexible, sin alterar un componente base de la aplicación.

¡ Nos vemos pronto 👋👍!

Comentarios

Entradas populares de este blog

JWT (Json Web Token)

Instalar Java Developmet Kit(JDK)

Curso de Spring