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