Введение в программирование - Учебное пособие (Корочкин А. В.)

8.5 контролируемые типы

Контролируемые типы ( controlled types ), позволяют пользователю определить, что происходит с обьектами в начале и в конце их цикла существования.Для таких типов можно определить операцию инициа­лизации, автоматически вызываемую, когда обьект предвыполняется, и операцию финализации - когда обьект становится недоступным . Кон­тролируемые типы обеспечивают средства программирования динами­ческих структур данных, эффективного использования памяти и других ресурсов.

В языке предопределены контролируемые типы в предопределенном в пакете Ada . Finalization . При манипуляции с обьектами три дей­ствия являются фундаментальными:

•   инициализация (  initialization )

•   инализация      ( finalization    )

•   присваивание   (  assignment    ).

Каждый обьект инициализируется после создания (например, при обьявления в описании ).

Каждый обьект финализируется перед уничтожении (например, при выходе из тела подпрограммы, содержащей описание обьекта).

Операция присваивания является частью оператора присваивания, передачи параметов, инициализации и др.

Эти три фундаментальных операции автоматически обеспечиваются языком. Использование дополнительно типа Controlled предоставля­ет пользователю воможность самостоятельно управлять некоторыми из этих операций. В частности, контролируемые типы могут быть про­изводными от двух тэговых типов, определенных в пакете Ada . Fi­nalization :

type   Controlled     is    abstract     tagged     private; type    Limited_Controlled    is    abstract

tagged     limited     private;

Для этих типов в пакете определены процедуры   Initialize, Finalize Adjust. П Пример обьявления контролируемого типа с помощью пакета Ada

. Finalization :

type  Strong   is new Controlled   with   .. - ;

Спецификация пакета  Ada . Finalization :

package   Ada . Finalization   is pragma Preelaborate ( Finaiization );

type Controlled is abstract   tagged   private ;

in             out Controlled );

in             out Controlled);

in             out Controlled );

procedure              Initialize                (Object

procedure              Adjust    (Object

procedure              Finalize  (Odject

type Limited_Controlled   is abstract tagged   limited   private;

procedure   Initialize { Object : in out Limited_Controlled );

procedure   Finalize (Object : in out Limited_Controlled) ; private

...  -   не определено в языке end  Ada . Finalization ;