Ada presentacion 2

Download Report

Transcript Ada presentacion 2

Ada
2º Parte (variables, ámbitos , subrutinas ,
tipos abstractos de datos y excepciones)
Variables en Ada
•
El concepto de variable en Ada en esencia es el mismo que une a todos los LP
Imperativos , en Ada son llamados objetos (espacios de memoria) cuya información
puede cambiar durante la ejecución del programa (la información cambia dentro de el
conjunto que abarque su tipo Integer , Float etc.) .
• <identificador> : <tipo> ;
• <identificador> : <tipo> := <valor>;
Asignación
• La asignación en Ada es denotada por := , y ésta
se realiza de derecha a izquierda siempre , es
decir a la izquierda de := siempre debe haber una
variable a la cual se le asignara un valor. A la
derecha puede haber , operaciones , funciones etc.
•
Al ser un lenguaje fuertemente tipado Ada , no
permite asignaciones entre distintos tipos incluso si
un conjunto es subconjunto de otro .
Tipos primitivos proveídos por el
lenguaje.
• Los tipos primitivos de datos proveídos por Ada son seis :
•
•
•
•
•
•
Integer : Tipo que abarca los enteros positivos y negativos .
Natural : Este tipo de dato contiene números positivos mas el cero.
Positive: Solamente permite números positivos.
Float: Tipo que almacena cualquier número real .
Char : Guarda un carácter.
String: Almacena un número definido de caracteres .
Nótese que Natural y Positive son subtipos restringidos de Integer y la
razón porque Ada los usa es para poder identificar errores más
fácilmente.
Ejemplo de declaración de un string .
Nombre_Completo : String (1 .. 40);
Enlaces de Tipos a variables y
tiempo de vida
Enlaces de tipos a variables. Comprobación de tipos.
Los enlaces de tipos a variables y su comprobación de tipos en nuestro lenguajes ocurren
en tiempo de compilación y son estáticos. Las comprobaciones de tipos en Ada son dos
las del tipo legal para el compilador y las hechas por casting , debido a su fuerte
tipamiento Ada no acepta comprobaciones implícitas es decir no hay equivalencia de
tipos.
Tiempo de vida de las variables
Ada tiene variables estáticas (globales) que son declaradas al inicio del procedimiento
principal del programa , su tiempo de vida es durante toda la ejecución del programa
•
Stack dinámicas :locales son liberadas al momento de terminar la ejecución de su bloque
correspondiente .Son declaradas al comienzo de cada subprograma
•
Heap dinámicas punteros access liberados en cuanto termina la ejecución del bloque de
instrucciones correspondiente
Ámbito de las variables
•
Ada distingue entre la declaraciones de nuevos identificadores y las instrucciones que los
usan. Obviamente las declaraciones deben preceder a las instrucciones.
Un bloque consta de dos partes la primera que es la parte de declaraciones de variables y
la otra que es la parte de las instrucciones que comienza con begin y termina con end
<nombre bloque> .
Procedure ejemplo is
P,Q : Integer :=1;
Begin
P=Q+5;
End ejemplo;
Tipos abstractos de datos en Ada
En nuestro LP los tipos abstractos de datos son llamados paquetes
(packages) , su función principal como todo tipo abstracto es la
ocultación de información para un mejor modelamiento de nuestro
programa .
Un paquete de datos (Package o clase en c++) se divide en dos
partes principales :
• La interfaz que es homologo al public en c++ y es donde se declaran
todas las constantes , funciones y procedimientos del paquete .Su
importancia es vital ya que es la parte que se relaciona con el mundo
exterior de la clase .
• La segunda parte de el paquete es el cuerpo es el homologo a la parte
privada en c++ a diferencia de c++ , dentro del cuerpo de el paquete
van las especificaciones de las funciones y procedimientos(métodos de
la clase).
Estructuras
• Hay un tipo de paquete que puede tener todos sus datos públicos , este
sería algo muy parecido a una estructura en c++ (struct) , se declaran
como una interfaz con variables sin funciones ni procedimientos, por
ende tampoco tiene body este paquete.
Subrutinas
• Ada tiene dos tipos de subrutinas los procedimientos (procedure ,
bloques que realizan instrucciones sin retornar ningún valor ) y las
funciones (function , que retornan un valor).
• Las acciones a realizar en un subprograma se describen dentro de lo
que se denomina “cuerpo del subprograma”, el que es declarado de la
manera usual en la parte declarativa de, por ejemplo, un bloque u otro
subprograma.
Funciones.
• Todas las funciones comienzan con la palabra reservada function
seguida del nombre (identificador) de la función. Si existen parámetros,
después del identificador se entrega una lista con los parámetros
(separados por “;”) encerrada entre paréntesis. Luego de la lista de
parámetros (si existe) viene la palabra return y el tipo (o subtipo) del
valor de retorno de la función. Tanto el tipo de los parámetros como del
valor de retorno debe ser indicado con un identificador de tipo (o
subtipo) declarado previamente.
Procedimientos
Los procedimientos son subprogramas que no retornan un valor y son
llamados como instrucciones.
•
•
•
•
Los parámetros pueden ser de tres tipos: in, out o in out. Si no se indica el
modo se asume que el parámetro es de entrada (in).
1) in: El parámetro formal es una constante y se permite sólo la lectura del valor
asociado al parámetro real.
2) in out: El parámetro formal es una variable y se permite tanto la lectura como
la actualización del valor asociado al parámetro real.
3) out: El parámetro formal es como una variable, se permite sólo la
actualización del valor asociado al parámetro real. No se puede leer su valor.
Excepciones
• Cuando ocurre un error durante la ejecución
del programa decimos que ha ocurrido una
excepción. Ada nos permite capturar las
excepciones y ejecutar un bloque especial
de código denominado manejador de
excepciones.
• Al igual que en los tipos de datos, Ada
proporciona algunas excepciones
predefinidas y nos permite definir nuevas
excepciones.
Excepciones predefinidas
•
•
•
•
Excepciones predefinidas
Las excepciones predefinidas de Ada son:
1. Constraint_Error: Esta excepción se eleva cuando:
Hay un índice fuera de rango (por ejemplo, intentar acceder al elemento
31 de una formación de 30 elementos).
• 2. Numeric_Error: Se eleva cuando se produce un desbordamiento en
una operación aritmética o una división por cero.
• 3. Program_Error: Se eleva cuando se ha producido algún error de
programación que no pudo ser detectado en tiempo de compilación. Por
ejemplo, cuando una función termina sin ejecutar ninguna sentencia
return.
• 4. Storage_Error: Se eleva cuando se hay algún problema de falta de
memoria. Por ejemplo, cuando se ha creado un procedimiento recursivo
que no finaliza nunca o cuando creamos una tabla demasiado grande
para la memoria de nuestro ordenador.
Manejo de excepciones
• Declaración de excepciones
• A parte de las excepciones predefinidas, también se
pueden declarar excepciones propias. Para hacerlo, se
debe utilizar el tipo de dato exception. Por ejemplo:
• Dato_Erroneo : exception;
• Cuando se detecta el error y se quiere que Ada lo considere
como un error se debe elevar la excepción. Para esto se
debe utilizar la frase raise. Por ejemplo :
• if Dato > 500 then
•
raise Dato_Erroneo;
• end if;