Cargando



Java / Spring - Herencia, Polimorfismo e Inyección de Dependencias

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 01 2014 16:21
Avanzado
jul 01 2014 16:35
Estaremos viendo 2 conceptos propios de la programación en Java (Herencia y Polimorfismo) para prepararnos para comprender un concepto más avanzado llamado Inyección de Dependencias que es típico de Frameworks como Spring y Hibernate que son comúnmente utilizados en la actualidad y de los cuales estaremos hablando en próximos tutoriales.

Hablemos de Herencia


No, no se refiere a esos millones que te dejó tu tío rico cuando finalmente se murió, es un concepto típico de la programación en Java y consiste en “heredar” campos y métodos pertenecientes a una superclase dentro de una subclase.

Conceptos básicos de herencia:
  • Una clase que es derivada de otra clase se denomina subclase (o clase extendida, clase hija o clase derivada). Asimismo, la clase de la cual la subclase se deriva se llama superclase (también clase base o clase padre). A lo largo de este tutorial y tutoriales siguientes estaré usando los términos subclase y superclase.
  • En Java específicamente, exceptuando a la clase Object, TODAS las clases heredan directamente a una ÚNICA superclase (herencia simple). En caso de no definir explícitamente la superclase, toda clase hereda de forma implícita a la clase Object.
  • Una clase puede heredar de otra clase que hereda de otra clase que hereda de otra clase hasta heredar de la clase Object, se dice entonces que dicha clase “desciende” de todas las clases en la jerarquía hasta la clase Object.
Tratemos de simplificar esto con un ejemplo:

Supongamos que tenemos las siguientes 3 clases en el paquete herencia:


package herencia;
public class Perro {
	 private int numeroDePatas;
	 private String colorDePelo;
	 private String raza;
	 public int getNumeroDePatas() {
			 return numeroDePatas;
	 }
	 public void setNumeroDePatas(int numeroDePatas) {
			 this.numeroDePatas = numeroDePatas;
	 }
	 public String getColorDePelo() {
			 return colorDePelo;
	 }
	 public void setColorDePelo(String colorDePelo) {
			 this.colorDePelo = colorDePelo;
	 }
	 public String getRaza() {
			 return raza;
	 }
	 public void setRaza(String raza) {
			 this.raza = raza;
	 }
	 public void ladrar() {
			 System.out.println("El perro hace GUAU");
	 }
}

package herencia;
public class Gato {
	 private int numeroDePatas;
	 private String colorDePelo;
	 private String raza;
	 public int getNumeroDePatas() {
			 return numeroDePatas;
	 }
	 public void setNumeroDePatas(int numeroDePatas) {
			 this.numeroDePatas = numeroDePatas;
	 }
	 public String getColorDePelo() {
			 return colorDePelo;
	 }
	 public void setColorDePelo(String colorDePelo) {
			 this.colorDePelo = colorDePelo;
	 }
	 public String getRaza() {
			 return raza;
	 }
	 public void setRaza(String raza) {
			 this.raza = raza;
	 }
	 public void maullar() {
			 System.out.println("El gato hace MIAU");
	 }
}

package herencia;
public class Caballo {
	 private int numeroDePatas;
	 private String colorDePelo;
	 private String raza;
	 public int getNumeroDePatas() {
			 return numeroDePatas;
	 }
	 public void setNumeroDePatas(int numeroDePatas) {
			 this.numeroDePatas = numeroDePatas;
	 }
	 public String getColorDePelo() {
			 return colorDePelo;
	 }
	 public void setColorDePelo(String colorDePelo) {
			 this.colorDePelo = colorDePelo;
	 }
	 public String getRaza() {
			 return raza;
	 }
	 public void setRaza(String raza) {
			 this.raza = raza;
	 }
	 public void relinchar() {
			 System.out.println("El caballo hace IIIIGGGHHHH");
	 }
}

Se puede observar que las 3 clases generan 3 tipos de objetos diferentes pero con múltiples características similares, de hecho, son exactamente iguales exceptuando los métodos ladrar, maullar y relinchar. Por lo tanto, empleando el concepto de herencia, sería apropiado reescribir las características comunes en una superclase y modificar cada subclase de forma que adicionen solamente el método correspondiente de la siguiente manera:

[color=#a9a9a9]1[/color]

Creamos la superclase Animal:

package herencia;
public class Animal {
	 private int numeroDePatas;
	 private String colorDePelo;
	 private String raza;
	 public int getNumeroDePatas() {
			 return numeroDePatas;
	 }
	 public void setNumeroDePatas(int numeroDePatas) {
			 this.numeroDePatas = numeroDePatas;
	 }
	 public String getColorDePelo() {
			 return colorDePelo;
	 }
	 public void setColorDePelo(String colorDePelo) {
			 this.colorDePelo = colorDePelo;
	 }
	 public String getRaza() {
			 return raza;
	 }
	 public void setRaza(String raza) {
			 this.raza = raza;
	 }
}

[color=#a9a9a9]2 [/color]
Modificamos las 3 subclases existentes para que hereden de la clase Animal (usando la palabra clave “extends”) y sólo agreguen el método único:

package herencia;
public class Perro extends Animal {
	 public void ladrar() {
			 System.out.println("El perro hace GUAU");
	 }
}

package herencia;
public class Gato extends Animal {
	 public void maullar() {
			 System.out.println("El gato hace MIAU");
	 }
}

package herencia;
public class Caballo extends Animal {
	 public void relinchar() {
			 System.out.println("El caballo hace IIIIGGGHHHH");
	 }
}

De esta manera culminamos el tema de “Herencia” en Java, próximamente seguiremos con el concepto de “Polimorfismo” el cual está íntimamente relacionado con “Herencia” y nos ayudará a entender el concepto de “Inyección de Dependencias” para poder empezar a entender el Framework “Spring”.

No olviden dejar sus comentarios, hasta la próxima!

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X