Ада-95. Компилятор GNAT


         

это компонент Human_Sibling, любой объект


  • Последовательная генерация объектов


Поскольку To_Controlled_Sibling - это компонент Human_Sibling, любой объект типа Controlled_Sibling каждый раз создается автоматически при создании объекта типа Human_Sibling.

Связка To_Controlled_Sibling автоматически инициализируется ссылкой на заключенный объект, поскольку атрибут 'Access применяется к имени типа записи, внутри описания, автоматически обозначая текущий экземпляр типа.

Как результат, описание:

    CH: Human_Sibling;

    автоматически объявляет объект концептуального типа Controlled_Human

    • Переопределение операций


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

    для автоматической очистки памяти, используемой First_Name, когда Human становится не доступным:

    package body Controlled_Human is

    procedure Free is new Unchecked_Deallocation (String_Ptr);

    procedure Finalize (C: in out Controlled_Sibling) is

    -- overrides Finalize inherited from Controlled

    begin

    Free (C.To_Human_Sibling.all.First_Name); end Finalize;

    end Controlled_Human;

    • Доступ ко всем компонентам и операциям


    Компоненты каждого сдвоенного объекта могут быть выбраны и использованы любым из сдвоенных объектов, используя связки. Например, операция Finalize

    (описанная для Controlled_Sibling) может использовать компонент First_Name

    (описанный для Human_Sibling).

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


  • Добавление свойств


К концептуальному типу могут быть легко добавлены новые свойства, компоненты и операции, путем расширения любого из сдвоенных объектов. Для сохранения инкапсуляции, сдвоенные типы могут быть также описаны в приватной части расширения.

  • Расширение типа


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

Это важно при производстве от сдвоенного типа Human_Sibling, который содержит компоненты другого сдвоенного типа.

Свойства другого сдвоенного типа также доступны для производства через связку To_Human_Sibling.


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