PDF de programación - Parte I: Programación en Ada - 8. Herencia y polimorfismo

Imágen de pdf Parte I: Programación en Ada - 8. Herencia y polimorfismo

Parte I: Programación en Ada - 8. Herencia y polimorfismográfica de visualizaciones

Publicado el 6 de Junio del 2017
1.100 visualizaciones desde el 6 de Junio del 2017
291,8 KB
24 paginas
Creado hace 15a (05/12/2008)
Parte I: Programación en Ada

UNIVERSIDAD DE CANTABRIA

1. Introducción a los computadores y su programación
2. Elementos básicos del lenguaje
3. Modularidad y programación orientada a objetos
4. Estructuras de datos dinámicas
5. Tratamiento de errores
6. Abstracción de tipos mediante unidades genéricas
7. Entrada/salida con ficheros
8. Herencia y polimorfismo
9. Programación concurrente y de tiempo real

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

4

© Javier Gutiérrez, Michael González

5/dic/08

1

8.1 Programación orientada a
objetos

UNIVERSIDAD DE CANTABRIA

Un diseño orientado a objetos puede implementarse mediante
un lenguaje convencional (como C o Pascal). Sin embargo:
a) no hay un mecanismo para encapsular el objeto junto a

sus operaciones:
- para expresarlas en un mismo módulo independiente
- y especificar por separado la parte visible y los detalles

internos o partes privadas de un objeto

b) el software orientado al objeto sería más voluminoso, ya
que si los objetos se parecen, repetiremos mucho código
c) operaciones similares de objetos parecidos (denominadas
polimórficas) deben distinguirse en tiempo de compilación

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

2

El problema de la repetición
de código

UNIVERSIDAD DE CANTABRIA

Al crear un objeto parecido a otro debemos repetir los
elementos comunes

Lo ideal sería que:
• el nuevo objeto herede lo que tuviese el viejo: herencia
• programar sólo las diferencias

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

3

El problema del polimorfismo

UNIVERSIDAD DE CANTABRIA

La palabra polimorfismo viene de “múltiples formas”

Las operaciones polimórficas son aquellas que hacen
funciones similares con objetos diferentes:

mover círculo:

borrar círculo
desplazar el centro
dibujar círculo

mover cuadrado:

borrar cuadrado
desplazar el centro
dibujar cuadrado

El problema es que debemos tratarlas de forma diferente

mover figura:

case figura is

when círculo => mover círculo
when cuadrado => mover cuadrado
...

end case

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

4

El problema del polimorfismo
(cont.)

UNIVERSIDAD DE CANTABRIA

Para hacer una operación similar con diferentes objetos sería
mejor expresarla de forma independiente del objeto usado:
• por ejemplo, para mover una figura sería más lógico

programar de una sóla vez:

mover figura:

borrar figura
desplazar el centro
dibujar figura

• además, esta forma funcionaría también con figuras

definidas en el futuro (es reutilizable)

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

5

Lenguajes para OOP

UNIVERSIDAD DE CANTABRIA

Estas necesidades e inconvenientes se resuelven utilizando
lenguajes de programación orientada a objetos, que soportan:
a) encapsulamiento de los objetos y sus operaciones
b) extensión de objetos y herencia de sus operaciones

- se crean objetos a partir de otros, y se programan sólo

las diferencias

c) polimorfismo, que significa invocar una operación de una

familia de objetos parecidos; en tiempo de ejecución se
elige la operación apropiada al objeto concreto utilizado
- a esto se llama enlace tardío o enlace dinámico (“late

binding” o “dynamic binding”)

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

6

Implementación de Objetos
en Ada

UNIVERSIDAD DE CANTABRIA

Encapsulado de objetos: mediante paquetes

Clases de objetos: tipos de datos abstractos y etiquetados,
declarados en un paquete, o en un paquete genérico

Objetos simples:
• variables de uno de los tipos anteriores, o un
• paquete que opere como máquina de estados abstracta

Operaciones de un objeto: subprogramas definidos en el
paquete donde se declara el objeto o la clase de objetos

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

7

Notas:

UNIVERSIDAD DE CANTABRIA

Para poder hacer programación orientada al objeto es casi imprescindible contar con facilidades
especiales en el lenguaje. El lenguaje Ada presenta un soporte completo para programación
orientada a objetos.

Las clases de objetos pueden representarse como tipos abstractos de datos. Si el objeto se va a
extender se declara como un tipo registro etiquetado. En Ada se pueden implementar como tipos de
datos privados declarados en la especificación de un paquete, en donde también se declaran todas
las operaciones asociadas a la clase de objetos.

Los tipos etiquetados se pueden extender para crear nuevos tipos de datos, que heredan los
atributos y operaciones del tipo anterior. Permiten también el polimorfismo.

Un objeto se puede implementar como una instancia (una variable) de una clase de objetos (un tipo).
También se puede implementar un objeto mediante un paquete que esté escrito en forma de
máquina de estados abstracta, pero en este caso no se puede extender sin modificar. Un paquete
de este tipo presenta en su especificación las operaciones (procedimientos y funciones) que el
objeto puede sufrir. El estado del objeto se declara (mediante variables) en el cuerpo, o parte no
visible. Las operaciones del objeto modifican el estado.

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

8

8.2. Tipos etiquetados

UNIVERSIDAD DE CANTABRIA

Contienen los atributos de la clase. Declaración:

type Una_Clase is tagged record
atributo1 : tipo1;
atributo2 : tipo2;
end record;

Es habitual hacer los atributos privados

package Nombre_Paquete is
type Una_Clase is tagged private;
-- operaciones de la clase
private
type Una_Clase is tagged record
atributo1 : tipo1;
atributo2 : tipo2;
end record;
end Nombre_Paquete;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

9

Operaciones primitivas

UNIVERSIDAD DE CANTABRIA

Los métodos de la clase se llaman operaciones primitivas
• Tienen un parámetro del tipo etiquetado
• Están escritas inmediatamente a continuación del tipo

etiquetado

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

10

8.3. Extensión de tipos
etiquetados

UNIVERSIDAD DE CANTABRIA

Declaración de un tipo extendido:

type Clase_Nueva is new Una_Clase with record
atributo3 : tipo3;
atributo4 : tipo4;
end record;
El nuevo tipo
• también es etiquetado
• hereda todos los atributos del viejo, y añade otros

Si no se desea añadir nuevos:

type Clase_Nueva is new Una_Clase with null record;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

11

Extensión de tipos
etiquetados (cont.)

UNIVERSIDAD DE CANTABRIA

La extensión puede ser con atributos privados:

with Nombre_Paquete; use Nombre_Paquete;
package Nuevo_Paquete is
type Clase_Nueva is new Una_Clase with private;
-- operaciones de la clase nueva
private
type Clase_Nueva is new Una_Clase with record
atributo3 : tipo3;
atributo4 : tipo4;
end record;
end Nuevo_Paquete;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

12

Herencia de operaciones
primitivas

UNIVERSIDAD DE CANTABRIA

Al extender una clase
• se heredan todas las operaciones primitivas del padre
• se puede añadir nuevas operaciones primitivas

La nueva clase puede elegir:
• redefinir la operación: se vuelve a escribir

- la nueva operación puede usar la del padre y hacer más

cosas: programación incremental
- o puede ser totalmente diferente

• dejarla como está

- en este caso, no escribir nada

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

13

Invocar las operaciones del
padre

UNIVERSIDAD DE CANTABRIA

Para usar una operación del padre del objeto, se hace un
cambio de punto de vista sobre ese objeto
• Ejemplo: si definimos

O : Clase_Nueva;

• El cambio de punto de vista es como un cambio de tipo:

Una_Clase(O)

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

14

8.4. Ejemplo de Herencia:
Figuras

UNIVERSIDAD DE CANTABRIA

package Figuras is

type Coordenadas is record
X,Y : Float;
end record;

type Figura is tagged record
Centro : Coordenadas;
end record;

procedure Dibuja (F : Figura);
procedure Borra (F : Figura);
function Esta_Centrada (F : Figura) return Boolean;

end Figuras;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

15

UNIVERSIDAD DE CANTABRIA

Figuras (cont.)

with Figuras; use Figuras;
package Circulos is

type Circulo is new Figura with record
Radio : Float;
end record;

procedure Dibuja (C : Circulo); -- redefinida
procedure Borra (C : Circulo); -- redefinida
-- hereda Esta_Centrada

end Circulos;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

16

UNIVERSIDAD DE CANTABRIA

Figuras (cont.)

with Figuras; use Figuras;
package Rectangulos is

type Rectangulo is new Figura with record
Ancho, Alto : Float;
end record;

procedure Dibuja (R : Rectangulo); -- redefinida
procedure Borra (R : Rectangulo); -- redefinida
-- hereda Esta_Centrada

end Rectangulos;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

5/dic/08

17

Figuras (cont.)

UNIVERSIDAD DE CANTABRIA

Ejemplo de invocación de las operaciones:
• si tenemos definido un rectángulo por ejemplo

With Rectangulos;
...

R : Rectangulos.Rectangulo;

• las dos invocaciones siguientes son equivalentes

Rectangulos.Dibuja(R); -- estilo Ada 95
R.Dibuja; -
  • Links de descarga
http://lwp-l.com/pdf4329

Comentarios de: Parte I: Programación en Ada - 8. Herencia y polimorfismo (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