Universidad de Ibagué, Coruniversitaria.
Programa Ingeniería de Sistemas

Programación Orientada a Objetos

Inicio

Generalidades

Ejercicios

Talleres

Proyecto

Ejercicios "amistosos"

 Polimorfismo

 En POO, el polimorfismo permite que diferentes objetos respondan de modo diferente al mismo mensaje. La mayor potencia del polimorfismo se adquiere cuando se utiliza en unión de la herencia.

Para poder utilizar polimorfismo se deben seguir algunas reglas:

1. Crear una jerarquía de clases con las operaciones importantes
    definidas por los métodos miembro declarados como abstractos (virtuales
    en C++) en la clase base.
2. Las implementaciones específicas de los métodos abstractos se
    deben hacer en las clases derivadas. Cada clase derivada puede tener
    su propia versión del método. Por ejemplo, la implementación del
    método dibujar() varía de un tipo de figura geométrica a otra (círculo,
    triángulo, cuadrado, etc.)
3. Las instancias de estas clases se manipulan a través de una
    referencia. Los métodos abstractos se invocan por una referencia de la
    clase base a la que se ha asignado una instancia de una clase derivada.
    Un método polimórfico se define para clases diferentes de una familia,
    pero el código real del método no se conecta o enlaza hasta el tiempo
    de ejecución.
 

_____________________________________

  <> Polimorfismo en C++

_____________________________________

// Ejemplo de un programa polimorfico
#include <iostream.h>
#include <conio.h>
#define cls clrscr()

class Barco{
public:
Barco(){
cout << "Creacion del objeto Barco. ";}
void muestra_Barco();
virtual void alarma()=0;
virtual void msgSOS(char *)=0;
private:
int eslora;
};

class BarcoPasaje : public Barco{
int num_camas;
public:
BarcoPasaje(){
cout << "Creacion del objeto BarcoPasaje\n";
}
void alarma(){
cout << "\n!!! Alarma del barco de pasajeros !!!";
}
void msgSOS(char a[20]){
alarma();
cout << "!!! S.O.S. SOS !!!" << a;
}
};

class PortaAvion : public Barco{
int num_aviones;
int tripulacion;
public:
PortaAvion(int marinos){
tripulacion = marinos;
cout << "Creacion del objeto PortaAvion\n";
}
void alarma(){
cout << "\n!!! Marineros a sus puestos !!!";
}
void msgSOS(char a[20]){
cout << "!!! S.O.S. SOS !!!" << a;
}
};

class Pesquero : public Barco{
double potencia;
int pescadores;
char nombre[20];
public:
Pesquero(int tripulacion){
pescadores = tripulacion;
strcpy(nombre,"Don PINGUINO");
cout << "Creacion del objeto Pesquero\n";
}
void alarma(){
cout << "\n!!! SOS desde el pesquero "<<nombre<<" !!!";
}
void msgSOS(char a[20]){
cout << "!!! S.O.S. SOS !!!" << a;
}
};

void main(void)
{
int i;
cls;
BarcoPasaje Crucero;
PortaAvion PortAvi(50);
Pesquero Pesca(5);
for(i=0;i<3;i++){
switch(i){
case 0: Crucero.alarma();
Crucero.msgSOS(" TITANIC");break;
case 1: PortAvi.alarma();
PortAvi.msgSOS(" PortaAviones HERCULES");break;
case 2: Pesca.alarma();
Pesca.msgSOS(" Pesquero");
}cout << "\n";
}
getch();
}

_____________________________________

  1. Utilice una jerarquía de empleados (por ej. Profesor, Secretaria, Vendedor, Mecánico, Programador,  etc.) y defina el comportamiento común que deben implementar las Clases.

  2. Implemente una jerarquía de la Clase Figura (por ej. Cuadrado, Rectangulo, Triangulo y Circulo) y codifique el comportamiento común calculArea().

  3. Escriba un programa polimórfico que implemente el comportamiento común entre las Clases Alumno, DePresencial y DeDistancia.

 

_____________________________________

  <> Polimorfismo en JAVA

_____________________________________

 Implementación de una interfaz:

 Java incorpora una construcción del lenguaje llamada interface, que permite declarar un conjunto de constantes y de cabeceras de métodos abstractos. Estos deben implementarse en las clases y constituyen la interfaz de la clase. En cierto modo, es una forma de declarar que todos los métodos de una clase son públicos y abstractos, con lo que se especifica el comportamiento común que van a tener las clases que implementen la interfaz. La definición de una interfaz es similar a la de una clase; en la cabecera se utiliza la palabra reservada interface en vez de class.

 La interfaz especifica el comportamiento común que tiene un conjunto de clases. Dicho comportamiento tiene que ser implementado en cada una de las clases, es lo que se entiende como implementación de una interfaz. Se utiliza una sintaxis similar a la derivación de una clase, con la palabra reservada implements en lugar de extends.

 El siguiente ejemplo aplica  conceptos de Polimorfismo e Interface:

Considere una jerarquía de barcos, todos tienen como comportamiento común msgSOS() y alarma(), que se implementan en las Clases BarcoPasaje, PortaAvion y Pesquero.

// Navios.java

interface Barco{
void alarma();
void msgSOS(String av);
}

class BarcoPasaje implements Barco{
private int eslora;
private int numerocamas = 100;

public BarcoPasaje(){
System.out.println("Creacion del objeto BarcoPasaje");
}
public void alarma(){
System.out.println("!!! Alarma del Barco Pasajero !!!");
}
public void msgSOS(String av){
alarma();
System.out.println("!!! S.O.S SOS !!!" + av);
}
}

class PortaAvion implements Barco{
private int aviones = 18;
private int tripulacion;

public PortaAvion(int marinos){
tripulacion = marinos;
System.out.println("Creacion del objeto PortaAvion");
}
public void alarma(){
System.out.println("!!! Marineros a sus puestos !!!");
}
public void msgSOS(String av){
System.out.println("!!! S.O.S SOS !!!" + av);
}
}

class Pesquero implements Barco{
private int eslora;
private double potencia;
private int pescadores;
String nombre="Don Pinguino";

public Pesquero(int tripulacion){
pescadores = tripulacion;
System.out.println("Creacion del objeto Pesquero\n");
}
public void alarma(){
System.out.println("!!! SOS desde el pesquero "+nombre+"!!!");
}
public void msgSOS(String av){
System.out.println("!!! S.O.S SOS !!!" + av);
}
}

public class Navios{
public static void main(String args[]){
BarcoPasaje Barcopas = new BarcoPasaje();
PortaAvion PortAvi = new PortaAvion(50);
Pesquero Pesca = new Pesquero(10);
Barco vectorBarco[];
vectorBarco = new Barco[3];
vectorBarco[0] = Barcopas;
vectorBarco[1] = PortAvi;
vectorBarco[2] = Pesca;
for(int i = 0;i < vectorBarco.length;i++){
vectorBarco[i].alarma();
switch(i){
case 0 : vectorBarco[i].msgSOS(" Barco Titanic");break;
case 1 : vectorBarco[i].msgSOS(" PortaAviones Hercules");break;
case 2 : vectorBarco[i].msgSOS(" Pesquero");
}
System.out.println("\n");
}
}
}

  1. Usted es el encargado de desarrollar un simulador de vuelo que tendrá salidas gráficas elaboradas. Explique por qué la programación polimórfica sería especialmente efectiva para éste problema. 

  2. Utilice una jerarquía de empleados (por ej. Profesor, Secretaria, Vendedor, Mecánico, Programador,  etc.) y defina el comportamiento común que deben implementar las Clases.

  3. Implemente una jerarquía de la Clase Figura (por ej. Cuadrado, Rectangulo, Triangulo y Circulo) y codifique el comportamiento común CalculArea().

  4. Escriba un programa polimórfico que implemente el comportamiento común entre las Clases Alumno, DePresencial y DeDistancia.

 


 


 


Inicio | Biografía | Cursos | Para pensar... | Para reflexionar... | Para reir | Enlaces

 
Profesor Gustavo Martínez Villalobos
Email: gmartin@nevado.cui.edu.co
Facultad de Ingeniería de Sistemas, Coruniversitaria
Ibagué, Tolima, COLOMBIA