• No se han encontrado resultados

U4 4Polimorfismo1

N/A
N/A
Protected

Academic year: 2020

Share "U4 4Polimorfismo1"

Copied!
37
0
0

Texto completo

(1)
(2)

Implementación de polimorfismo

Variables polimórficas

Ligadura dinámica

Final

Variables

Métodos

Clases

Realización de Interfaces

(3)
(4)

Describir a un

Caballo como que es un Transporte no es

sólo una manera conveniente de describir la relación

entre estas dos clases; sino que significa que cualquier

operación legítima en un Transporte es también

legítima en un Caballo.

Un objeto tiene solo una forma (aquella que le fue dada en su

constructor); sin embargo, una

variable puede ser

polimórfica

, porque ésta

puede referirse a objetos de

diferentes tipos

.

Transporte t = new Caballo();

Transporte t = new Cohete();

Transporte t = new Carro();

Solo puede acceder a las partes del objeto

Transporte

Las partes específicas del objeto son ocultos

(5)

Declarando objetos caballo de tipo

transporte y tipo caballo.

Transporte t= new Caballo();

Caballo c = new Caballo();

t.avanzar();

c.avanzar()

.5

Comportamientos

diferente

(6)

El polimorfismo esta presente

cuando se envía un mensaje

a un objeto del que no se

sabe su tipo, ejecutándose el

método adecuado de acuerdo

con su tipo.

Ligadura dinámica: Se elige el

método a

ejecutar en

tiempo de ejecución

, en

función de la clase del objeto;

Es la implementación del

polimorfismo.

(7)

.7

Figura f1 =

new

Figura(“Estandar”, “Rojo”);

Figura f2 =

new

Circulo(“Verde”, 5.0);

(8)

Pero qué pasa si hacemos:

Transporte t = new Caballo();

t.avanzar();

Obtenemos el comportamiento asociado

con el objeto actual al cual se refiere la

variable en tiempo de ejecución.

Este comportamiento es un aspecto de

polimorfismo y es llamado frecuentemente

método virtual de invocación o ligadura

(9)

La solución consiste en esperar a resolver la

llamada en tiempo de ejecución, cuando se

conoce realmente el objeto conectado a r, y

por lo tanto cuál es la versión de f()

apropiada.

La ligadura dinámica también se aplica

(10)
(11)

 En equipos, resuelvan el siguiente problema:

 La empresa TKE ofrece como parte de las prestaciones a sus

empleados diferentes préstamos: para auto, casa y efectivo. La información que se almacena para cada préstamo es el nombre del deudor, su número de empleado, años laborados, el monto prestado, la suma mensual a pagar y los intereses mensuales. Para un préstamo para casa, el interés es del 3% mensual fijo a un máximo de 20 años. Para un préstamo para Auto, es del 20% si tiene menos de 10 años laborados y del 15% si tiene mas de 10 . Los préstamos de efectivo son a 12 meses sin intereses si tiene mas de 20 años laborando, en caso contrario se cobra un interés anual del 30%

 El administrador de TKE quiere conocer los ingresos totales

mensuales, que la empresa recibirá por concepto de pagos, sin importar el tipo de préstamo. Además requiere conocer la información detallada de cada préstamo.

 Analiza el problema de la Empresa TKE, diseña una solución e

implementa un programa sencillo en Java (propón una solución que aplique polimorfismo).

(12)

En el rancho la "Esperanza", se cuenta con diferentes

graneros para almacenar semillas (maíz, trigo, sorgo,

etc.). Los graneros tienen diferentes formas y

tamaños, algunos son cilíndricos, otros cúbicos y

otros cónicos. Conocer el volumen de semillas

almacenadas es vital para la subsistencia de la región

en tiempos de sequías; por lo que se requiere calcular

constantemente la cantidad total de semillas

almacenadas en los graneros, sin importar el tipo de

semilla, para evitar desabasto. Además, visualizar el

tipo de semilla que está almacenada en cada

granero.

(13)

Una librería, vende diferentes publicaciones como revistas

y libros. Todas las publicaciones tienen una editorial y una

fecha de publicación; sin embargo, cada tipo de publicación

tiene información adicional requerida, por ejemplo, las

revistas tienen nombre, el número de ejemplares que se

pone en circulación y la periodicidad con que salen:

semanal, mensual, anual, etc. Los libros, a diferencia,

tienen un código ISBN, el nombre del autor y el titulo del

libro. El dueño de la librería, esta interesado en contar con

un programa que le permita ver el catalogo completo de

sus publicaciones y el catálogo por editorial.

(14)

Supongamos que Perro hereda de Animal y

que a la clase Perro, le agregamos el

método moverCola ( )

public String moverCola ( ) {

return “ moviendo cola “;

}

Entonces podemos escribir

Animal x = new Perro( );

String texto = x.moverCola( );

(15)

---Configuration:

<Default>---D:\Progra2\u4\Programas\EjemplosRelaciones\Polimorfismo\

EjPolimorfismo.java:25: cannot find symbol

symbol : method mueveCola()

location: class Animal

String texto=x.mueveCola();

^

(16)

¿Qué pasa si tratamos de asignar un objeto de una clase

a una variable de otra clase?

Por ejemplo

Circulo c1 = new Circulo( );

Figura x = c1;

Puesto que estas variables están relacionadas en una

jerarquía de clases, esta asignación desplaza al objeto

circulo hacia arriba en la jerarquía, a un concepto más

general.

(17)

Las reglas para asignar objetos:

No se puede desplazar algo a través del mismo nivel de

la jerarquía de clases

Si se puede desplazar algo

hacia arriba

del árbol

sin

problemas

Si se puede desplazar algo

hacia debajo

de la

jerarquía, pero hay que

ser explícitos

y utilizar lo que

se llama especificación

(18)

Moldear significa cambiar explícitamente el tipo

de la variable en la que se guarda la referencia a

un objeto

No que un objeto de superclase se convierta en

uno de su subclase

El operador de casting es el tipo destino

escrito entre paréntesis

Ej: Figura x;

Circulo c1 = (Circulo) x;

Un objeto (una vez creado) retiene su identidad

(19)

También podemos utilizar el operador

instanceof

para comprobar si hacer un determinado casting es

válido y evitar que se cree un error en tiempo de

ejecución (ClassCastException) y el programa

termine

Ejemplo:

If(x

instanceof

Serpiente) {

Serpiente sid= (

Serpiente

) x;

String texto = sid.mudarPiel( );

}

En el ejemplo se comprueba que efectivamente el

(20)

Supongamos que tenemos un método de la

clase Zoológico, definido de la siguiente

forma:

void agregarAnimal(Animal a

){

}

Se dice que a es un argumento

(21)

Por ejemplo, desde el cliente se podría tener:

…main(…) {

Zoologico africam = new Zoologico();

Elefante dumbo = new Elefante();

africam.agregarAnimal(dumbo);

africam.agregarAnimal(

new Elefante());

africam.agregarAnimal(new Tigre());

africam.agregarAnimal(new Leon());

}

Y el nombre del segundo elefante ? Es

(22)

 En equipos, implementen en Java su diagrama de clases que da

solución al siguiente problema

  La escuela Avanza cuenta con varios tipos de empleados: profesores

y contador. Todos los empleados tienen en común la información siguiente: No. empleado (ID), Nombre completo y sueldo. Sin

embargo, dependiendo del tipo de empleado se calcula su sueldo de la siguiente forma:

  Contador: Cuenta con un sueldo fijo mensual más un bono del 1%

de su sueldo por los años laborados. Es decir, un bono por su antigüedad.

  Profesor Tiempo completo: Su sueldo es fijo mensual + un bono

adicional de apoyo a materiales

  Profesor Hora clase: Su sueldo es en base a las horas laboradas y se

le paga a razón de 150 x hora.

  Dentro de los empleados, el contador es el único que puede generar

(23)

En algunos casos, se puede necesitar que

un método de una superclase permanezca

invariante (

constante

) a lo largo de la

jerarquía de clases, esto es, que ninguna

subclase pueda sobreescribirlo.

En este caso, podemos declarar que el

(24)

public abstract class Figura {

abstract public double area();

public Figura (String n) { nombre = n;}

final public boolean menorQue(Figura

lder)

{ return area() < lder.area(); }

final public String toString()

{ return nombre + “con area “ + area( ); }

private String nombre;

(25)

Cuando defines una variable final, estas definiendo una

entidad una sola vez y una vez inicializada, no puede

cambiar de valor en algún otro lugar.

Para declarar una variable como final se realiza lo siguiente:

public final double nDatos= 100;

Normalmente las variables final son declaradas static

también, lo que hace que sea “constantes” a nivel de clase.

(26)

Una clase final no puede ser extendida. Como

consecuencia, todos sus métodos son

automáticamente métodos finales.

Nótese que el hecho de que una clase tenga

métodos finales no implica que la clase sea

también final,

como pasa con las clases abstracts.

Las clases final se conocen también por

clases

(27)
(28)

Una relación de realización, indica que una

clase implementa un comportamiento

específico de otra clase, llamada interface o

protocolo.

Una interface puede ser realizada por

muchas clases

(29)

La definición de una interfaz utiliza la palabra

reservada

interface

en lugar de class.

Los métodos de la interface son declarados igual

que los métodos de una clase abstracta, solo que

no requieren especificar que son asbtract (pero

lo son).

Ejemplo:

public

interface

Globo {

public void cambiarTamaño(int nDiametro);

public void mover (int x, int y);

(30)

Los

datos

de una interfaz son declarados

implícitamente

como

static y final.

public interface Movible {

public

static final

String DEF_LOC = “HQ Office

public void moverA(String s);

(31)

Al

utilizar

implements

el

compilador

comprobará

que

la

clase

haya

sido

implementada para cumplir con la declaración

de la interfaz; es decir, que haya sobreescrito

el método moverA.

public class Auto

implements

Movible

{

public void moverA(StringS)

(32)
(33)

Java simula herencia múltiple mediante el uso de interfaces.

Una clase puede

extender de una sola clase, pero

implementar cualquier número de interfaces.

Ejemplo:

(34)
(35)
(36)
(37)

En parejas, crearla interfaz PuedeCantar(que es

capaz de cantar), la cuales una interfaz muy

simple que sólo posee un método cantar.

Crearla clase Persona que implemente el

interfaz PuedeCantar y que cuando cante lo

haga con las notas musicales.

Crearla clase Canario y Gallo que implemente

el interfaz PuedeCantar y que muestre como

cantan

Realizar el programa que haga cantar a un

Referencias

Documento similar

En síntesis, YPFB invertirá más que las privadas en exploración, mientras que éstas invertirán más en desarrollo o explotación como han venido haciendo en los últimos años con

• El sillín se puede mover hacia arriba y hacia abajo, hacia adelante y hacia atrás y en ángulo hacia arriba y hacia abajo, así que puedes jugar con él para obtener el mejor

Las Barras de Desplazamiento se pueden hacer funcionar mediante clic izquierdo sobre las flechas de sus extremos (para desplazar el Área de Trabajo hacia un lado u otro),

Como otros AINE, los productos que contengan naproxeno deben utilizarse con precaución en los pacientes con disfunción renal o antecedentes de renopatía, ya que el naproxeno inhibe

Así pues, la historia de la colonización de los territorios islámicos, o al menos del Islam Clásico, puede describirse como la del paso de unos pocos europeos que trajeron

La Normativa de evaluación del rendimiento académico de los estudiantes y de revisión de calificaciones de la Universidad de Santiago de Compostela, aprobada por el Pleno or-

- Resolución de 30 de agosto de 2018, de la dirección general de Formación Profesional y Enseñanzas de Régimen Especial, de la Conselleria de Educación, Investigación, Cultura

Debido a la calidad y el legado de nuestra compañía, los cuales se reflejan en nuestros pianos, elegir un instrumento hecho por Steinway &amp; Sons tiende a ser una decisión