# 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:

## Declaraciones de subprogramas

En ocasiones es necesario utilizar declaraciones de subprogramas, por ejemplo, si se va a utilizar la recursividad entre dos procedimientos:
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

Todas 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

Una 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

Hay 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.

## Manual de referencia de Ada

* 3.1 Declarations