PDF de programación - Tema 7: Relaciones entre clases

Imágen de pdf Tema 7: Relaciones entre clases

Tema 7: Relaciones entre clasesgráfica de visualizaciones

Publicado el 17 de Enero del 2019
209 visualizaciones desde el 17 de Enero del 2019
2,8 MB
37 paginas
Programación

Tema 7: Relaciones entre clases

Programación DIT-UPM

1

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

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

Programación DIT-UPM

6

Ejemplos

interface Coordenada {
double getX ();
double getY ();
double distancia (Coordenada q);
}

class Cartesiana


implements Coordenada {

class Polar

implements Coordenada {

private double x, y;
Cartesiana (double x,double y) {
this.x=x; this.y=y;
}
double getX () { return x; }
double getY () { return y; }
double distancia (Coordenada q){
double dx=q.getX()-this.getX();
double dy=q.getY()-this.getY();;
return Math.sqrt(dx*dx+dy*dy);
}
}



Programación DIT-UPM

private double r, a;
Cartesiana (double m,double a) {
this.r=r; this.a=a;
}
double getX() { return r*Math.cos(a); }
double getY() { return r*Math.sin(a); }
double distancia (Coordenada q){
double dx=q.getX()-this.getX();;
double dy=q.getY()-this.getY();;
return Math.sqrt(dx*dx+dy*dy);
}
}



7

Implementación de interfaz

Relación de uso

<<Interface>>

Ubicado

getPosicion() : Punto

*

CalculoCobertura

elementos : Ubicado
distanciaAlOrigen() : double

Relación de
implementación
“es-un”

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;
}
}

TelefonoMovil

estacionBase : Estacion
establecerLlamada()
colgar()
enviar()
recibir()
getPosicion()

Antena
posicion : Punto
nombre
emitir(p : Punto)
cobertura(p)
getPosicion()

Programación DIT-UPM

8

Uso del polimorfismo

l  Sólo se pueden crear referencias

n  Copiarlas y compararlas
n  Dar valor a una referencia

¡  Hacer que apunten a un objeto de una clase real que implemente la

interfaz

•  Ubicado refernenciaDeInterfaz = new ClaseQueImplementaUbicado();
n  Se puede llamar sólo a los métodos cuyas cabeceras aparecen en

la clase interfaz
¡  Se ejecutarán los de los objetos reales (polimorfismo)

•  En cada ejecución se mira a qué clase pertenece el objeto real y

se ejecuta el método implementado en esa clase

l  No se pueden crear objetos interfaz

n  No se puede hacer: Ubicado u = new Ubicado();

Programación DIT-UPM

9

Uso del polimorfismo:
ejemplo

class CalculoCobertura {

public double distanciaAlOrigen (Ubicado u) {
Punto p = u.getPosicion ( );
return Math.sqrt((p.getX() * p.getX()) + (p.getY() * p.getY()));
}

public static void main (String [] args) {
CalculoCobertura c = new CalculoCobertura ( );
Ubicado u = new TelefonoMovil ( );
...

System.out.println (c.distanciaAlOrigen (u));



u referencia a un objeto
TelefonoMovil

u = new Antena ( );

u referencia a un objeto Antena

...
System.out.println (c.distanciaAlOrigen (u));
}
}

Programación DIT-UPM

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

13

Una clase multifunción

l Una misma clase puede implementar varias

interfaces
interface Mamifero { void amamanta (); }
interface Oviparo { void ponHuevos (); }

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”;
}
}

Ejemplo

Punto

x : double
y : double
getX() : double
getY() : double
setX(x : double) : void
setY(x : double) : void
modulo() : double
reset() : void

Relación de
extensión
“es-un”

Pixel
color : String
getColor() : String
setColor(color : String) : void
reset() : void

Programación DIT-UPM

18

Polígono

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)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad