PDF de programación - TEMA 3 Herencia: Conceptos básicos

Imágen de pdf TEMA 3 Herencia: Conceptos básicos

TEMA 3 Herencia: Conceptos básicosgráfica de visualizaciones

Publicado el 7 de Julio del 2017
844 visualizaciones desde el 7 de Julio del 2017
636,7 KB
50 paginas
Creado hace 16a (15/10/2007)
Programación Orientada a Objetos

TEMA 3

Herencia:

Conceptos básicos

Facultad de Informática
Universidad de Murcia

Índice
1.- Introducción
2.- Poligono y Rectangulo

- Herencia y Ocultamiento de Información
- Redefinición de características: refinamiento vs. reemplazo
- Herencia y creación

3.- Polimorfismo
4.- Herencia y Sistema de tipos
5.- Genericidad

- Estructuras de datos polimórficas
- Genericidad restringida

6.- Ligadura dinámica
7.- Clases abstractas

- Clases comportamiento: Iteradores

Tema3: Herencia

2

•1

1.-Introducción

Las clases no son suficientes para conseguir los objetivos de:
(A) REUTILIZACIÓN

Necesidad de mecanismos para generar código genérico:
– Capturar aspectos comunes en grupos de estructuras similares
– Independencia de la representación
– Variación en estructuras de datos y algoritmos

(B) EXTENSIBILIDAD

Necesidad de mecanismos para favorecer:
– “Principio abierto-cerrado” y “Principio Elección Única”
– Estructuras de datos polimórficas.

Tema3: Herencia

3

Introducción

• Entre algunas clases pueden existir relaciones conceptuales:

Extensión, Especialización, Combinación

EJEMPLO:

“Libros y Revistas tienen propiedades comunes”
“Una pila puede definirse a partir de una cola o viceversa”
“Un rectángulo es una especialización de polígono”
“Una ventana de texto es un rectángulo dónde se manipula texto”

¿Tiene sentido crear una clase a partir de otra?
soporte para registrar y utilizar estas relaciones
posibilita la definición de una clase a partir de otra

Herencia

Tema3: Herencia

4

•2

Introducción. Jerarquías de clases

La herencia organiza las clases en una estructura jerárquica:

Jerarquías de clases

Ejemplos:

PUBLICACION

FIGURA

LIBRO

REVISTA

POLIGONO

CIRCULO

INVESTIGACION MAGAZINE

LIBRO_TEXTO
• No es tan solo un mecanismo para compartir código.
• Consistente con el sistema de tipos del lenguaje

RECTANGULO

Tema3: Herencia

5

Introducción

• Puede existir una clase “raíz” en la jerarquía de la

cual heredan las demás directa o indirectamente.

• Incluye todas las características comunes a todas las

clases

• En Java esta clase es la clase Object

– equals
– clone
– toString

Tema3: Herencia

6

•3

Introducción

Si B hereda de A entonces B incorpora la estructura (atributos) y
comportamiento (métodos) de la clase A, pero puede incluir
adaptaciones:

-B puede añadir nuevos atributos
-B puede añadir nuevos métodos

-B puede REDEFINIR métodos

•Refinar: Extender el uso original
•Reemplazar: Mejorar la implementación

-B puede implementar un método abstracto en A



Adaptaciones dependientes del lenguaje

Tema3: Herencia

El proceso de la herencia es transitivo

A

B

C

B hereda de A (A es la superclase y B la subclase)
C hereda de B y A

B y C son subclases de A
B es un descendiente directo de A
C es un descendiente indirecto de A

Tema3: Herencia

7

8

•4

Tipos de herencia

D

B

B

E

A

C

• Herencia simple

– Una clase puede heredar de una única

clase.

– Ejemplo: Java, C#

A

C

• Herencia múltiple

– Una clase puede heredar de varias

clases.

– Clases forman un grafo dirigido acíclico
– Ejemplos: Eiffel, C++

Tema3: Herencia

9

¿Cómo detectar la herencia durante el diseño?

• Generalización (Factorización)

Se detectan clases con un comportamiento común
(p.e. Libro y Revista )

• Especialización (Abstracción)

Se detecta que una clase es un caso especial de otra
(p.e. Rectangulo de Poligono)

No hay receta mágica para crear buenas jerarquías

Problemas con la evolución de la jerarquía

Tema3: Herencia

10

•5

Significado de la herencia

Clases
Modulo Mecanismo de extensión
Tipo

Herencia

Mecanismo de especialización Clasificación de tipos

Reutilizar características

¿relación
es-un?



A

B

{ Prop(A) }

{ Prop(B) }

Sean:

Prop(X) : Propiedades (atributos y métodos) de la clase X
dom(C) : Conjunto de instancias de una clase C

• B extiende la clase A => Prop (A) ⊂ Prop (B)
• Cualquier objeto de B puede ser considerado
objeto de A
•Siempre que se espera un objeto de A podemos
recibir un objeto de B, puesto que aceptaría todos
sus mensajes
• dom (B) ⊂ dom (A) =>B es un subtipo de A

Tema3: Herencia

11

El significado de los subtipos

• El principio de sustitución de Liskov [B. Liskov 88]:

“Lo que se quiere aquí es algo como la siguiente
propiedad de sustitución: si para cada objeto o1 de
tipo S hay un objeto o2 de tipo T tal que para todos los
programas P definidos en
términos de T, el
comportamiento de P no varía cuando se sustituye o1
por o2 entonces S en un subtipo de T”

• Funciones que utilizan referencias a superclases deben
ser capaces de utilizar objetos de subclases sin saberlo.

Tema3: Herencia

12

•6

Herencia de Implementación vs. Herencia de Tipos

• No siempre se corresponden las clases con tipos

• Dos consideraciones:

– ¿Cómo relacionamos los tipos?

• HERENCIA DE TIPOS o DE COMPORTAMIENTO
• Da lugar a jerarquías basadas en aspectos comunes

– ¿Cómo organizamos las clases para reutilizar código?

• HERENCIA DE IMPLEMENTACIÓN o CÓDIGO
• Clases no relacionadas pero que tienen código similar
• Las clases podrían parecer repositorios de código

Tema3: Herencia

13

Ejemplos. Herencia de Tipos e Implementación

1) Coincide herencia de tipos e implementación

REAL

WEIGHT

HEIGHT

Weight y Height son tipos
de medidas que tienen
propiedades en común con
los números reales

2) Herencia de implementación:

todas las propiedades del padre
pueden no aplicarse al hijo

3) Herencia de comportamiento

(especializar un tipo)

ARRAY

PILA

ELIPSE

CIRCULO

Tema3: Herencia

14

•7

2.- Polígonos y Rectángulos

• Tenemos

la clase Poligono y necesitamos

representar rectángulos:

¿Debemos crear la clase

Rectangulo partiendo de cero?

Podemos aprovechar la existencia de similitudes

y particularidades entre ambas clases

Tema3: Herencia

15

Polígonos y Rectángulos

• Un rectángulo tiene muchas de las características de un

polígono (rotar, trasladar, vértices,..)

• Pero tiene características especiales (diagonal) y propiedades

especiales (4 lados, ángulos rectos)

• Algunas características de polígono pueden implementarse más

eficientemente (perímetro)

class Rectangulo extends Poligono{

...Características específicas

}

Tema3: Herencia

16

•8

public class Poligono {

vertices = new LinkedList();

//Un polígono se implementa como una lista de //puntos
sucesivos
private List<Punto> vertices;
private int numVertices;
public Poligono(…) {
… }
public int getNumVertices(){
}
public void rotar (Punto centro,
public void trasladar (double a, double b){…}
public void visualizar(){…}
public double perimetro(){…}


return numVertices;

double angulo){…}

3
/
1

o
n
o
g
í
l
o
P

e
s
a
C

l

}

Tema3: Herencia

17

/**
* Desplaza a horizontalmente y b verticalmente
*/
public void trasladar (double a, double b){
for (Punto pto : vertices)

pto.trasladar(a,b);

/**
* Rota el ángulo alrededor del centro
*/
public void rotar (Punto centro, double angulo){
for (Punto pto : vertices)

pto.rotar(centro, angulo);

3
/
2

o
n
o
g
í
l
o
P

e
s
a
C

l

}

}

Tema3: Herencia

18

•9

/**
* Suma las longitudes de los lados
*/
public double perimetro(){

double total = 0;
Punto anterior;
Punto actual = vertices.get(0);
for (int index = 1; index < numVertices; index++){

anterior = actual;
actual = vertices.get(index);
total = total + actual.distancia(anterior);

}
total=total+actual.distancia(vertices.get(0));
return total;

3
/
3

o
n
o
g
í
l
o
P

e
s
a
C

l

}

Tema3: Herencia

19

Clase Rectángulo
public class Rectangulo extends Poligono{

private double lado1, lado2; //Nuevos atributos
private double diagonal;
public Rectangulo(double lado1, double lado2){

super(…);
this.lado1 = lado1;
this.lado2 = lado2;

}

@Override //Redefine perímetro
public double perimetro(){
}

return (2*(lado1 + lado2 ));

}
las características de Poligono están disponibles
Todas
automáticamente para la clase Rectangulo, no es necesario que
se repitan.

Tema3: Herencia

20

•10

Acceso protegido
• Una subclase no puede acceder a los campos privados de

la superclase

• Para permitir que un método de la subclase pueda
acceder a un campo de la superclase, éste tiene que
declararse como protected

• protected: miembros visibles a las subclases y al

resto de clases del paquete

• Resumen de modificadores de acceso:

– private
– public
– protected
– Sin modificador –visible en el paquete

–visible sólo en la clase
–visible a todas las clases
–visible a las subclases y en el paquete

21

Herencia en Java

• Toda clase hereda directa o indirectamente de la clase

Object

• Una subclase hereda de su superclase métodos y

variables tanto de clase como de instancia.

• Una subclase puede añadir nuevos métodos y

variables.

• Una subclase puede redefinir métodos heredados.

Tema3: Herencia

22

•11

Redefinición

• La redefinición reconcilia la reutilización con la extensibilidad:

“Es raro reutilizar un componente software sin necesidad de
cambios”

• Los atributos no se pueden redefinir, sólo se OCULTAN

– el campo de la superclase todavía existe pero no se puede acceder

• Un método de la subclase con la misma signatura y valor de
está

retorno que un método de
REDEFINIENDO.
– Si se cambia el tipo de los parámetros se está sobrecargando el

lo

la

superclase

método original

Tema3: Herencia

23

Redefinición de métodos

• Una clase hija puede redefinir un método de la clase

padre por dos motivos:
– Reemplazo:

• Mejorar implementación.

– Ej: redefinir perímetro en la clase Rectangulo.

• Otra diferente (aunque con la misma semántica).

– Ej: el método dibujar en la jerarquía de Figura.

– Refinamiento:

• Método del padre + acciones específicas.

Tema3: Herencia

24

•12

Refinamiento: super

• Si un método redefinido refina el comportamiento del
método original puede necesitar hacer referencia a es
  • Links de descarga
http://lwp-l.com/pdf5011

Comentarios de: TEMA 3 Herencia: Conceptos básicos (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