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



         

Приватные типы (private types) - часть 2


Все что находится до зарезервированного слова private - это общедоступная часть описаний, которая будет "видна" всем пользователям пакета. Все что находится после зарезервированного слова private - это приватная часть описаний, которая будет "видна" только внутри пакета (и в его дочерних модулях; см. "Дочерние модули").

Может показаться противоречивым размещение приватных описаний в спецификации пакета.

Действительно, мы пытаемся скрыть детали реализации приватного объекта, и размещаем их в спецификации пакета, которая доступна.

Однако, это необходимо для программ, которые размещают экземпляры объектов приватного типа поскольку компилятор, благодаря такой информации, знает сколько необходимо зарезервировать места для размещения экземпляра объекта приватного типа.

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

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

Например:

with Accounts; use Accounts;

procedure Demo_Accounts is

Home_Account : Account; Mortgage : Account; This_Account : Account;

begin

Mortgage := Accounts.Create(Initial_Balance => 500.00); Withdraw(Home_Account, 50);

. . .

This_Account := Mortgage; -- присваивание приватного типа - разрешено

-- сравнение приватных типов if This_Account = Home_Account then

. . .

end Demo_Accounts;




Содержание  Назад  Вперед