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

с реальными языками программирования, которые


 

 

 

 

 

 

 

Приватные (private) типы

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

package Airplane_Package is

        type Airplane_Data is ... end record;

        type Airplanes is private;

                          -- Детали будут заданы позже

         procedure New_Airplane(Data: in Airplane_Data; I: out Integer);

         procedure Get_Airplane(I: in Integer; Data: out Airplane_Data);

private

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

record

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

            Current_Airplanes: Integer 0.. Database'Last;

end record;

end Airplane_Package;

Сам тип первоначально объявлен как приватный (private), в то время как пол­ное объявление типа записано в специальном разделе спецификации пакета, который вводится ключевым словом private. Тип данных абстрактный, пото­му что компилятор предписывает правило, по которому единицам, обращаю­щимся к пакету через with, не разрешается иметь доступ к информации, запи­санной в закрытой (private) части. Им разрешается обращаться к приватному типу данных только через подпрограммы интерфейса в открытой (public) час­ти спецификации; эти подпрограммы реализованы в теле, которое может иметь доступ к закрытой части. Так как исходный код использующих единиц не зависит от закрытой части, можно изменить объявления в закрытой части, не нарушая правильности исходных текстов использующих единиц; но, ко­нечно, нужно будет сделать перекомпиляцию, потому что изменение в закры­той части могло привести к изменению выделяемого объема памяти.

Поскольку вы не можете явно использовать информацию из закрытой ча­сти, вы должны «сделать вид», что не можете ее даже видеть.

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