PDF de programación - Polimorfismo - Java y Servicios Web I - Master en Ingeniería Matemática

Imágen de pdf Polimorfismo - Java y Servicios Web I - Master en Ingeniería Matemática

Polimorfismo - Java y Servicios Web I - Master en Ingeniería Matemáticagráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.558 visualizaciones desde el 14 de Enero del 2017
668,6 KB
37 paginas
Creado hace 12a (13/05/2012)
Polimorfismo

Java y Servicios Web I

Master en Ingeniería Matemática

Manuel Montenegro

Dpto. Sistemas Informáticos y Computación

Desp. 467 (Mat)

[email protected]

Contenidos

● Introducción.
● Conversión entre tipos.
● Vinculación dinámica.
● Polimorfismo mediante ejemplos.
● Clases abstractas.
● Interfaces.

16/Mayo/2012

5. Polimorfismo

2

Polimorfismo

● Capacidad de enviar un mismo mensaje a

distintos objetos de naturaleza heterogénea.
● Íntimamente relacionado con el concepto de

herencia.

Persona

Estudiante

Empleado

EmpleadoComision

16/Mayo/2012

5. Polimorfismo

3

Polimorfismo

● El método imprimirDatos()

tiene una funcionalidad
distinta según el objeto que
reciba la mensaje.

Persona p = new Persona(...);
Empleado e = new Empleado(...);

p.imprimirDatos();
e.imprimirDatos();

Persona

String nombre;

Fecha fechaNacimiento;

int dni;

<<constructor>>

String getNombre()

Fecha getFechaNacimiento()

int getDni()

void imprimirDatos()

Empleado
int sueldoBase;
<<constructor>>
int getSueldo()

void imprimirDatos()

16/Mayo/2012

5. Polimorfismo

4

Polimorfismo

Empleado
int sueldoBase;
<<constructor>>
int getSueldo()

void imprimirDatos()

● El método getSueldo() calcula
de forma distinta el sueldo del
empleado, según si trabaja o
no a comisión.

Empleado e = new Empleado(...);
EmpleadoComision ec = new EmpleadoComision(...);

EmpleadoComision

int dineroVentas;

double porcentajeComision;

int sueldo1 = e.getSueldo();
int sueldo2 = ec.getSueldo();

<<constructor>>

double getPorcentajeComision()

int getSueldo()

16/Mayo/2012

5. Polimorfismo

5

Polimorfismo

● El método dibujar(Ventana v)
llama a funciones distintas de
Ventana según la clase de
figura geométrica a la que se
aplique.

Rectangulo
Punto origen;

int ancho;
int alto;

<<constructor>>
Punto getOrigen()

int getAncho()
int getAlto()
double area()

double perimetro()

void dibujar(Ventana v)

RectanguloColor

Color colorBorde;
<<constructor>>

Color getColorBorde()
void dibujar(Ventana v)

RectanguloRelleno

Color colorRelleno;

<<constructor>>

Color getColorRelleno()
void dibujar(Ventana v)

16/Mayo/2012

5. Polimorfismo

6

Contenidos

● Introducción.
● Conversión entre tipos.
● Vinculación dinámica.
● Polimorfismo mediante ejemplos.
● Clases abstractas.
● Interfaces.

16/Mayo/2012

5. Polimorfismo

7

Conversión de tipos

● Hemos visto los elementos de un tipo pueden

convertirse a un tipo más amplio o general.
● La conversión es segura.

int entero = 4;
double real;
real = entero;

● La conversión en sentido contrario también es

posible, pero ha de indicarse explícitamente.
● Puede haber pérdida de información.

int entero;
double real = 5.34;
entero = (int) real;

16/Mayo/2012

5. Polimorfismo

8

Conversión hacia arriba (upcasting)

● Similarmente, podemos asignar un objeto de

una clase B a una variable de tipo A, si A es
superclase (directa o indirecta) de B.

Persona p;
Empleado e = new Empleado(...);
p = e;

16/Mayo/2012

5. Polimorfismo

9

Conversión hacia arriba (upcasting)

● Similarmente, podemos asignar un objeto de

una clase B a una variable de tipo A, si A es
superclase (directa o indirecta) de B.

Persona p = new Empleado(...);

p es de tipo Persona, y sólo
podrá acceder a los métodos

de la clase Persona

● Esta conversión es segura, ya que la herencia

modela la relación es-un.
● Un Empleado es una Persona.

16/Mayo/2012

5. Polimorfismo

10

Conversión hacia abajo (downcasting)

● Es posible asignar una variable de un tipo A a

otra de un tipo B, si B es subclase de A.

● Pero esta conversión no siempre es correcta, y

ha de indicarse explícitamente.

Persona p = new Empleado(...);
Empleado e = (Empleado) p;

Persona p = new Estudiante(...);
Empleado e = (Empleado) p;

Persona p = new Persona(...);
Empleado e = (Empleado) p;

Correcto

Error

Error

16/Mayo/2012

5. Polimorfismo

11

Conversión hacia abajo (downcasting)

● Es posible asignar una variable de un tipo A a

otra de un tipo B, si B es subclase de A.

● Pero esta conversión no siempre es correcta, y

ha de indicarse explícitamente.

Persona p = new EmpleadoComision(...);
Empleado e = (Empleado) p;

Correcto

16/Mayo/2012

5. Polimorfismo

12

Contenidos

● Introducción.
● Conversión entre tipos.
● Vinculación dinámica.
● Polimorfismo mediante ejemplos.
● Clases abstractas.
● Interfaces.

16/Mayo/2012

5. Polimorfismo

13

Vinculación dinámica

● El compilador determina los mensajes que
puede recibir un objeto a partir de su tipo.

Persona p = new Empleado(...);

p.getNombre();
p.getFechaNacimiento()
p.getDni();
p.setNombre(...);
p.imprimirDatos();

p.getSueldo()
p.setSueldo(...)

p.imprimirDatos();

¿El definido en Persona?

¿O el definido en Empleado?

16/Mayo/2012

5. Polimorfismo

14

Vinculación dinámica

● La decisión del método específico a ejecutar se

realiza en tiempo de ejecución, y en base a la
clase real del objeto, no a su tipo.

p.imprimirDatos();

● Aunque p sea de tipo Persona, contiene un
Empleado. Por tanto, se llamará al método
imprimirDatos() reescrito en esta última clase.

16/Mayo/2012

5. Polimorfismo

15

Ejemplo: imprimirDatos

public class Empleado extends Persona {

protected int sueldoBase;
public void imprimirDatos() {
super.imprimirDatos();
System.out.print("SUELDO: ");
System.out.println(this.getSueldo());
}
}

public class TestEmpleadoComision {
public static void main(String[] args) {
EmpleadoComision ec = new EmpleadoComision(“Fuckencio Martinez”,
new Fecha(15, 3, 1979),
123456, 1000, 20);
ec.vender(200);
ec.imprimirDatos();
}
}

16/Mayo/2012

5. Polimorfismo

16

Ejemplo: Rectangulo

Ventana v = new Ventana();
v.abrir();
Rectangulo r = new RectanguloRelleno(new Punto(10,10), 100, 100,
Color.AZUL, Color.NARANJA);
r.dibujar(v);
Color c = r.getColorRelleno();
Color c = ((RectanguloRelleno) r).getColorRelleno();

16/Mayo/2012

5. Polimorfismo

17

Contenidos

● Introducción.
● Conversión entre tipos.
● Vinculación dinámica.
● Polimorfismo mediante ejemplos.
● Clases abstractas.
● Interfaces.

16/Mayo/2012

5. Polimorfismo

18

Motivación de polimorfismo

● El polimorfismo permite tratar con conjuntos

de elementos de manera genérica.

Persona[] personas = new Persona[10];

Puede contener empleados,
estudiantes, o cualquier cosa

que se derive de Persona

16/Mayo/2012

5. Polimorfismo

19

Ejemplo: Listado de personas

public class TestEmpleado
{
public static void imprimirListado(Persona[] personas) {
System.out.println("DNI Nombre Fecha de Nacimiento");
System.out.println("------------------------------------------------------------");
for (Persona p : personas) {
System.out.printf("%-9d %-30s %s\n", p.getDni(),
p.getNombre(), p.getFechaNacimiento());
}
}

public static void main(String[] args) {
Persona[] personas = new Persona[4];
personas[0] = new Persona("David Fernández Esteban",
new Fecha(23, 5, 1980), 47839244);
personas[1] = new Empleado("Enrique Martín Martín",
new Fecha(1, 1, 1981), 38493212, 1600);
personas[2] = new Estudiante("Ignacio Castiñeiras Perez",
new Fecha(2, 2, 1983), 50120234);
personas[3] = new EmpleadoComision("Laura Díaz Agrela",
new Fecha(26, 6, 1987), 10938464, 1000, 20);
imprimirListado(personas);
}
}

16/Mayo/2012

5. Polimorfismo

20

Ejemplo: Listado de personas

16/Mayo/2012

5. Polimorfismo

21

Ejemplo: Listado de personas

public class TestEmpleado
{
public static void imprimirListadoExtendido(Persona[] personas) {
System.out.println("---------------------------------------");
for (Persona p : personas) {
p.imprimirDatos();
System.out.println("---------------------------------------");
}
}

}

16/Mayo/2012

5. Polimorfismo

22

Ejemplo: Figuras geométricas

Figura

Rectangulo

Circulo

Cuadrado

RectanguloColor

RectanguloRelleno

16/Mayo/2012

5. Polimorfismo

23

Ejemplo: Figuras geométricas

● Podemos abstraer las propiedades y métodos

comunes en Rectangulo y Circulo.

Figura

Punto posicion;

<<constructor>>

void dibujar(Ventana v);

● El método dibujar() será sobreescrito por las

subclases Rectangulo y Circulo, que llamarán a
las funciones correspondientes de la clase
Ventana.

16/Mayo/2012

5. Polimorfismo

24

Ejemplo: Figuras geométricas

public class Escenas
{
public static void dibujarEscena(Figura[] figuras, Ventana v) {
for (Figura f : figuras) {
f.dibujar(v);
}
}

public static void main(String[] args) {
Ventana v = new Ventana();
Figura[] circulos = new Figura[10];
for (int i = 1; i <= 10; i++) {
circulos[i-1] = new Circulo(new Punto(150, 150), i*10);
}
v.abrir();
dibujarEscena(circulos, v);
}
}

16/Mayo/2012

5. Polimorfismo

25

Ejemplo: Figuras geométricas

16/Mayo/2012

5. Polimorfismo

26

Contenidos

● Introducción.
● Conversión entre tipos.
● Vinculación dinámica.
● Polimorfismo mediante ejemplos.
● Clases abstractas.
● Interfaces.

16/Mayo/2012

5. Polimorfismo

27

Clases abstractas

● Comenzamos a implementar Figura

public class Figura {
protected Punto posicion;

public Figura(Punto posicion) {
this.posicion = posicion;
}

public Punto getFigura() {
return posicion;
}

public void dibujar(Ventana v) {

}
}

?

16/Mayo/2012

5. Polimorfismo

28

Clases abstractas

● ¿Qué se debería pintar
  • Links de descarga
http://lwp-l.com/pdf815

Comentarios de: Polimorfismo - Java y Servicios Web I - Master en Ingeniería Matemática (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