Académique Documents
Professionnel Documents
Culture Documents
UPM
Objetivos
u
u
u
28/09/00
ndice
u
u
u
u
u
u
u
28/09/00
Introduccin
Lxico
Tipos de datos
Instrucciones
Subprogramas
Estructura de programas
Aspectos avanzados
Lenguajes de programacin
u
28/09/00
lxico
tipos de datos y objetos
instrucciones
subprogramas
estructura de programas
Ada
u
28/09/00
Ncleo y anexos
La norma (ISO) de Ada 95 define
un ncleo comn para todas las implementaciones
unos anexos especializados para
programacin de sistemas
sistemas de tiempo real
sistemas distribuidos
sistemas de informacin
clculo numrico
fiabilidad y seguridad
28/09/00
ndice
u
u
u
u
u
u
u
28/09/00
Introduccin
Lxico
Tipos de datos
Instrucciones
Subprogramas
Estructura de programas
Aspectos avanzados
Lxico
u
Tiempo_de_Activacin
28/09/00
ndice
u
u
u
u
u
u
u
28/09/00
Introduccin
Lxico
Tipos de datos
Instrucciones
Subprogramas
Estructura de programas
Aspectos avanzados
Tipos de datos
u
Tipado fuerte
No se pueden usar valores de un tipo en operaciones de
otro tipo sin efectuar una conversin de tipo explcita
Las operaciones dan siempre resultados del tipo correcto
28/09/00
compuestos
escalares
discretos
enumerables
caracteres
28/09/00
booleanos
reales
c. flotante
c. fija
ordinarios
decimales
10
Tipos discretos
u
Enumerables
Boolean
-- predefinido
Character -- predefinido
type Mode is (Manual, Automatic);
Enteros
Con signo
Integer -- predefinido
type Index is range 1 .. 10;
Modulares
type Octet is mod 256;
28/09/00
11
Tipos reales
u
Coma flotante
Float -- predefinido
type Length is digits 5 range 0.0 .. 100.0;
Coma fija
Ordinarios
Duration -- predefinido
type Voltage is delta 0.125 range 0.0 .. 5.25;
Decimales
type Money is delta 0.01 digits 15;
28/09/00
12
Ejemplos
type Index is range 1 .. 100;
-- entero
type Length is digits 5 range 0.0 .. 100.0; -- coma flotante
First, Last : Index;
Front, Side : Length;
Last
Side
Side
Side
Side
28/09/00
:=
:=
:=
:=
:=
First + 15;
2.5*Front;
2*Front;
Front + 2*First;
Front + 2.0*Length(First);
------
correcto
correcto
incorrecto
incorrecto
correcto
13
Formaciones
String
type Voltages is array (Index) of Voltage;
type Matrix is array (1 .. 10, 1 .. 10) of Float;
Elementos:
V : Voltages;
V(5) := 1.0;
V := (1.0, 0.0, 0.0, 0.0, 2.5,
0.0, 0.0, 0.0, 0.0, 0.0);
V := (1 => 1.0, 5 => 2.5, others => 0.0);
28/09/00
14
Registros
type State is
record
Operating_Mode : Mode;
Reference
: Voltage;
end record;
Elementos:
X : State
X.Reference := 0.0;
X := (Automatic, 0.0);
X := (Operating_Mode => Automatic,
Reference
=> 0.0);
28/09/00
15
Tipos acceso
u
28/09/00
16
Declaraciones
u
objetos
X : Real := 0.0;
J : constant Complex := (0.0, -1.0);
nmeros
Pi : constant := 3.141_592_654;
subprogramas
otras entidades
u
28/09/00
17
Elaboracin
u
u
28/09/00
18
ndice
u
u
u
u
u
u
u
28/09/00
Introduccin
Lxico
Tipos de datos
Instrucciones
Subprogramas
Estructura de programas
Aspectos avanzados
19
Instrucciones
u
Simples
Asignacin
Llamada a procedimiento
Nula
Compuestas
28/09/00
Secuencia
Bloque
Seleccin
Iteracin
20
Instrucciones simples
u
Asignacin
U := 2.0*V(5) + U0;
Llamada a procedimiento
Get(V);
Instruccin nula
null;
28/09/00
21
Secuencia
Get(V);
U := 2.0*V(65) + U0;
Sintaxis:
secuencia ::= instruccin {instruccin}
28/09/00
22
Bloque
declare
V : Voltages
begin
Get(V);
U := 2.0*V(65) + U0;
end;
Sintaxis:
bloque ::= [identificador :]
[declare
{declaracin}] -- parte declarativa
begin
secuencia
end [identificador];
28/09/00
23
Seleccin
if T <= 100.0 then
P := Max_Power;
elsif T >= 180.0 then
P := 0.0;
else
P := Control(R,t);
end if;
Sintaxis
seleccin-if ::=
if expresin-booleana then
secuencia
{elsif expresin-booleana then
secuencia}
[else
secuencia]
end if;
28/09/00
24
Start_Week;
Continue_Work;
End_Week;
Relax;
Sintaxis
seleccin-case ::=
case expresin-discreta is
alternativa
{alternativa}
end case;
alternativa ::= when lista => secuencia
lista
::= opcin {|opcin}
opcin
::= expresin |intervalo|others
Ojo! Hay que cubrir todos los valores del tipo discreto
28/09/00
25
Iteracin (1)
Hay tres clases de bucles
for I in 1..10 loop
Get(V(I));
end loop;
Ojo! El ndice del bucle for solo est definido en el cuerpo del
bucle
while T <= 50.0 loop
T := Interpolatio(T);
end loop;
loop
Get(T);
P := Control(R,T);
Put(T);
end loop;
28/09/00
26
Iteracin (2)
Sintaxis
bucle ::= [identificador :]
[esquema-de-iteracin] loop
secuencia
end loop [identificador];
esquema-de-iteracin ::=
for ndice in [reverse] intervalo-discreto
|while expresin-booleana
28/09/00
27
Iteracin (3)
Se puede salir del bucle con una instruccin exit
I := 1;
loop
Get(U);
exit when U > 80.0;
V(I) := U;
I := I+1;
end loop;
Sintaxis
exit[identificador] [when expresin-booleana];
28/09/00
28
Transferencia de control
Sintaxis
goto etiqueta;
etiqueta ::= <<identificador>>
instruccin-etiquetada ::= etiqueta instruccin
28/09/00
29
ndice
u
u
u
u
u
u
u
28/09/00
Introduccin
Lxico
Tipos de datos
Instrucciones
Subprogramas
Estructura de programas
Aspectos avanzados
30
Subprogramas
u
31
-- sin parmetros
28/09/00
32
33
28/09/00
34
28/09/00
35
Sintaxis
cuerpo-de-subprograma ::=
especificacin-de-subprograma is
{declaracin}
begin
secuencia;
end nombre;
28/09/00
36
28/09/00
37
38
ndice
u
u
u
u
u
u
u
28/09/00
Introduccin
Lxico
Tipos de datos
Instrucciones
Subprogramas
Estructura de programas
Aspectos avanzados
39
28/09/00
40
28/09/00
41
Paquetes predefinidos
u
Operaciones numricas
Ada.Numerics,
Ada.Numerics.Generic_Elementary_Functions
Entrada y salida
Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO, etc.
u
u
28/09/00
42
Entrada y salida
u
Ada.Text_IO
procedure
procedure
procedure
procedure
Get
(Item : out String);
Put
(Item : in String);
Put_Line (Item : in String);
New_Line;
Ada.Integer_Text_IO
procedure Get (Item : out Integer);
procedure Put (Item : in Integer);
Ada.Float_Text_IO
procedure Get (Item : out Float);
procedure Put (Item : in Float);
28/09/00
43
Ejemplo
with Ada.Text_IO;
procedure Hello is
begin
Put_Line("Hello!");
end Hello;
28/09/00
use Ada.Text_IO;
44
Montaje y enlace :
$ gnatbind hello.ali
$ gnatlink hello.ali
resultado: fichero hello (linux) o hello.exe (Windows)
28/09/00
45
Compilacin y montaje
RTS
ALI files
gnat.adc
application
sources
application
ALI files
GNAT
binder
application
object files
elaboration
code
GNAT
linker
ELF-32
executable
GNAT
compiler
RTS
specs
RTS &
library
object files
28/09/00
46
ndice
u
u
u
u
u
u
u
28/09/00
Introduccin
Lxico
Tipos de datos
Instrucciones
Subprogramas
Estructura de programas
Aspectos avanzados
47
Subtipos
u
48
Ejemplos
A : Small_Index := 1;
B : Big_Index;
C : Index;
A
A
A
A
A
28/09/00
:=
:=
:=
:=
:=
3;
6;
B;
C;
A + 1;
------
correcto
error
error
error si C > 5
error si A > 4
49
Tipos derivados
Un tipo derivado es una copia de otro tipo, cuyos
valores y operaciones hereda
type Surface is new Float;
---
incorrecto
correcto
28/09/00
50
Formaciones irrestringidas
u
28/09/00
:
:
:
:
:
Measurements;
Measurements (1 .. 10);
Measurements := (1..10 => 0.0);
String (1 .. 25);
String := "ejemplo";
------
incorrecto
correcto
correcto
correcto
correcto
51
Formaciones dinmicas
u
28/09/00
52
u
u
28/09/00
53
28/09/00
54
Conversin de tipos
u
28/09/00
55
Excepciones
u
28/09/00
56
Nombres de excepciones
u
: exception;
:
:
:
:
exception;
exception;
exception;
exception;
28/09/00
57
Manejadores de excepciones
u
28/09/00
58
Bibliografa
u
u
u
u
28/09/00
59