Introduccin al lenguaje Ada95 - PowerPoint PPT Presentation

1 / 92
About This Presentation
Title:

Introduccin al lenguaje Ada95

Description:

Utilizado en la industria militar, aeroespacial, sistemas ... Tagged records. Tasks. Compuestos. Protected objects. Tipos Num ricos. Variables y asignaciones ' ... – PowerPoint PPT presentation

Number of Views:55
Avg rating:3.0/5.0
Slides: 93
Provided by: xxx997
Category:

less

Transcript and Presenter's Notes

Title: Introduccin al lenguaje Ada95


1
Introducción al lenguaje Ada95
2
Historia
  • Concurso de ideas del Departamento de Defensa
    norteamericano (1974)
  • Primer estándar Ada 83
  • Utilizado en la industria militar, aeroespacial,
    sistemas empotrados, etc.
  • Ada influye en lenguajes posteriores (c,
    ObjectPascal, etc.)

3
Historia(2)
  • Segundo estándar Ada 95
  • Actualiza el lenguaje orientación a objetos,
    monitores (objetos protegidos), anexos
    especializados ...
  • La aparición de Linux provoca una expansión de
    Ada como lenguaje de uso general compilador
    gratuito GNAT

4
Elementos del lenguaje
  • Tipos de datos
  • Estructuras algorítmicas
  • Subprogramas
  • Excepciones
  • Paquetes
  • Genéricos
  • Concurrencia
  • Orientación a objetos
  • Biblioteca estándar
  • Anexos especializados

5
Objetivos principales
  • Legibilidad
  • Facilitar lectura. Evitar notación concisa
  • Tipado fuerte
  • Impedir confusión entre conceptos lógicamente
    distintos.
  • Construcción de grandes programas
  • Mecanismos de encapsulado para compilación
    separada

6
Objetivos principales (2)
  • Manejo de excepciones
  • Control de los errores
  • Abstracción de datos
  • Mayor transportabilidad y mejor mantenibilidad
  • Procesamiento paralelo
  • Mecanismos para permitir ejecutar actividades
    (tareas) de forma paralela
  • Unidades genéricas
  • Especialmente útil para la creación de bibliotecas

7
Un programa en Ada
  • Programa pral. Servicios de otras unidades de
    biblioteca

--Ejemplo de programa with Text_IO --cláusula de
contexto procedure hola is --procedimiento
principal --Parte de declaraciones begin
--Cuerpo de sentencias ejecutables
Text_IO.Put_Line(Hola, mundo) end hola
8
Un programa en Ada (2)
-- ejemplo de programa with Text_IO use
Text_IO procedure hola is saludo STRING
(hola, mundo) begin for i in 1..10 loop
Put_Line(SALUDO) end loop end hola
9
Algunos detalles
  • No distingue mayúsculas de minúsculas
  • Se pueden usar acentos y eñes en los
    identificadores
  • Comprobación muy estricta de tipos
  • Las sentencias siempre terminan en punto y coma

10
Elementos léxicos
  • Comentarios con doble guión -- texto
  • Identificadores tipo Pascal
  • Cadenas entre comillas dobles
  • Caracteres con comilla simple
  • Números (literales numéricos)
  • Enteros
  • Reales

11
Elementos léxicos
  • Más sobre literales numéricos
  • Se pueden emplear separadores
  • 123_456_789
  • Literales enteros y reales con exponente
  • 9.84E2 19E2
  • Se puede expresar la base
  • 21001001
  • Un literal con base también puede tener
    exponente)
  • 1240E3 (es 4 x 12 x 123)

12
Tipos de Datos
Elementales
Compuestos
Arrays
Records
Tagged records
Tasks
Protected objects
Accesos
Escalares
Discretos
Reales
Tipos Numéricos
Enumeración
Coma Fija
Coma flotante
Enteros
Enteros con signo
Ordinarios
Decimales
Modulares
13
Variables y asignaciones
  • nombre_de_variable tipo

x INTEGER --una variable de tipo integer
llamada x x, y, z INTEGER
  • Asignación

x, y, z INTEGER 0
14
Declaración de constantes
  • variable pero poniendo la palabra reservada
    constant
  • En el caso de constantes numéricas se puede
    omitir el tipo (declaración de número)

c constant INTEGER 10 --Declaración de
la --constante c pi
constant 3.1416 --Declaración del número pi
15
Declaración de tipos
  • type nombre is definición
  • type nombre is new definición
  • subtype nombre is definición

type byte is range 0..255 subtype byte is
INTEGER range 0..255 type Mienterocorto is new
INTEGER range 0..255
16
Tipos predefinidos
  • Un tipo está caracterizado por un conjunto de
    valores y un conjunto de operaciones
  • Paquete STANDAR

17
Tipos enteros
  • integer
  • natural (de 0 en adelante)
  • positive (de 1 en adelante)
  • mod N (entero sin signo, rango 0..N)
  • Se puede imponer una restricción al tipo integer
    (range)

p INTEGER range 1..10 x INTEGER range
1..IJ t mod 10 --Entero rango 0..9
18
Tipos enteros (2)
  • Algunas implementaciones
  • long_integer
  • short_integer
  • OJO, el rango de valores de estos tipos depende
    de la implementación
  • Como hacer programas más transportables ?
  • Atributos
  • Son valores asociados a tipos u objetos que
    suelen usarse para devolver propiedades de un
    tipo de datos o efectuar operaciones predefinidas
    sobre un tipo

19
Tipos enteros (3)
  • Atributos tipoatributo(params)
  • Por ejemplo

subtype NATURAL is INTEGER range
0..INTEGERLAST subtype POSITIVE is INTEGER
range 1..INTEGERLAST
20
Tipos enumerados
type COLOR is (Rojo, Ambar, Verde) type DIA is
(lun, mar, mie, jue, vie, sap, dom) subtype
LABORABLE is DIA range lun..vie
--Restricciones --Hay un tipo enumeración
predefinido, el CHARACTER type CHARACTER is
(nul,...,A,B,...,del)
21
Atributos típicos
  • Atributos aplicables a todos los tipos escalares
    (enteros y enumerados)
  • TFirst
  • TLast
  • TRange
  • TLength
  • TSucc(e)
  • TPred(e)
  • TMax(e1,e2)
  • TMin(e1,e2)
  • TPos(e)
  • TVal(e)
  • TValue(string)
  • TImage(e)

22
Ejemplos de atributos
type DIAS is (lun, mar, mie, jue, vie, sap,
dom) subtype LABORABLE is DIAS range lun..vie
--Restricciones for dia in lun..sap loop
Text_IO.Put(DIASIMAGE(dia)) end loop hoy
lunes mañana DIASSUCC(hoy) ayer
DIASPRED(hoy) -- error if hoyltmañana then
Text_IO.Put(Hoy es menor que mañana) end
if
23
Ejemplos de atributos (2)
x INTEGER begin Text_IO.Get (cadena) x
INTEGERVALUE (cadena) Text_IO.Put
(INTEGERIMAGE(x)) end
24
Tipo booleano
  • El tipo booleano es un tipo enumerado predefinido
    cuya declaración puede entenderse como

type BOOLEAN is (FALSE,TRUE)
25
Tipos reales
  • Tipo predefinido FLOAT
  • Algunas implementaciones
  • Short_Float
  • Long_Float
  • El programador también puede definir sus propios
    reales
  • Coma fija
  • Coma flotante

26
Coma fija y coma flotante
--Coma flotante type rflotante is digits 5
range 1.0..1.0 --se exigen una precisión de
al menos 5 digitos --significativos --Coma
fija ordinario type rfija1 is delta 0.01 range
1.0..1.0 --Se especifica un error absoluto
(0.01) --Coma fija decimal type rfija2 is delta
0.01 digits 5
27
Conversión de tipos
  • Ada gt Tipado fuerte
  • No permite nunca mezclar tipos diferentes
  • Conversión
  • Nuevo_Tipo(Expresión_Tipo_Original)

28
Operadores
  • Los típicos y además
  • exponenciación ab
  • modulo a mod b
  • resto a rem b
  • valor absoluto abs a
  • Comprobaciones de pertenencia aplicables a todos
    los tipos escalares
  • in, not in (aunque técnicamente no son
    operadores)

29
Arrays
  • Nombre_Array array (tipo_discreto) of
    Tipo_Elemento

A array (INTEGER range 1..6) of REAL AA
array (INTEGER range 0..2, INTEGER range 0..3) of
REAL N INTEGER 5 B array (INTEGER range
1..N) of BOOLEAN HORAS_TRABAJADAS array (DIA)
of REAL
30
Arrays (2)
  • Recordando atributos
  • AAFIRST(1) es 0
  • AAFIRST(2) es 0
  • AALAST(1) es 2
  • AALAST(2) es 3
  • AALENGTH(1) es 3
  • AALENGHT(2) es 4
  • AARANGE(1) es 0..2
  • AARANGE(2) es 0..3

31
Inicialización de arrays
  • Agregados (forma literal de un valor formación)
  • (0.0, 0.0, 0.0)
  • Un agregado debe ser completo
  • Se puede declarar una formación como constante en
    cuyo caso el valor inicial es, evidentemente,
    obligatorio

32
Inicialización de arrays (2)
A array (1..6) of REAL (0.0, 0.0, 0.0, 0.0,
0.0, 0.0) AA array (0..2,0..3) of REAL
((0.0, 0.0, 0.0, 0.0),
(0.0, 0.0, 0.0, 0.0),
(0.0, 0.0, 0.0, 0.0)) MAÑANA
constant array (DIA) of DIA (mar, mie,
jue, vie, sap, dom, lun)
33
Tipos arrays
  • type Nombre is array (tipo_discreto) of
    Tipo_Elemento
  • Además en Ada se introduce el concepto de array
    irrestringido (no se dan las restricciones de los
    índices)

type VECTOR is array (1..6) of REAL type VECTOR
is array (INTEGER range ltgt) of REAL VVECTOR(1..5
) type MATRIZ is array (INTEGER range ltgt,
INTEGER range ltgt) of REAL --Los límites
pueden ser cualquier expresión y se
evalúa --cuando se encuentra la restricción del
índice M MATRIZ(1..N,1..N)
34
Tipos arrays (2)
  • Otra forma dar los limites arrays contantes
  • Los límites se deducen a partir del valor inicial
    (el límite infierior sería SFIRST siendo S el
    subtipo del índice)

type L is array (DIAS range ltgt) of
DIAS SIGUIENTE_DIA_LABORABLE constant L
(mar, mie, jue, vie, lun) --OJO !!! type
MATRIZ is array (INTEGER range ltgt, INTEGER range
ltgt) of REAL MIMATRIZ constant MATRIZ
((1.0, 0.0), (0.0, 1.0))
35
Agregado por nombre
  • Agregados por posición
  • (0.0, 0.0, 0.0)
  • Agregados por nombre (no importa el orden)
  • (1gt0.0, 2gt0.0, 3gt0.0)

type MATRIZ is array (INTEGER range ltgt, INTEGER
range ltgt) of REAL MIMATRIZ constant MATRIZ
(1gt(1gt1.0, 2gt0.0),
2gt(1gt1.0, 2gt0.0)) DIA_TRABAJO constant
array(DIA) of BOOLEAN (lu..viegtTRUE,
sabdomgtfalse)
36
Más detalles sobre agregados
  • Uso de others (última opción)
  • No se puede mezclar en un mismo agregado notación
    por nombre y por posición (ojo si en el caso de
    los distintos niveles en un agregado
    multidimensional)

MIMATRIZ constant array(1..5,1..2) of REAL
(1gt(1gt1.0,
2gt0.0),
2gt(1.0, 0.0),
othersgt(othersgt0.0)))
37
Más sobre arrays
  • Asignación
  • Igual tipo y el mismo número de elementos
  • Igualdad y desigualdad (igual tipo)
  • número de componentes y además componentes
    iguales

VVECTOR(1..5) WVECTOR(0..4) ... VW --V y
W son del mismo tipo y ambos tienen 5 comp.
38
Más sobre arrays (2)
  • Se puede hacer referencia a un trozo de un array
    monodimensional gt rodajas

VVECTOR(1..5) WVECTOR(0..4) V(1..2)
W(3..5)
39
Más sobre arrays (3)
  • Operaciones sobre arrays de una dimensión
  • and, or, xor, not gt arrays booleanos
  • , / (ya vimos la regla),
  • gt, gt, gt, gt (orden lexicográfico)
  • Operadores binarios gt mismo tipo y mismo número
    de componentes
  • Nuevo operador (concatenación de formaciones
    de una dimensión)

40
Strings
  • Es un array de caracteres
  • type STRING is array (POSITIVE range ltgt) of
    CHARACTER

S STRING(1..7) G constant STRING
(H,O,L,A) --Notación alternativa y más
cómoda G constant STRING hola
41
Registros
type FECHA is record DIA INTEGER range
1..31 MES NOMBRE_MES --lo suponemos
definido AÑO INTEGER end
record FFECHA F.DIA4 GFECHA(4,JUL,1776)
H (MESgtJUL,DIAgt4,AÑOgt1976)
42
Estructuras algorítmicas
  • Sentencias simples
  • Bloque begin..end
  • Sentencias condicionales if, case
  • Sentencias iterativas for, while, loop
  • Subprogramas function, procedure

43
Sentencias simples
  • Asignación var expr
  • Sentencia nula null
  • Llamada a procedimiento
  • proc(parm1,parm2,...)

44
Bloque begin..end
nombre_de_bloque declare iINTEGER0
--las declaraciones van aquí begin ii1
--Las sentencias van aquí exception
--manejo de exepciones end nombre_de_bloque
45
Ambito
declare iINTEGER0 begin ...
declare kINTEGERi iINTEGER0
begin ... end ... end
ámbito de la I externa
visibilidad de la I externa
ámbito de la I externa
ámbito de la I externa
46
Ambito (2)
externo declare IINTEGER0 begin
... declare KINTEGERI
IINTEGER JINTEGERexterno.I --nos
referimos a la I externa begin ...
end ... end
47
Sentencias condicionales
if expr then sentencia elsif
sentencia elsif sentencia ... else
sentencia end if
  • case expr is
  • when caso gt
  • sentencias
  • ...
  • when others gt sent
  • end case
  • expr sólo tipos discretos
  • caso valor, rango, o lista de valores
    v1v2v3...
  • Todos los casos han de estar contemplados

48
Sentencias iterativas
while expr loop sentencia end loop for ident
in reverse rango loop sentencia end
loop loop sentencia end loop
49
Ejemplos de for
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..miercoles for i in
diasfirst..diaslast for i in laborables
50
Exit y goto
loop if una_condición then exit end
if -- o también exit when
otra_condición end loop if condición then
goto Pabajo end if ... ltltPabajogtgt Put (Código
después de la etiqueta)
51
Subprogramas
  • Procedimientos
  • modo del parámetro in, out o in out
  • paso de parámetros por posición o por nombre
  • parámetros por omisión (default)
  • Funciones
  • los parámetros siempre son in (no se pueden
    modificar)
  • Se permite sobrecarga, recursividad y anidamiento

52
Procedimientos
  • Modo de acceso a los parámetros
  • in el parámetro funciona como una constante
  • out el parámetro funciona como una variable sin
    inicializar
  • in out el parámetro funciona como una variable
    inicializada

procedure nombre (decl1decl2...) is
declaraciones locales (variables, tipos,
subtipos, procedimientos,...) begin cuerpo del
procedimiento end nombre
53
Funciones
  • Sólo admite parámetros in

function nombre (params) return tipo is
declaraciones locales (variables, tipos,
subtipos, procedimientos,...) begin cuerpo de
la función end nombre
54
Declaraciones, ámbito y visibilidad
procedure F(...) procedure G(...) is begin
F(...) end G procedure F(...) is begin
G(...) end F
procedure P is IINTEGER0 procedure Q
is kINTEGERI IINTEGER
JINTEGER begin ... end Q begin
... Q(...) end P
55
Estructura general de un programa en Ada
  • Programa Ada unidades distribuidas en uno o
    varios ficheros.
  • Unidades
  • Subprogramas
  • Paquetes
  • Tareas
  • Objetos protegidos

56
Paquetes
  • En general un programa Ada se compone de un
    conjunto de paquetes y un programa principal
  • La cláusula de contexto with sirve para declarar
    que se se van a usar los servicios de un paquete
  • Paquete
  • Especificación (.ads)
  • Implemetación(.adb)

57
Formato general de un paquete
package nombre_paquete is parte visible
declaraciones (variables, tipos, subtipos,
procedimientos,...) private declaraciones
privadas end nombre_paquete
package body nombre_paquete is más
declaraciones y desarrollo del paquete begin
secuencia de sentencias end nombre_paquete
58
Más sobre paquetes
  • Los entes declarados dentro del paquete tienen el
    mismo tiempo de vida que el paquete en sí
  • Los paquetes se pueden declarar en cualquier
    parte declarativa, es decir, en un bloque,
    subprograma o en otro paquete
  • Acceso a los elementos de un paquete Cláusula
    use o bien notación .
  • Un paquete puede consistir sólo en una
    especificación

59
Tipos private y limited private
  • Al poner un tipo como private su definición
    queda oculta
  • El usuario del paquete sólo podrá utilizar con él
    las operaciones declaradas en la parte pública
    del paquete, además de , y /
  • Si se pone como limited private entonces se
    deshabilitan también , y /

60
Ejemplo
package Manejo_De_Claves is type Clave is
private Clavenula constant Clave
procedure Tomar_Clave(C out Clave) function
"lt"(X, Y in Clave) return Boolean private
Max constant 2 16 - l type Clave is
range 0 .. Max Clavenula constant Clave
0 end Manejo_De_Claves
61
Ejemplo (2)
package body Manejo_De_Claves is procedure
Tomar_Clave(C out Clave) is begin
Cuerpo del procedimiento end Tomar_Clave
function "lt"(X, Y in Clave) return Boolean is
begin Cuerpo del operador end "lt" end
Manejo_De_Claves
62
Renombrado
  • Se puede aplicar a variables, constantes,
    excepciones, subprogramas y paquetes

procedure TomaClave(Cout Clave)
renames Manejo_de_Claves.Tomar_Clave functio
n (X,YVECTOR) return REAL renames ESCALAR
function DIEZ return CIFRA_ROMANA renames
X package P renames PILA
63
Unidades genéricas
  • Unidades con parámetros que se pueden concretar
    para diferentes instancias de la unidad

generic type TElemento is private procedure
Algo(Elementoin TElemento) is
Declaraciones begin Acciones end Algo
64
Unidades genéricas (2)
  • Para utilizar el procedimiento Algo primero se
    deberán crear instancias para los tipos
    apropiados

... procedure Algo_Entero is new
Algo(integer) procedure Algo_Carácter is new
Algo(character) ... Algo_Entero(30) Algo_Carácte
r(a) ...
65
Paquetes genéricos (PG)
  • Los paquetes genéricos son los que soportan la
    genericidad de los tipos abstractos de datos en
    este lenguaje

66
Formato general de un PG
generic zona de declaración de parámetros
formales package nombre_paquete_generico is
zona de uso de los parámetros formales end
nombre_paquete_generico
package body nombre_paquete_generico is
desarrollo del paquete end nombre_paquete_generico

67
Formato general de un PG (2)
  • La forma de usar un paquete genérico es crear una
    instancia del PG en la que se especifiquen todos
    los parámetros formales requeridos

package nombre_instancia is new nombre_paquete
generico (parametros actuales, ...)
68
Ejemplo
generic MAXPOSITIVE type ITEM is
private package PILA is procedure
PONER(XITEM) function QUITAR return
ITEM end PILA
package body PILA is P array (1..MAX) of
ITEM CIMA INTEGER range 0..MAX --cuerpo
de PONER y QUITAR begin CIMA0 end PILA
69
Ejemplo (2)
... declare package MI_PILA is new
PILA(100,REAL) use MI_PILA begin ...
PONER(X) ... YQUITAR ... end
70
Parámetros formales en PG
  • Los parámetros formales pueden ser objetos,
    tipos, subprogramas o paquetes
  • Los parámetros de un PG pueden tener un valor por
    defecto
  • Se declaran de distinta forma según su naturaleza

71
Manejo de Excepciones
  • En Ada, cuando se producen errores durante la
    ejecución de un programa se elevará una excepción

72
Excepciones predefinidas
  • CONSTRAINT_ERROR
  • Generalmente algo fuera de rango
  • NUMERIC_ERROR
  • Errores numéricos (p.ej. división por 0)
  • PROGRAM_ERROR
  • Errores estructura de control (p.ej. se llega al
    end de una función, se llama a un programa cuyo
    cuerpo no se ha definido,..)

73
Excepciones predefinidas (2)
  • STORAGE_ERROR
  • Falta de espacio de memoria
  • TASKING_ERROR
  • Errores relacionados con tareas

74
Ejemplo
begin --secuencia de sentencias exception
when NUMERIC_ERRORCONSTRAINT_ERROR gt
Put(Numeric o constraint error) ...
when STORAGE_ERROR gt Put(Falta de
memoria) ... when others gt
Put(Se produjo otro tipo de error)
... end
75
Dónde se tratan ?
  • Los manejadores de excepciones pueden aparecer al
    final de
  • un bloque
  • un cuerpo de subprograma
  • un cuerpo de paquete o
  • un cuerpo de tarea
  • No puede devolverse nunca el control a la unidad
    donde se elevó la excepción

76
Propagación de excepciones
  • Si una unidad no proporciona un manejador para
    una determinada excepción, ésta se propaga
    dinámicamente
  • Se termina la ejecución de la unidad
  • La excepción se eleva al punto donde se invocó a
    dicha unidad y así sucesivamente
  • Por tanto, las excepciones se propagan
    dinámicamente y no estáticamente

77
Excepciones definidas por el Programador
  • Es posible lanzar una excepción
  • raise EXCEPCION
  • Sintaxis de declaración de excepciones
  • Miexcepción exception
  • Las reglas de manejo y propagación son idénticas
    a las excepciones predefinidas

78
Más sobre excepciones
  • Las acciones llevadas a cabo por el manejador
    pueden tener que realizarse en varias capas
  • A veces es conveniente manejar una excepción y
    luego propagar esa misma excepción (raise)

79
Ámbito de las excepciones
  • Las excepciones siguen las mismas reglas de
    ámbito que otras entidades
  • Una excepción puede propagarse fuera de su
    ámbito, aunque a partir de ahí solo puede
    manejarse anónimamente mediante others

80
Ámbito de las excepciones (2)
  • Una excepción elevada en una declaración se
    propaga un nivel hacia fuera
  • Si un subprograma termina debido a una excepción,
    no podemos suponer nada sobre los parámetros
    reales out o in out

81
Punteros (access types)
  • Dos clases de punteros
  • punteros para memoria dinámica
  • punteros generales
  • Los punteros (access), por defecto, sólo sirven
    para trabajar con memoria dinámica
  • Si se quiere trabajar con punteros a objetos
    estáticos, hay que usar punteros generales
    (access all)
  • Para poder tomar la dirección de un objeto, éste
    debe haber sido declarado expresamente como
    aliased.

82
Punteros de memoria dinámica
type cosa is record c1,c2integer
end record type ptr_cosa is access cosa -- tipo
puntero ptr ptr_cosa c cosa ptr new
cosa(20,30) -- creación dinámica ptr.c1
15 -- acceso a un campo ptr.all c --
acceso a todo el objeto
83
Punteros generales
type cosa is record c1,c2integer
end record type ptr_cosa is access all cosa ptr
ptr_cosa cosa1 aliased cosa cosa2
cosa ptr new cosa(20,30) ptr
cosa1access -- correcto ptr cosa2access --
ERROR ptr cosa2Unchecked_access -- correcto
84
Borrado de memoria dinámica
  • El lenguaje Ada permite recolección de basura
    (pero ningún compilador la soporta)
  • Borrado explícito con Ada.Unchecked_Deallocation
  • with Ada.Unchecked_Deallocation
  • ...
  • procedure Free is new Ada.Unchecked_Deallocation(c
    osa,ptr_cosa)
  • ...
  • Free(ptr)

85
Parámetros access
  • Un parámetro de un procedimiento puede ser in,
    out o access.
  • En este último caso, el parámetro se comporta
    como un tipo puntero
  • procedure P (Xaccess Cosa)
  • ...
  • c aliased cosa
  • P(caccess)

86
Un apunte más sobre punteros
  • Se puede imponer una restricción de lectura a un
    puntero de forma que no pueda modificar el objeto
    al que apunta

type Punt_Const_Int is access constant
integer ptr Punt_Const_Int i aliased
integer ptriaccess ptr.all3 --error, no se
puede modificar i a --través de ptr
87
Entrada / Salida
  • Funciones básicas
  • get(X), put(X) siendo X de tipo character,
    string, integer, float, enumeration
  • get_line(S,L), put_line(s), siendo S de tipo
    string y L la longitud leida
  • new_line, skip_line
  • Para realizar E/S de ristras o caracteres basta
    incluir la cláusula de contexto with TEXT_IO

88
Entrada / Salida (2)
  • Para realizar E/S de los tipos escalares es
    necesario crear una instancia del paquete para
    este tipo
  • En cualquier caso hay que utilizar la cláusula
    with TEXT_IO, puesto que estos paquetes se
    encuentran en dicha librería

package Día_IO is new Enumeration_IO(Dia) package
Mientero_IO is new Integer_IO(Mientero) package
rf_IO is new Float_IO(rf) package rfija1_IO is
new Fixed_IO(rfija1) package rfija2_IO is new
Decimal_IO(rfija1) package Natural_IO is new
Modular_IO(rfija1)
89
Más sobre cadenas
  • Ada ofrece tres tipos posibles de ristras de
    caracteres
  • Ristras de tamaño fijo (ya hemos hablado de
    ellas strings)
  • with Ada.Strings.Fixed
  • Ristras de tamaño limitado
  • with Ada.Strings.Bounded
  • Ristras de tamaño dinámico
  • with Ada.Strings.Unbounded

90
Ficheros
  • Ficheros de texto
  • with Text_IO
  • Ficheros uniformes
  • Ficheros secuenciales
  • with Sequential_IO
  • Ficheros de acceso directo
  • with Direct_IO
  • Existe un cuarto paquete que contiene las
    declaraciones de las excepciones usadas en estos
    tres paquetes (IO_EXCEPTIONS)

91
Funciones numéricas
  • Paquete Ada.Numerics
  • Funciones matemáticas elementales (sqrt, log,
    sin, cos,...)
  • Ada.Numerics.Generic_Elementary_Functions
  • Números aleatorios
  • Discretos
  • Ada.Numerics.Discrete_Random
  • Coma flotante
  • Ada.Numerics.Float_Random

92
Pragmas
  • Algunas veces es necesario hacer una
    observación al margen al compilador
  • pragma nombre(params)
  • En general, se pueden colocar en cualquier punto
    donde pueda haber declaraciones o sentencias
    (aunque algunos pragmas pueden tener
    restricciones en este sentido)
  • Algunos pragmas
  • Inline, Interface, Optimize, Priority, ...
Write a Comment
User Comments (0)
About PowerShow.com