El documento explica el polimorfismo en programación, el cual permite que objetos de diferentes subclases sean tratados como instancias de una superclase común. Esto simplifica la programación al permitir que métodos operen de manera genérica sobre objetos de la jerarquía de herencia. El polimorfismo ocurre cuando un método es invocado a través de una variable de la superclase, llamando internamente a la versión correcta del método de la subclase correspondiente.
Los avatares para el juego dramático en entornos virtuales
Laboratorio de polimorfismo
1. POLIMORFISMO
El polimorfismo permite la programación en forma general, en vez de la programación en forma específica. En
particular, permite escribir programas que procesen objetos que compartan la misma superclase (ya sea de
manera directa o indirecta) como si todos fueran objetos de la superclase; esto puede simplificar la
programación.
Con el polimorfismo podemos diseñar e implementar sistemas que puedan extenderse con facilidad; pueden
agregarse nuevas clases con sólo modificar un poco (o nada) las porciones generales del programa, siempre
y cuando las nuevas clases sean parte de la jerarquía de herencia que el programa procesa en forma
genérica. Las únicas partes de un programa que deben alterarse son las que requieren un conocimiento
directo de las nuevas clases que agregamos a la jerarquía.
Ejemplo de polimorfismo
Si la clase Rectángulo se deriva de la clase Cuadrilátero, entonces un objeto Rectángulo es una versión más
específica de un objeto Cuadrilátero. Cualquier operación (por ejemplo, calcular el perímetro o el área) que
pueda realizarse en un objeto Cuadrilátero también puede realizarse en un objeto Rectángulo. Estas
operaciones también pueden realizarse en otros objetos Cuadrilátero, como Cuadrado, Paralelogramo y
Trapezoide. El polimorfismo ocurre cuando un programa invoca a un método a través de una variable de la
superclase Cuadrilátero; en tiempo de ejecución, se hace una llamada a la versión correcta del método de la
subclase, con base en el tipo de la referencia almacenada en la variable de la superclase.
Un objeto de una subclase puede tratarse como un objeto de su superclase, lo cual permite varias
manipulaciones interesantes. Un programa puede crear un arreglo de variables de la superclase, que se
refieran a objetos de muchos tipos de subclases. Esto se permite, ya que cada objeto de una subclase es un
objeto de su superclase. No se puede tratar a un objeto de la superclase como un objeto de cualquiera de sus
subclases, porque un objeto superclase no es un objeto de ninguna de sus subclases. La relación “es un” se
aplica sólo hacia arriba por la jerarquía, de una subclase a sus superclases directas (e indirectas), pero no
viceversa (es decir, no hacia debajo de la jerarquía, desde una superclase hacia sus subclases).
Una referencia a la superclase puede usarse para invocar sólo a los métodos declarados en la superclase; si
se trata de invocar métodos que soló pertenezcan a la subclase, a través de una referencia a la superclase, se
producen errores de compilación. Si un programa necesita realizar una operación específica para la subclase
en un objeto de la subclase al que se haga una referencia mediante una variable de la superclase, el
programa primero debe convertir la referencia a la superclase en una referencia a la subclase, mediante una
técnica conocida como conversión descendente.
Lenguaje de
programación
Técnica profesional en desarrollo de software
Profesor: Andrés Herrera R. Mail: jherrera@eam.edu.co
Laboratorio
Polimorfismo
Nombre:_________________________________________________________________________
2. 2
PRÁCTICA
1- cree un proyecto (paquete com.eam.lenguaje) la clase PruebaPolimorfismo con su respectivo método
<<main>>.
2- Programe el método toString de la clase Vehiculo usando el método format de String. Tenga en cuenta la
siguiente tabla:
CONVERSORVALOR
%b Booleano
%h Hashcode
%s Cadena
%c Caracter unicode
%d Entero decimal
%o Entero octal
%x Entero hexadecimal
%f Real decimal
%e Real notación científica
%g Real notación científica o decimal
%a Real hexadecimal con mantisa y exponente
%t Fecha u hora
Tabla 1. Conversor del método format.
El método <<format>> de la clase String permite concatenar diferentes elementos en una cadena. La
concatenación que ofrece este método permite que todos los elementos que se agreguen a la cadena queden
apuntando a la misma dirección de memoria. Como se puede notar en la tabla 1, para cada tipo de dato se
necesita de una letra diferente. Ver tejemplo en http://developando.com/blog/java-formatear-cadenas-string-format
3- Programe el método <<toString>> en la clase VehiculoAereo, use el método format de la clase String.
4- Programe los métodos toString para los objetos Cohete, Submarino, Avion y Bicicleta.
5- Declare he inicialice en el método main de la clase PruebaPolimorfismo arreglos de objetos que contengan:
3 Submarinos, 3 Aviones, 3 Bicicletas y 1 Cohete. Use el método mostrar de las clases anteriores para
verificar el contenido de cada una de ellas.
6- Cree un arreglo de 10 posiciones en el método main de la clase PruebaPolimorfismo y agregue los objetos
creados en el punto anterior.
¿Por qué cree que es posible agregar objetos de diferente tipo en un mismo arreglo?
7- Verifique que sucede si agrega un objeto tipo Vehiculo en una instancia tipo VehiculoTerrestre.
8- Verifique como es el comportamiento de los métodos de los objetos contenidos en el arreglo. Que necesita
para usar un método de una de las subclases específicas. Use el método getPlanetaDestino de la clase
cohete para mostrar los planetas que son destino de todos los cohetes.
3. 3
9- Programe un método que reciba como parámetro un vehículo y retorne el número de veces que se repite la
misma instancia dentro de la lista. Ejemplo: si en la lista existen 6 submarinos y entra como parámetro un
vehículo tipo submarino, el valor retornado debe ser 6.
10- Programe un método que retorne el tipo de vehículo que tiene más llantas.
11- Programe un método que retorne el nombre de la instancia que tiene más elementos en la lista.
Ejemplo del método toString en una super clase
@Override
public String toString() {
return "Persona{" + "nombre=" + nombre + ", apellido=" + apellido + ", anio_nacimiento=" + anio_nacimiento + '}'+"n";
}
Ejemplo de imprimir el arrayList en un main
private static void imprimeArrayListProfesor(ArrayList<Profesor> lista) {
for (Profesor elemento : lista) {
System.out.print("Profesor: " + elemento);
}
}
ENTREGABLE
Enviar al correo jherrera@eam.edu.co el proyecto comprimido en zip la Practica realizada en su totalidad.
BIBLIOGRAFÍA
Deitel, P. J. & Deitel, H. M. (2012). Como Programar en java. Novena edición. México: Prentice Hall.