Publicado el 6 de Junio del 2017
1.469 visualizaciones desde el 6 de Junio del 2017
359,2 KB
31 paginas
Creado hace 16a (16/10/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
© Javier Gutiérrez, Michael González
16/oct/08
1
3.1. Diseño modular y
orientado a objetos
UNIVERSIDAD DE CANTABRIA
El diseño modular es una técnica que viene usándose desde
hace mucho tiempo.
El problema es cómo partir en módulos independientes
• antes solía hacerse de acuerdo a criterios funcionales
(agrupar funciones similares)
Librería de
Gráficos
Estructuras de
Datos
Operaciones de
Operaciones de
Dibujar
Dibujar
Operaciones de
Modificación
...
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
2
Partición con criterios
funcionales
UNIVERSIDAD DE CANTABRIA
Inconvenientes
• Cada figura (objeto del espacio problema) reside en varios
módulos de programa
- por tanto estos módulos no son independientes
• Un cambio en el objeto del espacio problema implica
cambiar muchos módulos, y volverlos a probar
• Añadir nueva funcionalidad implica normalmente tocar
varios módulos, y volverlos a probar
- por ejemplo, añadir una figura nueva.
• En definitiva, el software es difícil de cambiar o extender y
poco reutilizable
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
3
Diseño Orientado a Objetos
UNIVERSIDAD DE CANTABRIA
Se puede utilizar otra aproximación a la partición en módulos:
• división orientada a objetos
• cada objeto del problema real que es preciso resolver es un
módulo del programa
• se encapsulan juntas la definición del objeto y todas sus
operaciones
El diseño de programas orientado a objetos pretende:
• simplificar la modificación y extensión del software,
haciendo que la mayor parte del mismo sea reutilizable
• además es más fácil de entender ya que existe relación
directa entre la estructura del software y la del problema
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
4
Ejemplo de diseño orientado a
objetos
UNIVERSIDAD DE CANTABRIA
Librería de
Librería de
Gráficos
Gráficos
Línea recta y
Línea recta y
sus operaciones
sus operaciones
Rectángulo y sus
Rectángulo y sus
operaciones
operaciones
Círculo y sus
Círculo y sus
operaciones
operaciones
...
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
5
Ventajas
UNIVERSIDAD DE CANTABRIA
Si el diseño es orientado al objeto:
• el cambio interno en un objeto afecta a un solo módulo
• en muchos casos, extender la funcionalidad no implica
modificar el software existente, sino sólo añadir nuevos
objetos
• el software es más reutilizable
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
6
3.2. Concepto de clase y objeto
UNIVERSIDAD DE CANTABRIA
Un objeto es un elemento de programa que se caracteriza por:
• atributos o campos: son datos contenidos en el objeto, y
que determinan su estado
• operaciones o métodos: son operaciones con las que
podemos solicitar información del objeto, o modificarla
- Están compuestas por secuencias de instrucciones que
operan con los atributos, y que pueden invocar
operaciones de otros objetos
Una clase representa una definición de un módulo de
programa, a partir de la cual se pueden crear muchos objetos
• Cada uno de estos objetos es una instancia de la clase
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
7
Concepto de clase y objeto
(cont.)
UNIVERSIDAD DE CANTABRIA
Se intenta siempre corresponder
los objetos de un programa con
objetos del problema que éste
resuelve.
Ejemplo: mostrar uno o varios
gráficos de funciones de una
variable.
Los gráficos representan una
clase de objetos.
Gráfico
Título
Puntos (X,Y) del gráfico
Número de puntos
Títulos de los ejes
Crear un gráfico nuevo
Añadir un punto
Pintar el gráfico
Poner el título
Cada gráfica individual
representa un objeto de la clase
“Gráfico”.
atributos
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
operaciones
8
Ejemplo
UNIVERSIDAD DE CANTABRIA
with Plot_Windows; use Plot_Windows;
procedure Experimento is
Plot : Plot_Window_Type:=
Plot_Window("Experimento","Tiempo (s)","Temperatura (C)");
begin
Set_Graph_Title(Plot,"Exp. 7");
-- Anadir los puntos
Add_Point(Plot,0.0,20.4);
Add_Point(Plot,1.0,23.2);
Add_Point(Plot,2.0,24.8);
Add_Point(Plot,3.0,25.7);
Add_Point(Plot,4.0,26.1);
Add_Point(Plot,5.0,26.5);
-- Pintar el gráfico
Wait(Plot);
end Experimento;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
9
3.2. Paquetes Ada
UNIVERSIDAD DE CANTABRIA
Motivación:
• Encapsular juntas declaraciones de constantes, tipos y
subprogramas
• Programación orientada a objetos: encapsulamiento de
clases con especificación de una interfaz visible, y
ocultando los detalles internos
Los paquetes Ada tienen dos partes:
• parte visible o especificación
- a su vez, tiene una parte no visible o privada
• cuerpo, con los detalles internos
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
10
Declaración de paquetes
UNIVERSIDAD DE CANTABRIA
Se ponen en la parte de declaraciones de un programa (o en
un fichero aparte como veremos más adelante)
Especificación
package Nombre is
declaraciones de datos y tipos;
declaraciones de tipos y constantes privadas;
declaraciones de cabeceras de subprogramas;
declaraciones de especificaciones de paquetes;
private
otras declaraciones necesarias más abajo;
declaraciones completas de los tipos y constantes privados
end Nombre;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
11
Declaración de paquetes
(cont.)
UNIVERSIDAD DE CANTABRIA
Cuerpo
package body Nombre is
declaraciones de datos y subprogramas;
declaraciones de subprogramas y paquetes de la
especificación;
begin
instrucciones de inicialización;
end Nombre;
Las instrucciones de inicialización
• se ejecutan una sóla vez antes de que se use el paquete
• son opcionales (junto a su begin)
• sirven para inicializar variables declaradas en el paquete
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
12
Uso de un paquete
UNIVERSIDAD DE CANTABRIA
Uso de objetos de la parte visible de un paquete:
Paquete.objeto
Con cláusula use se puede usar el objeto directamente
use Paquete;
Con una cláusula use type se pueden usar los operadores de
un tipo directamente
use type Paquete.Tipo;
• Si no se hace, los operadores se tendrían que usar como
funciones:
c:=Paquete."+"(a,b); -- en lugar de c:=a+b;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
13
Ejemplo: Números complejos
UNIVERSIDAD DE CANTABRIA
package Complejos is
type Complejo is private;
function Haz_Complejo (Re,Im : Float) return Complejo;
function Real(C : Complejo) return Float;
function Imag(C : Complejo) return Float;
function "+" (C1,C2 : Complejo) return Complejo;
function Image(C : Complejo) return String;
private
type Complejo is record
Re,Im : Float;
end record;
end Complejos;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
14
Ejemplo (cont.)
package body Complejos is
UNIVERSIDAD DE CANTABRIA
function "+" (C1,C2 : Complejo) return Complejo is
begin
return (C1.Re+C2.Re,C1.Im+C2.Im);
end "+";
function Haz_Complejo (Re,Im : Float) return Complejo is
begin
return (Re,Im);
end Haz_Complejo;
function Imag (C : Complejo) return Float is
begin
return C.Im;
end Imag;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
15
Ejemplo (cont.)
UNIVERSIDAD DE CANTABRIA
function Image (C : Complejo) return String is
begin
if C.Im>=0.0 then
return Float’Image(C.Re)&" + "&Float’Image(C.Im)&" J";
else
return Float’Image(C.Re)&" - "&Float’Image(abs C.Im)&" J";
end if;
end Image;
function Real (C : Complejo) return Float is
begin
return C.Re;
end Real;
end Complejos;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
16
Ejemplo de uso
with Complejos, Ada.Text_IO;
use Ada.Text_IO;
use type Complejos.Complejo;
UNIVERSIDAD DE CANTABRIA
procedure Prueba_Complejos is
C1,C2,C3 : Complejos.Complejo;
begin
C1:=Complejos.Haz_Complejo(3.0,4.0);
C2:=Complejos.Haz_Complejo(5.0,-6.0);
Put_Line("C1="&Complejos.Image(C1));
Put_Line("C2="&Complejos.Image(C2));
C3:=C1+C2;
Put_Line("Parte real C3="&Float’Image(Complejos.Real(C3)));
Put_Line("Parte imag C3="&Float’Image(Complejos.Imag(C3)));
end Prueba_Complejos;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
16/oct/08
17
3.3. Compilación separada
UNIVERSIDAD DE CANTABRIA
En Ada se pueden compilar separadamente:
• subprogramas
• especificaciones de paquetes
• cuerpos de paquetes
Cada uno de ellos se llama “unidad de librería”
Para usar una unidad compilada separadamente se debe usar
una cláusula with.
El orden de compilación, en algunos compiladores, es
importante. En Gnat no
Comentarios de: Parte I: Programación en Ada - 3. Modularidad y programación orientada a objetos (0)
No hay comentarios