Publicado el 14 de Enero del 2017
910 visualizaciones desde el 14 de Enero del 2017
1,4 MB
6 paginas
Creado hace 23a (07/03/2001)
Introducción al lenguaje Ada95
Historia
z Concurso de ideas del Departamento de
Defensa norteamericano (1979)
z Primer estándar: Ada 83
z Utilizado en la industria militar, aeroespacial,
sistemas empotrados, etc.
z Ada influye en lenguajes posteriores (C++,
ObjectPascal, etc.)
2
ProgramaciónConcurrente2001
Historia (2)
Características
z Segundo estándar: Ada 95
z Actualiza el lenguaje: orientación a objetos,
monitores (objetos protegidos), anexos
especializados...
z La aparición de Linux provoca una expansión de
Ada como lenguaje de uso general: compilador
gratuito GNAT
z Lenguaje procedimental, con sintaxis tipo Algol
(Pascal)
z Orientado a grandes proyectos
z Sintaxis “verbosa”, en aras de la legibilidad
z Alta portabilidad
3
ProgramaciónConcurrente2001
4
ProgramaciónConcurrente2001
Características (2)
Elementos del lenguaje
z Su creación fue obra de un comité de expertos,
siguiendo criterios meditados y juiciosos:
y
lenguaje ortogonal
fuerte coherencia interna
y
z Ada 83 reunía CASI TODAS las prestaciones
consideradas buenas en los lenguajes de la
época:
y TADs, concurrencia, genéricos, excepciones
y pero no incluía orientación a objetos
z Tipos de datos
z Estructuras algorítmicas
z Subprogramas
z Excepciones
z Paquetes
z Genéricos
z Concurrencia
z Orientación a objetos
z Biblioteca estándar
z Anexos especializados
5
ProgramaciónConcurrente2001
6
ProgramaciónConcurrente2001
1
Hola, mundo
-- ejemplo de programa
with Text_IO;
procedure hola is
begin
Text_IO.Put_Line (“hola, mundo”);
end hola;
Hola, mundo Hola, mundo Hola,
with Text_IO; use Text_IO;
procedure hola10veces is
saludo : string := “hola, mundo”;
begin
for i in 1 .. 10 loop
Put_Line (saludo);
end loop;
end hola10veces;
7
ProgramaciónConcurrente2001
8
ProgramaciónConcurrente2001
Algunos detalles
Elementos léxicos
z No distingue mayúsculas de minúsculas
z Se pueden usar acentos y eñes en los
identificadores
z Comprobación muy estricta de tipos
z Las sentencias siempre terminan en punto y
coma
z Comentarios con doble guión: -- texto
z Identificadores tipo Pascal
z Cadenas entre “comillas dobles”
z Caracteres con ‘comilla simple’
z Números tipo Pascal, pero además:
y 123_456_789 (se pueden emplear separadores)
y 2#1001001# (se puede expresar la base)
y 16#1F2A# (hexadecimal)
y 12#40#E3 (es 4x12 x 123)
9
ProgramaciónConcurrente2001
10
ProgramaciónConcurrente2001
Tipos de datos
Tipos escalares
z Elementales
y Escalares (numéricos y enumerados)
y Accesos (punteros)
z Compuestos
y Arrays (vectores y strings)
y Records (registros)
y Tagged records (objetos POO)
y Tasks (tareas)
y Protected objects (objetos protegidos)
z Discretos
y enteros (integer, natural, positive...)
y modulares (mod N)
y enumerados (boolean, character...)
z Reales
y coma flotante (float, duration...)
y coma fija
11
ProgramaciónConcurrente2001
12
ProgramaciónConcurrente2001
2
Tipos predefinidos
z integer
z natural (de 0 en adelante)
z positive (de 1 en adelante)
z boolean (false,true)
z float
z character, wide_character
z string, wide_string
z duration
Declaraciones
x,y : Integer; -- variables enteras
a : Boolean := false; -- variable inicializada
diez : constant
dos : constant
constant Integer := 10; -- constante
constant := 2; -- otra constante
13
ProgramaciónConcurrente2001
14
ProgramaciónConcurrente2001
Operadores
z Los típicos y además:
y exponenciación: a**b
y módulo: a mod b
y resto: a rem b
y valor absoluto: abs a
y concatenar cadenas y vectores: a & b
Operadores (2)
z Programadores de C, ojo a estos:
igualdad: a=b
y
y no igualdad: a/=b
y expresiones lógicas: and, or, xor, not
15
ProgramaciónConcurrente2001
16
ProgramaciónConcurrente2001
Enumerados y rangos
Declaración de tipos simples
z Rangos: integer range 1 .. 10;
z Enumerados: type tipo is (valor,valor,...valor);
z Atributos: tipo’First, tipo’Last.
z Un tipo enumerado define un rango
z type nombre is definición;
z type nombre is new definición;
z subtype nombre is definición;
17
ProgramaciónConcurrente2001
18
ProgramaciónConcurrente2001
3
Declaraciones
Declaraciones (2)
type dia_semana is (lun,mar,mie,jue,vie,sab,dom);
subtype laborable is dia_semana range lun..vie;
un_dia : laborable;
otro_dia : dia_semana;
type DiaMes is 1 .. 31;
subtype i30 is integer range 1 .. 31;
dia : DiaMes := 15;
num30 : i30 := 5;
numero : integer;
...
numero := dia; -- incorrecto, tipos distintos
numero := Integer(dia); -- correcto
numero := num30; -- correcto, es subtipo
...
Numero := 33;
dia := DiaMes(numero); -- error en t.ejec.
19
ProgramaciónConcurrente2001
20
ProgramaciónConcurrente2001
Entrada y salida
Entrada y salida
z Text_IO: entrada y salida de strings
y Put(string), Get(string), Put_Line(string), New_Line
z Integer_IO, Enumeration_IO, Float_IO:
e/s de otros tipos
y Rutinas Put(dato) y Get(variable)
y Hay que instanciarlos al tipo deseado (ver ejemplo)
with Text_IO;
int_io is new Text_IO.Integer_IO(Integer);
dias_io is new Text_IO.Enumeration_IO(dias);
hoy : dias := miércoles;
...
Text_IO.Put(“Introduce un número entero: “);
int_io.Get(número);
Text_IO.New_Line;
int_io.Put(123);
dias_io.Put(hoy);
21
ProgramaciónConcurrente2001
22
ProgramaciónConcurrente2001
Estructuras algorítmicas
Sentencias simples
z Sentencias simples
z Bloque begin...end;
z Sentencias condicionales: if, case
z Sentencias iterativas: for, while, loop
z Subprogramas: function, procedure
z Las sentencias siempre terminan en punto y
z Asignación: var := expr;
z Sentencia nula: null;
z Llamada a procedimiento:
proc(parm1,parm2...);
coma
23
ProgramaciónConcurrente2001
24
ProgramaciónConcurrente2001
4
Bloque begin...end
Sentencias condicionales
z declare
declaraciones locales
begin
sentencias
exception
manejo de excepciones
end;
25
ProgramaciónConcurrente2001
26
z if expr then
z case expr is
sentencia
[elsif sentencia]
[elsif sentencia]
...
[else sentencia]
end if;
when caso =>
sentencias
...
[when others => sent ]
end case;
z expr: sólo tipos discretos
z caso: valor, rango, o lista de
valores v1|v2|v3...
z Todos los casos han de estar
contemplados
ProgramaciónConcurrente2001
Sentencias iterativas
Ejemplos de for
z while expr loop
sentencia
end loop;
z for ident in [reverse] rango loop
sentencia
end loop;
z loop
sentencia
end loop;
27
for i in 1 .. 10 loop
put(“hola, i=”); put(i); new_line;
end loop;
for i in reverse 1 .. 10
for i in lunes .. viernes
for i in dias range lunes .. miércoles
for i in dias’First .. dias’Last
for i in laborables
ProgramaciónConcurrente2001
28
ProgramaciónConcurrente2001
Exit y goto
Atributos
loop
if una_condición then exit
exit when
end loop;
exit when condición; -- otra forma
exit; end if;
goto Pabajo; end if;
if condición then goto
...
<<Pabajo>>
Put (“código después de la etiqueta”);
z Son valores asociados a tipos u objetos, que se
representan con un asterisco seguido del
nombre del atributo y, en algunos casos,
parámetros: tipo’atributo(paráms)
z Suelen usarse para devolver propiedades de un
tipo de datos, o efectuar operaciones
predefinidas sobre un tipo.
29
ProgramaciónConcurrente2001
30
ProgramaciónConcurrente2001
5
Atributos típicos
Ejemplos de atributos
z T’First
z T’Last
z T’Range
z T’Length
z T’Succ(e)
z T’Pred(e)
z T’Max(e1,e2)
z T’Min(e1,e2)
z T’Pos(e)
z T’Val(e)
z T’Value(string)
z T’Image(e)
type dias is (lunes,martes,miercoles,jueves,
viernes,sabado,domingo);
subtype laborables is dias range lunes .. viernes;
for dia in lunes .. sabado loop
Text_IO.Put (dias’Image(dia));
end loop;
hoy := lunes;
mañana := dias’Succ(hoy);
ayer := dias’Pred(hoy); --error
31
ProgramaciónConcurrente2001
32
ProgramaciónConcurrente2001
Ejemplo de ’Value e ’Image
Subprogramas
X : integer;
begin
Text_IO.Get (cadena);
x := Integer’Value(cadena);
Text_IO.Put (Integer’Image(x));
end;
z Procedimientos:
y modo del parámetro: in, out o in out
y paso de parámetros por posición o por nombre
y parámetros por omisión (default)
z Funciones:
y
los parámetros siempre son in (no se pueden
modificar)
z Se permite sobrecarga, recursividad y
anidamiento.
33
ProgramaciónConcurrente2001
34
ProgramaciónConcurrente2001
Procedimientos
Funciones
z procedure nombre (decl1; decl2; ...) is
declaraciones locales
begin
cuerpo del procedimiento
end nombre;
z Modo de acceso a los parámetros:
in: el parámetro funciona como una constante
y
y out: el parámetro funciona como una variable sin
inicializar
in out: el parámetro funciona como una variable
inicializada
ProgramaciónConcurrente2001
y
35
z function nombre (paráms) return tipo is
declars. locales
begin
cuerpo
end nombre;
z Sólo admite parámetros in
36
ProgramaciónConcurrente2001
6
Comentarios de: Introducción al lenguaje Ada95 (0)
No hay comentarios