Polimorfismo

15
Polimorfism o Lenguajes de Programación II Corporación Universitaria del Caribe CECAR

Transcript of Polimorfismo

Page 1: Polimorfismo

PolimorfismoLenguajes de Programación IICorporación Universitaria del Caribe CECAR

Page 2: Polimorfismo
Page 3: Polimorfismo

Polimorfismo (Definición)

Poly morphos

métodos• mismo nombre, diferente implementación

objetos

• actúen de modo diferente en respuesta a una misma llamada.

Código• Reutilizable• Fácil de adaptarlo

Múltiples formas

Page 4: Polimorfismo

El polimorfismo va ligado a la herencia: objetos jerárquicamente relacionados responden en forma diferente al mismo mensaje

Page 5: Polimorfismo

Polimorfismo VS Sobrecarga

Sobrecarga Polimorfismo

se resuelve en tiempo de ejecución

(dependiendo de la clase a la que

pertenece el objeto que hace el llamado)

se da entre clases distintas.

se resuelve en tiempo de enlazado (cuando se esta construyendo

el ejecutable)

se da siempre en una sola clase

Page 6: Polimorfismo

Método Abstracto

Método Abstracto

es un método declarado en

una clase para el cual esa clase no

proporciona la implementación

(el código).

Sin códigose declaran pero no se definen.

No tendrá cuerpo y

terminará en punto y coma

Page 7: Polimorfismo

Clase abstracta

Clase Abstracta

Tiene al menos un método

abstracto Declara la existencia de métodos pero

no la implementaci

ón

Puede contener

métodos no-abstractos

pero al menos uno de los

métodos debe serlo

no se puede instanciar pero si se

puede heredarCuando una clase contiene

un método abstracto tiene que declararse

abstracta

no pueden tener

métodos privados (no se podrían

implementar) ni tampoco estáticos.

tiene que derivarse

obligatoriamente

Una clase que extiende a una clase abstracta

debe implementar los métodos abstractos o

volverlos a declarar como abstractos

Page 8: Polimorfismo
Page 9: Polimorfismo

Implementaciónpublic abstract class figura {

protected String nombre;protected int color;protected int grosorBorde;

public String getNombre(){return this.nombre;}public void setNombre(String n){this.nombre=n;}

public int getColor(){return this.color;}

public void setColor(int c){this.color=c;}

public int getGrosorBorde(){return this.grosorBorde;}

public void setGrosorBorde(int g){this.grosorBorde=g;}

public abstract void dibujar();}

public abstract class figura2D extends figura {

public abstract int calcularArea();

public abstract int calcularPerimetro();}

public abstract class figura3D extends figura {

public abstract int calcularVolumen();}

Page 10: Polimorfismo

InterfaceIn

terf

ace

una interface es una clase abstracta pura, es decir una clase donde todos los métodos son abstractos

Si la interface va a tener atributos, éstos deben llevar las palabras reservadas static final y con un valor inicial ya que funcionan como constantes.

La interface puede definirse public o sin modificador de acceso

Todos los métodos que declara una interface son siempre public

Una clase implementa una o más interfaces (separadas con comas ",") con la palabra reservada implements.

Page 11: Polimorfismo

Ejemplo Interface interface nombre_interface {

    tipo_retorno nombre_metodo ( lista_argumentos ) ;    . . . }

Por ejemplo: interface InstrumentoMusical {

    void tocar();    void afinar();    String tipoInstrumento();}

sirven de guía para definir un determinado concepto (clase) y lo que debe hacer, pero sin desarrollar un mecanismo de solución

Page 12: Polimorfismo

Implementación de una interface/** * Declaracion de la interfaz Modificacion * @author A. Garcia-Beltran * Ultima revision: noviembre, 2007*/public interface Modificacion { void incremento(int a);}

/** * Declaracion de la clase Acumulador * @author A. Garcia-Beltran * Ultima revision: noviembre, 2007 */public class Acumulador implements Modificacion { private int valor; public Acumulador (int i) { valor = i; } public int daValor () { return valor; } public void incremento (int a) { valor += a; } }

/** * Demostracion de la clase Acumulador * @author A. Garcia-Beltran * Ultima revision: noviembre, 2007*/public class PruebaAcumulador { public static void main (String [] args) { Acumulador p = new Acumulador(25); p.incremento(12); System.out.println(p.daValor()); }}

Page 13: Polimorfismo

Formas de Polimorfismo Sobre-escritura de métodos:

Métodos de una subclase sobre escriben los métodos de una superclase

Sobre-escritura de métodos abstractos Métodos de una subclase implementan los

métodos abstractos de una superclase abstracta

Sobre-escritura de métodos a través de interface: Métodos de una clase concreta implementan los

métodos de la interface

Page 14: Polimorfismo

Sobre-escritura de métodos

Subclase modifica los métodos que ha heredado de su padre Nuevo método tiene diferente funcionalidad del método del

padre pero con el MISMO Nombre Tipo de Retorno Lista de argumentos (OJO: lo diferencia de la Sobrecarga)

public class empleado {

String nombre;int salario;

public String getDetalle(){return «Nombre: «+nombre+»\nSalario: «+salario;}}

public class Jefe extends empleado {

String depto;

public String getDetalle(){return «Nombre: «+nombre+»\nDepartamento: «+depto;}

}

Page 15: Polimorfismo

Llamada de métodos virtuales

¿Cual de los getDetalle() se ejecutará?

¿El de la clase empleado o el de la clase Jefe?

Empleado e=new Jefe;e.getDetalle();

Referencia dinámica

(En tiempo de ejecución)

Referencia estática

(En tiempo de compilación)