Polimorfismo
-
Upload
kaddy-hernandez -
Category
Documents
-
view
800 -
download
2
Transcript of Polimorfismo
![Page 1: Polimorfismo](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/1.jpg)
PolimorfismoLenguajes de
Programación II
Corporación Universitaria
del Caribe CECAR
![Page 2: Polimorfismo](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/2.jpg)
![Page 3: Polimorfismo](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/3.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/4.jpg)
El polimorfismo va ligado a la herencia: objetos
jerárquicamente relacionados responden en forma
diferente al mismo mensaje
![Page 5: Polimorfismo](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/5.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/6.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/7.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/8.jpg)
![Page 9: Polimorfismo](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/9.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/10.jpg)
InterfaceIn
terf
ac
euna 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 staticfinal 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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/11.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/12.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/13.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/14.jpg)
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](https://reader031.fdocuments.es/reader031/viewer/2022020307/559704461a28ab6c4f8b47d1/html5/thumbnails/15.jpg)
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)