Справочник Ada 2005
7.1 Спецификации и объявления пакетов
Пакет, как правило, представлен двумя частями: спецификацией_пакета и телом_пакета. Каждый пакет имеет спецификацию_пакета, но не все пакеты имеют тело_пакета.
Синтаксис
спецификация_пакета ::=
package имя_определяемого_программного_блока is
{основной_элемент_объявления}
[private
{основной_элемент_объявления}]
end [[имя_родительского_блока.]идентификатор]
package имя_определяемого_программного_блока is
{основной_элемент_объявления}
[private
{основной_элемент_объявления}]
end [[имя_родительского_блока.]идентификатор]
Если идентификатор или имя_родительского_блока.идентификатор появляются в конце спецификации_пакета, то эта последовательность лексем повторяет имя_определяемого_программного_блока.
Правила легальности
Объявление_пакета или объявление_генерического_пакета требует завершения (тела), если оно содержит любой основной_элемент_объявления, который требует завершения, но чье завершение не находится в его спецификации_пакета.
Статическая семантика
Первый список основных_элементов_объявления в спецификации_пакета пакета, отличного от генерического формального пакета, называется видимой частью пакета. Необязательный список основных_элементов_объявления после ключевого слова private (любой спецификации_пакета) называется частной частью пакета. Если ключевое слово private отсутствует, пакет имеет неявную пустую частную часть. Каждый список основных_элементов_объявления в спецификации_пакета образует список объявлений пакета.
Элемент, объявленный в частной части пакета, виден только в области объявления самого пакета (включая любые дочерние блоки — см. 10.1.1). Напротив, расширенные имена, обозначающие элементы, объявленные в видимой части, могут использоваться даже за пределами пакета; кроме того, прямая видимость таких элементов может быть достигнута с помощью клаузов_использования (см. 4.1.3 и 8.4).
Динамическая семантика
Выполнение объявления_пакета состоит из выполнения его основных_элементов_объявления в заданном порядке.
ПРИМЕЧАНИЯ
1 Видимая часть пакета содержит всю информацию, которую другой программный блок может узнать о пакете.
2 Если объявление находится непосредственно в спецификации пакета, и объявление имеет соответствующее завершение в виде тела, то это тело должно находиться непосредственно в теле пакета.
Примеры
Пример объявления пакета:
package Рациональные_Числа is
type Рациональное is
record
Числитель : Целое;
Знаменатель : Положительное;
end record;
record
Числитель : Целое;
Знаменатель : Положительное;
end record;
function "=" (X,Y : Рациональное) return Булево;
function "/" (X,Y : Целое) return Рациональное; -- для построения рационального числа
function "+" (X,Y : Рациональное) return Рациональное;
function "-" (X,Y : Рациональное) return Рациональное;
function "*" (X,Y : Рациональное) return Рациональное;
function "/" (X,Y : Рациональное) return Рациональное;
end Рациональные_Числа;
function "-" (X,Y : Рациональное) return Рациональное;
function "*" (X,Y : Рациональное) return Рациональное;
function "/" (X,Y : Рациональное) return Рациональное;
end Рациональные_Числа;
Существуют также многочисленные примеры объявлений пакетов в предопределённой среде языка (см. Приложение A).