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

in out Airplanes; Data: in


    type Airplane_Data is ... end record;

    type Airplanes is

        record

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

               Current_Airplanes: Integer O..Database'Last;

        end record;

procedure New_Airplane(

       A: in out Airplanes; Data: in Airplane_Data: I: out Integer);

procedure Get_Airplane(

              A: in out Airplanes; I: in Integer; Data: out Airplane_Data);

end Airplane_Package;

Тело пакета такое же, как и раньше, за исключением того что в нем нет ника­ких глобальных переменных:

package body Airplane_Package is



       function Find_Empty_Entry... ;

         procedure New_Airplane...;

         procedure Get_Airplane...;

end Airplane_Package;

Программа, которая использует пакет, может теперь объявить одну или не­сколько переменных типа, поставляемого пакетом. Фактически тип является обычным типом и может использоваться в последующих определениях типов и как тип параметра:

with Airplane_Package;

procedure Air_Traffic_Control is

   Airplane: Airplane_Package.Airplanes;

                                -- Переменная ADT

    type Ptr is access Airplane_Package.Airplanes;

                                -- Тип с компонентом ADT

     procedure Display(Parm: in Airplane_Package.Airplanes);

                                -- Параметр ADT

     A: Airplane_Package.Airplane_Data;

     Index: Integer;

begin

A .:=... ;

Airplane_Package.New_Airplane(Airplane, A, Index);

Display(Airplane);

end Air_Traffic_Control;

За использование ADT вместо абстрактных объектов данных придется запла­тить определенную цену: так как в теле пакета больше нет ни одного неявного объекта, каждая интерфейсная процедура должна содержать дополнительный параметр, который явно сообщает подпрограмме, какой именно объект нуж­но обработать.

   Вы можете спросить: а как насчет «абстракции»? Поскольку тип Airplaines теперь объявлен в спецификации пакета, мы потеряли все абстракции; боль­ше нельзя изменить структуру данных, не повлияв на другие единицы, ис­пользующие пакет.

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