Polimorfismo
Enviado por hhmmmmgg • 28 de Diciembre de 2014 • 2.689 Palabras (11 Páginas) • 297 Visitas
INFORME SOBRE POLIMORFISMO, HERENCIA, CLASES Y OBJETOS, ARREGLOS (ARRAY)
1) POLIMORFISMO:
Para empezar con esta entrada, se ha de decir que el término “Polimorfismo” es una palabra de origen griego que significa “muchas formas”. Este término se utiliza para “referirse a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos“.
La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice, más allá de las obvias diferencias sintácticas.
Por ejemplo, en un lenguaje de programación que cuenta con un sistema de tipos dinámico (en los que las variables pueden contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk no se requiere que los objetos que se utilizan de modo polimórfico sean parte de una jerarquía de clases.
El Polimorfismo es uno de los 4 pilares de la programación orientada a objetos junto con la Abstracción, Encapsulación y Herencia. Para entender que es el polimorfismo es muy importante que tengas bastante claro el concepto de la Herencia.
Como esta definición quizás sea algo difícil de entender, vamos a explicarla con el ejemplo que pusimos en la entrada de la herencia en la que queríamos simular el comportamiento que tendrían los diferentes integrantes de la selección española de fútbol; tanto los Futbolistas como el cuerpo técnico (Entrenadores, Masajistas, etc…). Para este ejemplo nos vamos a basar en el siguiente diagrama de clases:
En este ejemplo vamos a tener una clase padre (SelecciónFutbol) en la que tendremos los atributos y métodos comunes a todos los integrantes que forman la selección española de fútbol ( Entrenadores, Masajistas, etc.) y en ella se van a implementar los métodos del comportamiento “genérico” que deben de tener todos los integrantes de la selección. Como ya dijimos en la entrada de la herencia, la herencia no es más que sacar “factor común” del código que escribimos, así que los atributos y métodos de la clase SeleccionFutbol los tendrán también los objetos de las clases Futbolista, Entrenador y Masajista. Antes de seguir vamos a mostrar el código de la clase “SeleccionFutbol” para ver algunas peculiaridades:
Selección de futbol
}
package Polimorfismo;
public abstract class SeleccionFutbol {
protected int id;
protected String nombre;
protected String apellidos;
protected int edad;
public SeleccionFutbol() {
}
public SeleccionFutbol(int id, String nombre, String apellidos, int edad) {
this.id = id;
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public void viajar() {
System.out.println("Viajar (Clase Padre)");
}
public void concentrarse() {
System.out.println("Concentrarse (Clase Padre)");
}
// IMPORTANTE -> METODO ABSTRACTO => no se implementa
// en la clase abstracta pero si en la clases hijas
public abstract void entrenamiento();
public void partidoFutbol() {
System.out.println("Asiste al Partido de Fútbol (Clase Padre)");
}
Lo primero que nos debe de llamar la atención al ver este código es que utilizamos dos veces la palabra reservada “abstract“. Esta palabra nos indica que la clase “SeleccionFutbol” es una clase abstracta y las clases abstractas no se pueden instanciar, por tanto nunca podremos hacer un “new SeleccionFutbol()”. Otra cosa que vemos es que también utilizamos la palabra reservada abstract en un método (en el método entrenamiento). Esto quiere decir que todas las clases hijas de la clase “SeleccionFubol” tienen que tener implementado ese método obligatoriamente. Por tanto con esto que se acaba de contar y diciendo que la palabra “Polimorfismo” significa “muchas formas”, podéis deducir que la clase “SeleccionFutbol” es una clase que puede adoptar diferentes formas y en este ejemplo puede adoptar las formas de “Entrenador” y “Masajista”
Entrenador
package Polimorfismo;
public class Entrenador extends SeleccionFutbol {
private int idFederacion;
public Entrenador() {
super();
}
public Entrenador(int id, String nombre, String apellidos, int edad, int idFederacion) {
super(id, nombre, apellidos, edad);
this.setIdFederacion(idFederacion);
}
public int getIdFederacion() {
return idFederacion;
}
public void setIdFederacion(int idFederacion) {
this.idFederacion = idFederacion;
}
@Override
public void entrenamiento() {
System.out.println("Dirige un entrenamiento (Clase Entrenador)");
}
@Override
public void partidoFutbol() {
System.out.println("Dirige un Partido (Clase Entrenador)");
}
public void planificarEntrenamiento() {
System.out.println("Planificar un Entrenamiento");
}
}
Masajista
package Polimorfismo;
public class Masajista extends SeleccionFutbol {
private String titulacion;
private int aniosExperiencia;
public Masajista() {
super();
}
public Masajista(int id, String nombre, String apellidos, int edad, String titulacion, int aniosExperiencia) {
super(id, nombre, apellidos, edad);
this.titulacion = titulacion;
this.aniosExperiencia = aniosExperiencia;
}
public String getTitulacion() {
return titulacion;
}
...