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

нет смысла прикладывать особые усилия


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

Ограниченные типы

Достаточно объявить объект (переменную или константу) приватного типа, и над ним можно будет выполнять операции присваивания и проверки на ра­венство, так как эти операции выполняются поразрядно независимо от внут­ренней структуры. Существует, однако, концептуальная проблема, связанная с разрешением присваивания и проверки равенства. Предположим, что в ре­ализации массив заменен на указатель:

package Airplane_Package is

    type Airplanes is private;



private

    type Airplanes_jnfo is

     record

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

         Current_Airplanes: Integer O..Database'Last;

     end record;

   type Airplanes is access Airplanes_info;

end Airplane_Package;

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

with Airplane_Package;

procedure Air_Traffic_ControI is

Airplane_1: Airplane_Package.Airplanes;

Airplane_2: Airplane_Package.Airplanes;

begin

Airplane_1 := Airplane_2;               -- Присваивание указателей

end Air_Traffic_Control;

Если присваивание и проверка равенства не имеют смысла (например, при сравнении двух массивов, которые реализуют базы данных), язык Ada позволя­ет вам объявить приватный тип как ограниченный (limited). Объекты ограничен­ных типов нельзя присваивать или сравнивать, но вы можете явно написать свои собственные версии для этих операций. Это решит только что описанную про­блему; при преобразовании между двумя реализациями можно изменить в теле пакета явный код для присваивания и равенства, чтобы гарантировать, что эти операции по-прежнему имеют смысл.

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