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



         

Родственное наследование - часть 2


/p>

Для построения комбинации из этих двух типов, необходимо создать два родственных типа Human_Sibling и Controlled_Sibling, путем соответственного производства от Human и Limited_Controlled.

Два этих типа, вместе формируют концептуальный тип Controlled_Humans:

with Dynamic_Humanity, Ada.Finalization;

package Controlled_Human is

type Human_Sibling; -- ввиду взаимозависимости типов, необходимо использование -- неполного описания типа

type Controlled_Sibling (To_Human_Sibling: access Human_Sibling) is

new Ada.Finalization.Limited_Controlled with null record; -- тип To_Human_Sibling является связкой с Human_Sibling

procedure Finalize (C: in out Controlled_Sibling);

type Human_Sibling is new Dynamic_Humanity.Human with

record

To_Controlled_Sibling: Controlled_Sibling (Human_Sibling'Access); -- To_Controlled_Sibling является связкой с Controlled_Sibling. -- Этот компонент автоматически инициализируется ссылкой -- на текущее значение экземпляра Human_Sibling end record;

-- примитивные операции типа Human (могут быть переопределены)

end Controlled_Human;

Таким образом, эти типы - взаимосвязаны, и для обращения от одного сдвоенного объекта к другому:

Human_Sibling обладает компонентом связки с To_Controlled_Sibling

который подходит к типу Controlled_Sibling.


  • Controlled_Sibling обладает компонентом связки с To_Human_Sibling

    который подходит к типу Human_Sibling.

    Следует заметить, что эти связки имеют различную природу.

    Связка To_Controlled_Sibling - это связка членства: любой объект типа Controlled_Sibling заключен в каждый объект типа Human_Sibling.

    Связка, To_Human_Sibling - это ссылочная связка: To_Human_Sibling обозначает Human_Sibling.

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

    Хотя требуются некоторые дополнительные затраты (такие как, получение значения объекта, к которому отсылает ссылочное значение), такой подход обеспечивает всю функциональность, которая требуется от множественного наследования:




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