Руководство разработчика

Отношения объектных типов

Отношения объектных типов между собой включают:


Отношения включения

Отношения включения заключаются в том, что один тип включает в себя поля другого типа. При этом запрещено использовать в качестве типа своих собственных полей как сам объявленный тип, так и любой из его потомков. В то же время использование необъявленного еще типа Б в качестве типа поля в типе А допускается. В этом случае необходимо лишь, чтобы тип Б уже был объявлен к моменту использования типа А (для создания переменных, использования в качестве родительского типа, и т.п.). Однако циклическая ссылка на типы при объявлении полей запрещена.

Пример 1

Пример 1 иллюстрирует ошибку, так как использование самого объявленного типа в качестве типа своего поля запрещено. Очевидно, что попытка создания значения такого типа приведет к бесконечной рекурсии и сбою программы. Запрещено объявление полей как самого типа, так и любого его потомка.

ТИП А
[
  А: а; 
]

Пример 2

Так как использование не определенного еще типа в качестве типа поля допустимо, то в примере 2 ошибки не возникнет. Однако при использовании типа А до объявления типа Б возникнет ошибка.

ТИП А
[
  Б: б; 
]


ТИП Б
[
]

Пример 3

Пример 3 иллюстрирует ошибку, так как использование переменных типа А или Б, в которых применяется циклическое использование типов при задании полей,приведет к бесконечной рекурсии.

ТИП А
[
  Б: б; 
]

ТИП Б
[
  А: а;
]

Пример 4

Использование самого типа в качестве типа своего индексного поля. Следует заметить, что разрешено использование только типа А, но не типов-потомков А. Данную возможность можно рассматривать как исключение из общего правила, связанного с отношением включения.

ТИП А
[ 
  А: а[ЧИСЛО]; 
]

Пример 5

Пример 5 иллюстрирует ошибку, так как использование самого типа в качестве типа своего индексного поля с инициализацией приводит к запрещенной ситуации - возникновению бесконечной рекурсии.

ТИП А
[
  А: а[ЧИСЛО] = ( 1: А[] ); 
]

Отношения использования

Отношения использования заключаются в том, что один тип принимает в своих методах параметры другого типа. Отношения использования предъявляют менее строгие требования к зависимости типов друг от друга, чем отношения включения. При этом запрещено использовать в качестве типа своих собственных полей как сам объявленный тип, так и любой из его потомков. В то же время использование необъявленного еще типа Б в качестве типа поля в типе А допускается. В этом случае необходимо лишь, чтобы тип Б уже был объявлен к моменту использования типа А (для создания переменных, использования в качестве родительского типа, и т.п.). Однако циклическая ссылка на типы при объявлении полей запрещена.

Пример 6

Пример 6 иллюстрирует использование самого типа в сигнатуре собственного метода.

ТИП А
[
  ФУНКЦИЯ А: Ф(ПЕРЕМ А: а)
    РЕЗУЛЬТАТ = а
  КОНЕЦ_ФУНКЦИИ
]

Пример 7

Пример 7 иллюстрирует использование еще не объявленного типа в сигнатуре метода.

ТИП А
[
  ФУНКЦИЯ Б: Ф(ПЕРЕМ Б: б)
    РЕЗУЛЬТАТ = б
  КОНЕЦ_ФУНКЦИИ
]

ТИП Б
[
]

Пример 8

Пример 8 иллюстрирует использование еще не объявленного дочернего типа в сигнатуре метода.

ТИП А
[
  ФУНКЦИЯ Б: Ф(ПЕРЕМ Б: б)
    РЕЗУЛЬТАТ = б 
  КОНЕЦ_ФУНКЦИИ
]

ТИП Б(А)
[
]

См. также: