l Polimorfismo
l Implementación de interfaces
l Uso de interfaces
l Jerarquías de interfaces
l Extensión
l Jerarquía de extensión
Programación DIT-UPM
2
Polimorfismo
l Polimorfismo: elementos parecidos pero distintos se
usan de igual forma
n Clases que tienen métodos públicos con la misma cabecera
n Sus objetos se pueden manejar con la misma referencia
n El compilador comprueba que la cabecera a la que se llama es
n Durante la ejecución se llama al método de acuerdo al tipo
válida
real del objeto
l El uso del polimorfismo permite
n Separación código genérico-abstracto del específico-detalles
n Reducción de la cantidad de código
n Sustitución de las clases que contienen los detalles
n Añadido de nuevas clases con detalles diferentes
Programación DIT-UPM
3
Elementos del polimorfismo
n método que hace algo
l Servicio
l Servidor
servicios
l Interfaz
n clase que da el servicio; define el método, implementa los
n especificación del servicio pero no da el servicio
n cabecera del método de servicio
l Cliente
n clase que usa los servicios de otra u otras clases sin saber la
clase real del objeto
Programación DIT-UPM
4
Clase interfaz
l Contiene las signaturas de los métodos comunes que
definen un servicio
l Especificación: clase vacía, no puede contener
n Ni atributos
n Ni constructor
l Clase incompleta (abstracta) que sólo contiene
n cabeceras de métodos públicos (no estáticos)
n constantes
l Una interfaz es un tipo
n se pueden declarar referencias
n Que podrán apuntar a objetos de cualquier clase que implemente a
la interfaz
l Una clase puede implementar varios interfaces
n Si no da cuerpo a todos los métodos: clase abstracta-incompleta
5
Programación DIT-UPM
Implementación de la
interfaz
l Es aquella clase “normal” que hace todo lo que prometía
la interface, da el servicio:
n Debe implementar todos los métodos de la interfaz
¡ Cabeceras iguales
¡ Puede añadir excepciones
n En la interfaz no se indica quién la implementa
n En la clase sí se indica a quién se implementa
¡ class TelefonoMovil implements Ubicado {}
l Se pueden implementar varias interfaces a la vez
interface Ubicado {
public Punto getPosicion ( );
}
class TelefonoMovil implements Ubicado {
public Punto getPosicion ( ) {
Localizador l = new Localizador ( );
...
return l.getCentro ( );
}
}
class Antena implements Ubicado {
private Punto posicion;
public Antena (String nombre, double x, double y) {
posicion = new Punto (x, y);
}
public Punto getPosicion ( ) {
return posicion;
}
}
u es un TelefonoMovil.
Durante la ejecución se
ejecuta el método getPosicion
de la clase TelefonoMovil
u es una Antena. Durante la
ejecución se ejecuta el
método getPosicion de la
clase Antena
10
Conversiones
l Generalización (upcasting)
n Tratar a un objeto con una referencia de tipo más general
n Permite usar el objeto de forma más abstracta, con menos
n Sólo se pueden usar los métodos válidos por la referencia
n El compilador comprueba los métodos del tipo de la
detalles
referencia
Ubicado u1 = new TelefonoMovil();
c.distanciaAlOrigen (u1);
System.out.println (u1.getPosicion());
Ubicado u2 = new Antena();
c.distanciaAlOrigen (u2);
System.out.println (u2.getPosicion());
Programación DIT-UPM
11
l Detallado (downcasting)
Conversiones
n Convertir la referencia a un tipo más detallado
n Conversión explícita (forzada)
n Se pueden llamar a los métodos de la referencia convertida
n El compilador lo deja en manos del programador
¡ Pueden saltar excepciones ClassCastException
n Se puede verificar con el operador: instanceof()
((TelefonoMovil) u1).establecerLlamada();
((Antena) u2). cobertura (p);
((Antena) u1). cobertura (p); // ERROR u1 NO es una Antena
// error de ejecución: excepción
if (u1 instanceof Antena) ((Antena) u1).cobertura(p); //BIEN
Programación DIT-UPM
12
Jerarquías de interfaces
Una clase que implemente
Colocable tendrá:
getCentro y setCentro
interface Centrado {
public Punto getCentro();
}
interface Colocable extends Centrado {
public void setCentro (Punto p);
}
interface Escalable {
public void escala (double factor);
}
interface Trasladable extends Colocable {
public void mueve (double x, double y);
}
interface Rotable {
public void rota (double angulo);
}
interface Transformable extends Escalable, Trasladable, Rotable { }
Una clase que implemente
Trasladable tendrá:
getCentro, setCentro y
mueve
class Ornitorrinco implements Mamifero, Oviparo
{ ... }
Ornitorrinco juliana= new Ornitorrinco();
juliana.ponHuevos();
juliana.amamanta();
Programación DIT-UPM
14
¿Cuándo usar interfaces?
l Nunca es malo
n aunque a veces retarda [un poquitín] la ejecución
l Cuándo se sabe qué queremos; pero
n no sabemos (aún) cómo hacerlo
n lo hará otro
n lo haremos de varias maneras
Programación DIT-UPM
15
Contenidos
l Polimorfismo
l Implementación de interfaces
l Uso de interfaces
l Jerarquías de interfaces
l Extensión
l Jerarquía de extensión
Programación DIT-UPM
16
Extensión-herencia
l Herencia: extensión
n Se parte de una clase que ya está hecha y probada
n Se crea una clase nueva que añade atributos y/o métodos
n Debe existir alguna relación lógica entre la clase ya hecha
(clase base) y la nueva (clase derivada): es-un
l El uso de la extensión permite
n Reutilizar las clases hechas como parte de nuevas clases
n Reducir tiempo y esfuerzo de desarrollo
n Aplicar el polimorfismo entre clases que se parecen
porque hay extensión entre ellas
n Cambiar el funcionamiento de algún método de la clase
base
Programación DIT-UPM
17
class Pixel extends Punto {
private String color;
public void setColor (String c) {
color = c;
}
public String getColor() {
return color;
}
public void reset () {
color = “transparent”;
}
}
Relación de extensión
l Un triángulo es un polígono
l Un cuadrilátero es un polígono
l Un cuadrado es un cuadrilátero,
l Un rectángulo es un cuadrilátero,
que es un polígono
Triángulo
Cuadrilátero
que es un polígono
n Un rectángulo tiene todas
las características de un
cuadrilátero y todas las de
un polígono
Cuadrado
Rectángulo
Programación DIT-UPM
19
Efectos de la herencia
l Herencia de la interfaz
¡
¡
n la interfaz de la
Links de descarga
http://lwp-l.com/pdf14874
Comentarios de: Tema 7: Relaciones entre clases (0)
Comentarios de: Tema 7: Relaciones entre clases (0)
No hay comentarios