PDF de programación - TEMA 4 Herencia: Conceptos básicos - Programación Orientada a Objetos

Imágen de pdf TEMA 4 Herencia: Conceptos básicos - Programación Orientada a Objetos

TEMA 4 Herencia: Conceptos básicos - Programación Orientada a Objetosgráfica de visualizaciones

Publicado el 31 de Mayo del 2018
1.008 visualizaciones desde el 31 de Mayo del 2018
674,2 KB
58 paginas
Creado hace 17a (27/11/2006)
Programación Orientada a Objetos

TEMA 4

Herencia:

Conceptos básicos

Facultad de Informática
Universidad de Murcia

Programación Orientada a Objetos

TEMA1: CALIDAD DEL SOFTWARE

Modularidad

• Extensibilidad
• Reutilización

• Variación de tipos
• Agrupar características
• Variación de algoritmos y est. de datos
• Independencia de la representación
• Factorizar comportamiento común

Ocultamiento de Información
Principio Abierto-Cerrado
Principio de Elección Única


• Fiabilidad

• Corrección
• Robustez
...

TEMA5 Herencia múltiple

Tema4: Herencia

TEMA 2 Clases y Objetos

Genericidad
Clase: estructura (ref)

comportamiento (mens)

Niveles de acceso a propiedades

TEMA 3 Corrección y

robustez

Asertos. Diseño por Contrato
Excepciones

TEMA4 Herencia

• Polimorfismo
• Ligadura dinámica
• Clases diferidas
• Código genérico

2

•1

Índice
1.- Introducción
2.- Polimorfismo
3.- Herencia y Sistema de tipos
4.- Genericidad y Herencia

- Estructuras de datos polimórficas

* Intento de asignación

- Genericidad restringida

5.- Ligadura dinámica
6.- Clases Abstractas y Diferidas

- Clases comportamiento: Iteradores

7.- Redefinición de características: refinamiento vs. reemplazo
8.- Herencia y Creación
9.- Herencia y Ocultamiento de Información
10.- Herencia y Aserciones
11.- Herencia y Excepciones

3

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.

Tema4: Herencia

4

•2

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

Tema4: Herencia

5

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

Tema4: Herencia

6

•3

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

Eiffel:
Java:
C++:
C#:

clase ANY
clase Object
no existe
clase System.Object

Tema4: Herencia

7

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 renombrar atributos o métodos
-B puede implementar un método diferido en A



Adaptaciones dependientes del lenguaje

(Redefinición disponible en cualquier LPOO)

Tema4: Herencia

8

•4

El proceso de la herencia es transitivo

A

B

C

B hereda de A
C hereda de B y A

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

TERMINOLOGÍA

B hereda de A
B es descendiente de A (Eiffel)
A es un ascendiente de B (Eiffel)
B es subclase de A (Java)
A es superclase de B (Java)
B es una clase derivada de A (C++)
A es la clase base de B (C++)

9

Tema4: Herencia

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++

Tema4: Herencia

10

•5

¿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

Tema4: Herencia

11

Ejemplo: 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

Tema4: Herencia

12

•6

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)

Poligono

class Rectangulo inherit
feature
end

...Características específicas

Tema4: Herencia

13

3
/
1

o
n
o
g
í
l
o
P

e
s
a
C

l

class POLIGONO creation ...
feature {NONE}

vertices: LINKED_LIST [PUNTO];

-- implementación

-- ptos sucesivos formando el polígono

feature

-- acceso

numero_vertices: INTEGER;
rotar (centro:PUNTO; angulo:REAL) is do .. end;
trasladar (a, b: REAL) is do .. end;
visualizar is do .. end;
perimetro : REAL is do .. end;


invariant

numero_vertices = vertices.count
numero_vertices >=3
end -- class POLIGONO

Tema4: Herencia

14

•7

3
/
2

o
n
o
g
í
l
o
P

e
s
a
C

l

3
/
3

o
n
o
g
í
l
o
P

e
s
a
C

l

trasladar (a, b: REAL) is do

-- desplaza a horizontalte y b verticalte

from vertices.start
until vertices.after
loop

vertices.item.trasladar(a,b)
vertices.forth

end
end;
rotar (centro, angulo: REAL) is do

-- rotar el angulo alrededor del centro

from vertices.start
until vertices.after
loop

vertices.item.rotar(centro,angulo)
vertices.forth

Tema4: Herencia

15

end
end;

perimetro : REAL is

-- suma de las longitudes de los lados

actual, anterior : PUNTO

local
do

vertices.is_last ;

actual

actual:= vertices.item ;

from vertices.start;
until
loop
anterior := actual ;
vertices.forth ;
actual := vertices.item ;
Result:= Result + actual.distancia(anterior);
end;

anterior

Result:=Result+actual.distancia(vertices.first);

is_last

start

end;

Tema4: Herencia

16

•8

o
l
u
g
n
á
t
c
e
R

e
s
a
C

l

redefine perimetro

class RECTANGULO inherit POLIGONO
creation crear
feature

lado1, lado2 : REAL ;
diagonal : REAL ;

Atributos nuevos


perimetro : REAL is do
Result := 2 * ( lado1 + lado2 )
end ;
end ;
Todas las características de Poligono están
disponibles
clase
Rectangulo, no es necesario que se repitan.

automáticamente para

la

Tema4: Herencia

17

Doble aspecto 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

Tema4: Herencia

18

•9

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.

Tema4: Herencia

19

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

Tema4: Herencia

20

•10

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

Tema4: Herencia

21

¿Un mecanismo o más?

• ”Esta división parece causar más daños que beneficios” [Meyer 24.6]:

– Sólo dos categorías no es representativo
– Discusiones metodológicas inútiles
– Complejidad del lenguaje

• Casi todos los mecanismos auxiliares (redefinición, renombramiento) son

útiles en ambas visiones

• En Eiffel y C# existe un único mecanismo
• C++ distingue entre herencia de tipos (public) y de

implementación (private)

• Java también distingue entre herencia de tipos e implementación
utilizando interfaces para los tipos y clases para implementación
22

Tema4: Herencia

•11

2.- Polimorfismo

• El término polimorfismo significa que hay un
nombre (variable, función o clase) y muchos
significados diferentes (distintas definiciones).

• Formas de polimorfismo [Budd’02]:

– Polimorfismo de asi
  • Links de descarga
http://lwp-l.com/pdf11488

Comentarios de: TEMA 4 Herencia: Conceptos básicos - Programación Orientada a Objetos (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