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



         

Именование тэговых типов - часть 2


/p>

Вторая часть этого примера демонстрирует использование соглашений по наименованию для смешанных пакетов (mixin packages), которые обеспечивают поддержку оконной системы.

Предположим, что у нас есть тэговый лимитированный приватный тип Basic_Window, описание которого имеет следующий вид:

type Basic_Window is tagged limited private;

Тогда:

generic

type Some_Window is abstract new Basic_Window with private; package Label_Mixin is

type Window_With_Label is abstract new Some_Window with private; . . . private

. . . end Label_Mixin;

generic

type Some_Window is abstract new Basic_Window with private; package Border_Mixin is

type Window_With_Label is abstract new Some_Window with private; . . . private

. . . end Border_Mixin;

Второй подход отображает использование объектно-ориентированных свойств с помощью специальных имен и суффиксов:

пакет абстракции именуется без каких-либо суффиксов, в соответствии с объектом, который этот пакет представляет

смешанные пакеты (mixin packages) именуются в соответствии с аспектами (facet) которые они представляют, используя суффикс _Facet

для главного тэгового типа абстракции используется имя Instance (Object...)

для ссылочного типа (если такой определен), значения которого ссылаются на значения главного тэгового типа, используется имя Reference (Handle, View...)

для последующего описания типа, который является надклассовым типом соответствущим тэговому типу, используется имя Class

Следующий пример демонстрирует использование этого варианта соглашений по наименованию:

package Shape is

subtype Side_Count is range 0 .. 100; type Instance (Sides: Side_Count) is tagged private; subtype Class is Instance'Class; . . . -- операции Shape.Instance private

. . . end Shape;

with Shape; use Shape; package Line is

type Instance is new Shape.Instance with private; subtype Class is Instance'Class; . . . -- переопределенные или новые операции private

. . . end Line;

with Shape; use Shape; generic

type Origin is new Shape.Instance; package With_Color_Facet is

type Instance is new Origin with private; subtype Class is Instance'Class; -- операции для colored shapes private

. . . end With_Color_Facet;

with Line; use Line; with With_Color_Facet; package Colored_Line is new With_Color_Facet (Line.Instance);

<


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