Языки программирования - концепции и принципы

нибудь из группы программистов может


Кроме того, кто- нибудь из группы программистов может скрытно проигнорировать процедуры интерфейса и написать «улучшенный» интерфейс. Мы должны найти решение, в котором имя типа находится в спе­цификации так, чтобы его можно было использовать, а детали реализации ин­капсулированы — что-нибудь вроде следующего:

package Airplane_Package is

    type Airplane_Data is ... end record;

    type Airplanes;                                                  -- Неполное объявление типа

end Airplane_Package;

package body Airplane_Package is

          type Airplanes is                                           -- Полное объявление типа

            record

              Database: array(1..1000) of Airplane_Data;

              Current_Airplanes: Integer 0...Database'Last;

           end record;

    …

end Airplane_Package;

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

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

with Airplane_Package;

procedure Air_Traffic_Control is

       Airplane_1: Airplane_Package.Airplanes;

       Airplane_2: Airplane_Package.Airplanes;



end Air_Traffic_Control;

Язык Ada задуман так, что компиляции спецификации пакета достаточно, чтобы сделать возможной компиляцию любой единицы, использующей па­кет. Фактически, не нужно даже, чтобы существовало тело пакета, когда ком­пилируется использующая единица. Но чтобы откомпилировать приведен­ную выше программу, компилятор должен знать, сколько памяти нужно вы­делить для Airplane_1 и Airplane_2; аналогично, если эта переменная исполь­зуется в выражении или передается как параметр, компилятор должен знать размер переменной. Таким образом, если представление ADT инкапсулиро­вано в тело пакета, откомпилировать программу будет невозможно.


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