Programación en Ada/Declaraciones
Una declaración es una construcción del lenguaje que asocia un nombre con una entidad. Ada distingue cuidadosamente entre declaraciones (que introducen nuevos identificadores) y sentencias (que utilizan dichos identificadores). Hay dos clases de declaraciones:
- Implícitas: que ocurren como consecuencia de la semántica de otra construcción.
- Explícitas: aparecen en el texto del programa y pueden ser:
- Declaraciones de tipo, subtipos, variables y constantes (objetos), excepciones, especificaciones de subprogramas o paquetes, cláusulas de representación o cláusulas use.
- Los cuerpos de los subprogramas, paquetes y tareas.
Declaraciones de subprogramas
editarEn ocasiones es necesario utilizar declaraciones de subprogramas, por ejemplo, si se va a utilizar la recursividad entre dos procedimientos:
procedure
P;-- Declaración de P, necesaria para utilizara en Q.
procedure
Qis
-- Cuerpo de Q.
begin
P;-- ...
end
Q;procedure
Pis
-- Repite especificación para declarar el cuerpo.
begin
Q;-- ...
end
P;
También puede resultar útil declarar las especificaciones de los subprogramas en el comienzo del programa a modo de índice, sobre todo si hay muchos cuerpos.
Vista de una entidad
editarTodas las declaraciones contienen una definición de vista de una entidad. Una vista consiste en:
- Un identificador de la identidad.
- Características específicas de la vista que afectan al uso de la entidad a través de dicha vista.
En la mayoría de los casos, una declaración contiene la definición de la vista y de la entidad misma, pero una declaración de renombrado, sin embargo, no define una entidad nueva, sino que define una nueva vista de una entidad.
Parte declarativa
editarUna secuencia de declaraciones constituye una parte declarativa. Las siguientes construcciones de Ada tienen asociada una parte declarativa:
- Bloque.
- Cuerpo de un subprograma.
- Cuerpo de un paquete.
- Cuerpo de una tarea.
- Cuerpo de una entrada a un objeto protegido.
Por ejemplo, en un procedimiento, la parte declarativa comprendería las sentencias entre procedure y begin. El cuerpo de un procedimiento puede contener en su parte declarativa el cuerpo de otro procedimiento. Por tanto, los procedimientos pueden ser declarados sin límite de niveles de anidamiento sucesivos.
En ocasiones, las declaraciones requieren una segunda parte (se dice que requieren una terminación). La declaración y su terminación deben tener el mismo nombre y deben ocurrir en la misma región declarativa. Por ejemplo, un paquete necesita un cuerpo (que sería la terminación) si en su parte declarativa contiene alguna declaración que requiere una terminación que no se encuentre en dicha declaración.
Región declarativa de una declaración
editarHay que distinguir entre región declarativa de una declaración y parte
declarativa. En el supuesto de una declaración de una variable (por
ejemplo I: Integer := 0;
) se extiende por una región de texto que abarca
sólo una línea, sin embargo, otras declaraciones más complejas como
procedimientos y paquetes constituyen muchas más líneas de texto. En
Ada, existen las siguientes construcciones que tienen asociada una
región declarativa:
- Cualquier declaración que no sea terminación de otra.
- Bloque
- Bucle
- Construcción accept.
- Manejador de excepción.
La región declarativa de cada una de estas construcciones comprende:
- El texto de la construcción misma.
- Texto adicional, determinado de esta manera:
- Si una declaración está incluida en la región, también lo está su terminación.
- Si una unidad de biblioteca está incluida en la región, también lo están sus unidades hijas.
- Si está incluido el requerimiento de compilación separada, también lo está su subunidad correspondiente.
Así, se pueden extraer las siguientes conclusiones:
- La especificación de un paquete y su cuerpo forman parte de la misma región declarativa porque el cuerpo es la terminación de la especificación, por lo que no se puede declarar la misma variable en la especificación y en el cuerpo.
- Ya que la declaración y el cuerpo de un paquete pueden estar en compilaciones distintas, la región declarativa de una declaración de paquete puede abarcar porciones de texto en varias unidades de compilación distintas.
- Todas las unidades de biblioteca son hijas de Standard, luego toda unidad de biblioteca pertenece a su región declarativa.