Ада-95. Компилятор GNAT

       

Тело пакета


Тело пакета содержит все детали реализации сервисов, указаных в спецификации пакета.

Схематическим примером тела пакета, для показанной выше спецификации, может служить:

package body Odd_Demo is

type List is array (1..10) of Integer; Storage_List : List; Upto : Integer;

procedure Insert(Item : in Integer; Success : out Boolean) is

begin

. . . end Insert;

function Is_Present(Item : in Integer) return Boolean is

begin

. . . end Is_Present;

begin -- действия по инициализации пакета -- это выполняется до запуска основной программы! for I in Storage_List'Range loop

Storage_List(I) := 0; end loop; Upto := 0; end Odd_Demo;

Все ресурсы, указанные в спецификации пакета, будут непосредственно доступны в теле пакета без использования дополнительных инструкций спецификации контекста with и/или use.

Необходимо заметить, что тело пакета, также как и спецификация пакета, может содержать описания типов, переменных, подпрограмм и т.д.

При этом, ресурсы, описанные в теле пакета, не доступны для использования в другом самостоятельном модуле (пакете или подпрограмме).

Любая попытка обращения к ним из другого модуля будет приводить к ошибке компиляции.

Переменные, описанные в теле пакета, сохраняют свои значения между успешными вызовами публично доступных подпрограмм пакета.

Таким образом, мы можем создавать пакеты, которые сохраняют информацию для более позднего использования (другими словами: сохранять информацию о состоянии).

Раздел "begin ... end", в конце тела пакета, содержит перечень инструкций инициализации для этого пакета.

Инициализация пакета выполняется до запуска на выполнение главной подпрограммы.

Это справедливо для всех пакетов.

Следует заметить, что стандарт не определяет порядок выполнения инициализации различных пакетов.



Содержание раздела