You are on page 1of 18

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P Ingeniería de Sistemas e Informática

Semana 9
POLIMORFISMO

7 de Mayo 2014
ALGORITMICA II
Luis Guerra Grados
CONTENIDO
Polimorfismo
Tipos de Polimorfismo
Ejemplo
Referencias

Polimorfismo
Tercer pilar de la POO.
Cuando los métodos de una superclase y
sus redefiniciones en sus subclases se
comportan adecuadamente; y que el mismo
mensaje que se envía a una variedad de
objetos tiene “muchas formas” de
resultados.
Tipos de Polimorfismo
 Inclusión
 Paramétrico
 Redefinición
 Sobrecarga
[Anthony Sintes en “Aprendiendo Programación
Orientada a objetos”, 2002]
Tipos de Polimorfismo
Inclusión:
Polimorfismo puro, da un tratamiento
genérico a los objetos relacionados.
Ej.
public void haceHablar(ObjetoIntrovertido obj){
System.out.pritln(obj.hablar());}

public void haceHablar(ObjetoExtrovertido obj){
System.out.pritln(obj.hablar());}

Tipos de Polimorfismo
Paramétrico:
El Polimorfismo Paramétrico, permite crear
métodos y tipos genéricos. Similar al
polimorfismo de inclusión, los métodos y
tipos genéricos dan la posibilidad de
codificar algo una vez y que esto trabaje
con muchos tipos diferentes de argumentos.
Según algunos Java no reconoce
polimorfismo paramétrico hasta Java 1.3.
C++ simula implementarlo.
Tipos de Polimorfismo
Redefinición:
Cuando las subclases redefinen los
métodos.

Ejemplo:
Vaca, cerdo son animales que tienen peso y no hablan pero
si dicen algo o rumian es el caso de la vaca (muu), o gruñe,
caso del cerdo (oinc). Crear una instancia de vaca por
ejemplo daisy, una instancia de cerdo por ejemplo porky.
Usando polimorfismo redefinir un método para que al
seleccionar un animal de los indicados se diga algo de uno de
ellos
Ejemplo
public abstract class Animal {
public abstract String dice();
}

public class Vaca extends Animal{

public String dice(){
return "Vaca dice: Muu";
}

}
Ejemplo
import java.util.Scanner;
public class Polimorfismo1 {
public static void main(String[] args) {
int op=0;
Scanner entrada=new Scanner(System.in);
do{
System.out.println(" Menu");
System.out.println("1. Vaca dice");
System.out.println("2. Cerdo dice");
System.out.println("3. Salir");
System.out.println(" Seleccione opcin: ");

op=entrada.nextInt();
switch(op){
case 1: Vaca daisy=new Vaca();
System.out.println(daisy.dice());
break; }
}while(op!=3);
} }
Tipos de Polimorfismo
Sobrecarga:
Polimorfismo ad-hoc, permite utilizar el
mismo nombre de método para diferentes
métodos. Cada método difiere solamente en
la cantidad y tipo de sus parámetros.

Veamos un ejemplo:
Que utilice algunos tipos de polimorfismo.
Ejemplo
Dada una clase base Empleado, y sus clases
derivadas: EmpleadoPorComision, EmpleadopoHoras,
donde cada subclase proporciona implementación del
método: calcularPago().
EmpleadoPorHora, calcula multiplicando las horas
trabajadas por el precio por hora.
EmpleadoPorComision, se calcula, con un salario base
más un bono por cada unidad vendida.
Cada subclase agrega algunos métodos propios.
Ejemplo
public abstract class Empleado {
private String nombre; private String apellido;
private double salario;
public Empleado(String nombre, String apellido, double salario){
this.nombre=nombre; this.apellido=apellido;
this.salario=salario; }
public double getSalario(){
return salario; }
public String getNombre(){
return nombre; }
public String getApellido(){
return apellido; }
public abstract double calcularPago();
public void imprimirRecibo(){
System.out.println("Pago: "+apellido+", "+nombre+"
S/."+calcularPago());
}
}
public class EmpleadoPorComision extends Empleado{
private double comision; // bono por unidad vendida
private int unidades; // # de unidades vendidas

public EmpleadoPorComision(String nombre, String apellido, double
salario, double comision){
super(nombre,apellido,salario);
this.comision=comision;
}
public void sumarventas(int unidades){
//this.unidades=unidades;
this.unidades=this.unidades+unidades;
}
public int getVentas(){
return unidades;
}
public double calcularPago(){
return getSalario()+(comision*unidades);
}
}
Ejemplo
Ejemplo
public class EmpleadoPorHoras extends Empleado{
private int horas; // # de horas trabajadas
public EmpleadoPorHoras(String nombre, String apellido, double
salario){
super(nombre,apellido,salario);
}
public void sumarHoras(int horas){
this.horas=this.horas+horas;
}
public int getHoras(){
return horas;
}
public double calcularPago(){
return getSalario()*horas;
}
}
public class Nomina {
private int horas_totales;
private int ventas_totales;
private double pago_total;
public void registrarInfoEmpleado(EmpleadoPorComision
emp){
ventas_totales=ventas_totales+emp.getVentas();
}
public void registrarInfoEmpleado(EmpleadoPorHoras emp){
horas_totales=horas_totales+emp.getHoras();
}
public void pagarEmpleados(Empleado[] emps){
for(int i=0;i<emps.length;i++){
Empleado emp=emps[i];
pago_total=pago_total+emp.calcularPago();
emp.imprimirRecibo();
}
}
}
Ejemplo
Ejemplo
public class ControladorNomina {
public static void main(String[] args) {
// Crear un sistema de nomina
Nomina nomina=new Nomina();
// Crear y actualizar algunos empleados
EmpleadoPorComision emp1=new
EmpleadoPorComision("Urias","Sotelo",500.00,10);
EmpleadoPorComision emp2=new
EmpleadoPorComision("Betsabe","Gamarra",400.00,5);
emp1.sumarventas(7); emp2.sumarventas(5);
EmpleadoPorHoras emp3=new
EmpleadoPorHoras("Joab","Grados",2.50);
EmpleadoPorHoras emp4=new
EmpleadoPorHoras("Elvira","Romero",2.00);
emp3.sumarHoras(40); emp4.sumarHoras(45);


Ejemplo
// Utilizar metodos sobrecargados
nomina.registrarInfoEmpleado(emp1);
nomina.registrarInfoEmpleado(emp2);
nomina.registrarInfoEmpleado(emp3);
nomina.registrarInfoEmpleado(emp4);

// Juntar los empleados en un arreglo
Empleado[] emps=new Empleado[4];
emps[0]=emp1; emps[1]=emp2;
emps[2]=emp3; emps[3]=emp4;
nomina.pagarEmpleados(emps);
}
}


[1]. Deitel & Deitel. Java como programar. 2008. Edit. Pearson
Prentice Hall. México.

[2]. Francisco, Javier Ceballos. Java 2. Curso de Programación.
2000 . Edit. Alfa Omega Ra-ma

[3]. Douglas Bell, Mike Parr. Java para estudiantes. 2003. Edit.
Pearson.

[4]. Sintes, Anthony. Aprendiendo Programaciòn Orientada a
Objetos. 2002. Edit. Pearson Educación. Mèxico.

[5]. Coronel, Eric 2009. Editora Macro. Perú.

[6]. Berzal, Fernando. Programación Orientada Objetos.
Introducción Java.

REFERENCIAS