Publicado el 15 de Octubre del 2018
606 visualizaciones desde el 15 de Octubre del 2018
255,5 KB
87 paginas
Creado hace 16a (25/02/2009)
ditdit
UPM
Introducción a Ada
Juan Antonio de la Puente
DIT/UPM
Índice
u Introducción
– cómo escribir programas sencillos
u Datos e instrucciones
– aspectos básicos del lenguaje
u Abstracción de datos
– tipos de datos abstractos
u Programación con objetos
– herencia, polimorfismo, clases e interfaces
u Otros temas
25/02/09
Introducción a Ada
2
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
Introducción
i
o
n
o
t
n
A
n
a
u
J
©
25/02/09
Introducción a Ada
3
Ada
u Es un lenguaje imperativo, descendiente de Pascal
– estructura en bloques
– fuertemente tipado
– orientado a objetos
u Es un lenguaje pensado para realizar sistemas
empotrados de gran dimensión
– concurrencia y tiempo real incluidos en el lenguaje
– módulos (paquetes) que se compilan por separado
u Tres versiones normalizadas
– Ada 83 (ISO 8652:1987)
– Ada 95 (ISO 8652:1995)
– Ada 2005 (ISO 8652:1995 /Amd 1:2007)
25/02/09
Introducción a Ada
4
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Estructura de un programa en Ada
u Un programa en Ada se compone de una o más
unidades de programa
– subprogramas (procedimientos y funciones)
– paquetes (módulos)
– tareas y objetos protegidos (ejecución concurrente)
u Los dos primeros se pueden compilar por separado
– un programa se hace a base de componentes
– hay un procedimiento principal que se ejecuta inicialmente
» a partir de ahí se pueden ejecutar otras unidades de programa
– normalmente se encapsula todo lo demás en paquetes
» hay una biblioteca de paquetes predefinidos
» se pueden añadir otros para cada programa concreto
– el compilador comprueba todas las interfaces
25/02/09
Introducción a Ada
5
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Procedimientos
u Una abstracción básica que representa una acción:
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
procedure <nombre> [<parámetros>] is
<declaraciones>
begin
<instrucciones>
end <nombre>;
i
o
n
o
t
n
A
n
a
u
J
©
u Las declaraciones se elaboran al comenzar la ejecución
– reservar memoria, asignar valor inicial, etc.
u Las instrucciones se ejecutan después
25/02/09
Introducción a Ada
6
Ejemplo
with Ada.Text_IO;
procedure Hello is
use Ada.Text_IO;
begin
Put(“Hello”); New_Line;
end Hello;
-- paquete de biblioteca
-- acceso al paquete
25/02/09
Introducción a Ada
7
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Compilación con GNAT
u Compilación y montaje:
$ gcc -c hello.adb # compila el fichero fuente
$ gnatbind hello
$ gnatlink hello
# genera código de elaboración
# monta los módulos objeto
u Se puede hacer todo de una vez:
$ gnatmake hello
# compila todo lo que haga falta
u Ejecución:
$ ./hello
25/02/09
Introducción a Ada
8
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Paquetes
u Un paquete es un módulo donde se declaran datos, tipos
de datos, operaciones, etc.
u Tiene dos partes (que se compilan por separado)
– especificación: define la interfaz visible del paquete
» declaraciones de tipos (y a veces objetos) de datos
» declaraciones de operaciones (subprogramas)
– cuerpo: contiene los detalles de la implementación
» tipos, objetos y subprogramas adicionales (para uso local)
» cuerpos de subprogramas declarados en la especificación
Todo lo que aparece en el cuerpo es invisible para el resto del
programa
25/02/09
Introducción a Ada
9
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Especificación de un paquete
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
package <nombre> is
<declaraciones>
end <nombre>;
i
o
n
o
t
n
A
n
a
u
J
©
25/02/09
Introducción a Ada
10
Ejemplo
package Simple_IO is
procedure Get (F : out Float);
procedure Put (F : in Float);
procedure Put (S : in String);
procedure New_Line;
end Simple_IO;
25/02/09
Introducción a Ada
11
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Utilización de paquetes
with Simple_IO, Ada.Numerics.Elementary_Functions;
procedure Root is
use Simple_IO, Ada.Numerics.Elementary_Functions;
X : Float;
begin
Put(“Enter a number :”);
Get(X);
Put(“The square root of “); Put(X);Put(“ is “);
Put(Sqrt(X));
New_Line;
end Root;
25/02/09
Introducción a Ada
12
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Cuerpo de un paquete
package body <nombre> is
<declaraciones>
[begin
<instrucciones>]
end <nombre>;
25/02/09
Introducción a Ada
13
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Ejemplo (1)
with Ada.Text_IO, Ada.Float_Text_IO;
package body Simple_IO is
procedure Get (F : out Float) is
begin
Ada.Float_Text_IO.Get(F);
end Get;
procedure Put (F : in Float) is
begin
Ada.Float_Text_IO.Put(F,Exp=>0);
end Put;
-- (continúa)
25/02/09
Introducción a Ada
14
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Ejemplo (2)
procedure Put (S : in String) is
begin
Ada.Text_IO.Put(S);
end Put;
procedure New_Line is
begin
Ada.Text_IO.New_Line;
end New_Line;
end Simple_IO;
25/02/09
Introducción a Ada
15
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Compilación con GNAT
u Ahora tenemos varios ficheros fuente:
hello.adb, simple_io.ads, simple_io,adb
u Hay que compilarlos todos:
$ gcc -c simple_io.ads
$ gcc -c root.adb
$ gcc -c simple_io.adb
u Montaje y enlace :
$ gnatbind root.ali
$ gnatlink root.ali
u Se puede hacer todo de una vez:
$ gnatmake root
25/02/09
Introducción a Ada
16
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Estructuras de control
Selección
if … then … else … end if;
Bucles
while … loop … end loop;
for i in 1..N loop … end loop;
loop … end loop;
Salida de bucle
exit when … ;
25/02/09
Introducción a Ada
17
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Ejemplo
with Simple_IO, Ada.Numerics.Elementary_Functions;
procedure Roots is
use Simple_IO, Ada.Numerics.Elementary_Functions;
X : Float;
begin
loop
Put(“Enter a number :”);
Get(X);
exit when X = 0.0;
Put(“The square root of “); Put(X); Put(“ is “);
if X > 0.0 then
Put(Sqrt(X));
else
Put(“not real”);
end if;
New_Line;
end loop;
end Roots;
25/02/09
Introducción a Ada
18
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Errores y excepciones
u Una excepción es una manifestación de un cierto tipo de
error
– las excepciones tienen nombre, pero no son objetos
– cuando se produce un error, se eleva la excepción
correspondiente
– se abandona la ejecución normal y se pasa a ejecutar un
manejador asociado a la excepción
– se busca un manejador en el mismo cuerpo o bloque
» si no lo hay, la excepción se propaga al nivel superior
– si no se encuentra ningún manejador, se termina el programa
25/02/09
Introducción a Ada
19
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Ejemplo
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
with Simple_IO, Ada.Numerics.Elementary_Functions;
procedure Roots is
use Simple_IO, Ada.Numerics.Elementary_Functions;
X : Float;
begin
loop
begin
Put(“Enter a number :”);
Get(X);
exit when X = 0.0;
Put(“The square root of “); Put(X); Put(“ is “);
Put(Sqrt(X));
exception
when Ada.Numerics.Argument_Error =>
Put ("not real");
end;
New_Line;
end loop;
end Roots;
25/02/09
Introducción a Ada
20
Biblioteca estándar
Paquetes predefinidos para:
u Operaciones con caracteres y tiras
– Ada.Characters, Ada.Strings, etc.
u Cálculo numérico
– Ada.Numerics, Ada.Numerics.Generic_Elementary_Functions, etc.
» también números complejos, vectores y matrices
u Entrada y salida
– Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO, etc.
u Secuencias (streams)
u Contenedores (listas, conjuntos, etc.)
u Interfaz con el sistema operativo
u Interfaz con otros lenguajes (C, C++, Fortran, COBOL)
u Otros
25/02/09
Introducción a Ada
21
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
Tipos de datos
i
o
n
o
t
n
A
n
a
u
J
©
25/02/09
Introducción a Ada
22
Tipos de datos
u Un tipo de datos es un conjunto de valores con un
conjunto de operaciones primitivas asociadas
u Ada es estricto con los tipos de datos
– No se pueden usar valores de un tipo en operaciones de otro tipo
sin efectuar una conversión de tipo explícita
– Las operaciones dan siempre resultados del tipo correcto
u Una clase es la unión de varios tipos con características
comunes
25/02/09
Introducción a Ada
23
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Clasificación de los tipos de datos
elementales
compuestos
tipos
acceso
escalares
formaciones
registrosetiquetadosprivadostareasprotegidos
tiras
discretos
numéricos
reales
enumerables
enteros
c. flotante c. fija
caracteres booleanos otros
modularescon signo
ordinariosdecimales
25/02/09
Introducción a Ada
24
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Tipos discretos
u Enumerables
Boolean
Character
Wide_Character
type Mode is (Manual, Automatic);
-- predefinido
-- predefinido
-- predefinido
-- declarado
u Enteros
– Con signo
Integer
type Index is range 1 .. 10;
-- predefinido
-- declarado
– Modulares
type Octet is mod 256;
-- declarado
25/02/09
Introducción a Ada
25
7
0
0
2
-
5
0
0
2
e
t
n
e
u
P
a
l
e
d
i
o
n
o
t
n
A
n
a
u
J
©
Tipos reales
u Coma flotante
Float
Comentarios de: Introducción a Ada (0)
No hay comentarios