Справочное руководство Ada 95
7.1 Спецификации и объявления пакетов
Пакет обычно предоставляется в двух частях: спецификации пакета и теле пакета. Каждый пакет имеет спецификацию, но не все пакеты имеют тело.
Синтаксис
package_declaration ::= package_specification;
package_specification ::=
package defining_program_unit_name is
{basic_declarative_item}
[private
{basic_declarative_item}]
end [[parent_unit_name.]identifier]
package defining_program_unit_name is
{basic_declarative_item}
[private
{basic_declarative_item}]
end [[parent_unit_name.]identifier]
Если в конце спецификации пакета появляется идентификатор или parent_unit_name.identifier, то эта последовательность лексем должна повторять имя defining_program_unit_name.
Правила легальности
Объявление пакета или объявление обобщенного пакета требует завершения (тела), если оно содержит любой элемент объявления, который требует завершения, но чье завершение не находится в его спецификации пакета.
Статическая семантика
Первый список элементов объявления спецификации пакета, отличного от обобщенного формального пакета, называется видимой частью пакета. Необязательный список элементов объявления после зарезервированного слова 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;
Также существуют многочисленные примеры объявления пакетов в предопределенной среде языка (см. Приложение A).