Cargando



Java/Spring – Herencia, Polimorfismo e Inyección de Dependencias – Parte 2

Este tutorial está dirigido a aquellos que conocen el lenguaje de programación Java y quieren expandir un poco en los conceptos que dominan.


jul 07 2014 19:39
Avanzado
jul 07 2014 22:58
Esta es la segunda parte de una serie de tutoriales enfocados en repasar los temas básicos del lenguaje Java para preparar al lector en el uso del Framework Spring. La primera parte de esta serie de tutoriales se puede conseguir aquí. En este tutorial estaremos hablando de Polimorfismo.

¿Qué es Polimorfismo?


La palabra polimorfismo proviene del griego “poli” que significa muchos y “morfo” que significa forma y en general a eso se refiere, a la capacidad de tomar múltiples formas. En la Programación Orientada a Objetos hablamos de variables o referencias que pueden tomar la forma de varios objetos diferentes.

Ahora que sabes de dónde proviene el concepto, vamos a tratar de relacionarlo con el lenguaje Java. Como vimos en el anterior tutorial, el concepto de “Herencia” nos permite establecer una relación de padre – hijo entre 2 clases particulares:


Imagen enviada

En este ejemplo la relación de herencia se da entre la clase Perro y la clase Animal, la clase Gato y la clase Animal y la clase Caballo y la clase Animal, nótese que entre Perro, Gato y Caballo no existe ninguna relación directa.

Usando este diagrama como base, podemos decir que un Perro ES un Animal, un Gato ES un Animal y un Caballo ES un Animal. Cuando se puede expresar la relación de esa manera en Java, podemos decir que una variable de la Clase Animal es polimórfica ya que puede tomar la forma de un Caballo, de un Gato o de un Perro.

En el anterior tutorial también vimos que TODAS las clases heredan directa o indirectamente de la clase Object, en este caso el diagrama queda ligeramente más completo si lo definimos así:


Imagen enviada

Y esto puede extenderse en múltiples niveles hacia abajo (Esencialmente el límite de niveles dependerá de tu JVM pero es normalmente superior a 40) Así que un Animal ES un Objeto, un Gato ES un Animal y un Gato (por transitividad) ES un Objeto.

Java permite entonces emplear referencias de clases en puntos elevados de esta estructura para apuntar a objetos que se encuentren debajo de ellos en la estructura. Por ejemplo:

public static void main(String[] args) {
	 Object o1 = new Object();
	 Animal a1 = new Animal();
	 Perro p = new Perro();
	 o1 = a1;
	 o1 = p;
	 a1 = p;
	 Object o2 = new Animal();
	 Object o3 = new Perro();
	 Animal a2 = new Perro();
	 boolean b1 = o1==o2;
	 boolean b2 = o1==o3;
	 boolean b3 = o1==a2;
	 if (b1||b2||b3) {
DoNothing();
	 }
}

Como se puede ver una variable Objeto puede hacer referencia a un objeto Animal o a un objeto Perro así como una variable Animal puede hacer referencia a un objeto Perro. La capacidad de polimorfismo derivada de esto nos lleva a poder manipular un objeto sin necesidad de saber qué objeto ES exactamente, veamos el siguiente método de ejemplo:

public static void doSomething(Animal a) {
a.getColorDePelo();
}

Cuando una aplicación emplea este método no sabe qué Animal está recibiendo por parámetro, puede ser un Perro, puede ser un Gato, puede ser un Caballo o más adelante un Topo, un Elefante, un Mandril o cualquier otra clase que sea de tipo Animal.

La clave de esta propiedad es que permite al programa utilizar métodos de ciertas subclases sin saber específicamente qué tipo de Animal es y de esa manera mantener un nivel de abstracción importante con respecto a las futuras implementaciones de la clase Animal.

En el próximo tutorial entraremos más a fondo con el tema del polimorfismo, veremos lo que son las interfaces y cómo programar enfocado en interfaces lo cual ayudará a comprender los siguientes tutoriales.

El tema se ha vuelto un poco más largo de lo que esperaba pero ¡no desesperéis! Es importante entender estos conceptos correctamente antes de empezar con la Inyección de Dependencias para entender cómo funciona Spring.

Espero que continuemos con estos tutoriales semana a semana, no olviden dejar sus comentarios ¡hasta la próxima!

¿Te ayudó este Tutorial?


1 Comentarios


Sergio Martinez Garcia
jul 09 2014 09:04
Polimorfismo me ha venido muy bien entenderlo ;)
No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X