Publicado el 6 de Junio del 2017
1.272 visualizaciones desde el 6 de Junio del 2017
291,8 KB
24 paginas
Creado hace 16a (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; -
Comentarios de: Parte I: Programación en Ada - 8. Herencia y polimorfismo (0)
No hay comentarios