Отношения объектных типов
Отношения объектных типов между собой включают:
- отношения наследования;
- отношения включения, когда один тип имеет поля другого типа;
- отношения использования, когда один тип принимает в своих методах параметры другого типа.
Отношения включения
Отношения включения заключаются в том, что один тип включает в себя поля другого типа. При этом запрещено использовать в качестве типа своих собственных полей как сам объявленный тип, так и любой из его потомков. В то же время использование необъявленного еще типа Б в качестве типа поля в типе А допускается. В этом случае необходимо лишь, чтобы тип Б уже был объявлен к моменту использования типа А (для создания переменных, использования в качестве родительского типа, и т.п.). Однако циклическая ссылка на типы при объявлении полей запрещена.
Пример 1
Пример 1 иллюстрирует ошибку, так как использование самого объявленного типа в качестве типа своего поля запрещено. Очевидно, что попытка создания значения такого типа приведет к бесконечной рекурсии и сбою программы. Запрещено объявление полей как самого типа, так и любого его потомка.
ТИП А [ А: а; ]
Пример 2
Так как использование не определенного еще типа в качестве типа поля допустимо, то в примере 2 ошибки не возникнет. Однако при использовании типа А до объявления типа Б возникнет ошибка.
ТИП А [ Б: б; ] ТИП Б [ ]
Пример 3
Пример 3 иллюстрирует ошибку, так как использование переменных типа А или Б, в которых применяется циклическое использование типов при задании полей,приведет к бесконечной рекурсии.
ТИП А [ Б: б; ] ТИП Б [ А: а; ]
Пример 4
Использование самого типа в качестве типа своего индексного поля. Следует заметить, что разрешено использование только типа А, но не типов-потомков А. Данную возможность можно рассматривать как исключение из общего правила, связанного с отношением включения.
ТИП А [ А: а[ЧИСЛО]; ]
Пример 5
Пример 5 иллюстрирует ошибку, так как использование самого типа в качестве типа своего индексного поля с инициализацией приводит к запрещенной ситуации - возникновению бесконечной рекурсии.
ТИП А [ А: а[ЧИСЛО] = ( 1: А[] ); ]
Отношения использования
Отношения использования заключаются в том, что один тип принимает в своих методах параметры другого типа. Отношения использования предъявляют менее строгие требования к зависимости типов друг от друга, чем отношения включения. При этом запрещено использовать в качестве типа своих собственных полей как сам объявленный тип, так и любой из его потомков. В то же время использование необъявленного еще типа Б в качестве типа поля в типе А допускается. В этом случае необходимо лишь, чтобы тип Б уже был объявлен к моменту использования типа А (для создания переменных, использования в качестве родительского типа, и т.п.). Однако циклическая ссылка на типы при объявлении полей запрещена.
Пример 6
Пример 6 иллюстрирует использование самого типа в сигнатуре собственного метода.
ТИП А [ ФУНКЦИЯ А: Ф(ПЕРЕМ А: а) РЕЗУЛЬТАТ = а КОНЕЦ_ФУНКЦИИ ]
Пример 7
Пример 7 иллюстрирует использование еще не объявленного типа в сигнатуре метода.
ТИП А [ ФУНКЦИЯ Б: Ф(ПЕРЕМ Б: б) РЕЗУЛЬТАТ = б КОНЕЦ_ФУНКЦИИ ] ТИП Б [ ]
Пример 8
Пример 8 иллюстрирует использование еще не объявленного дочернего типа в сигнатуре метода.
ТИП А [ ФУНКЦИЯ Б: Ф(ПЕРЕМ Б: б) РЕЗУЛЬТАТ = б КОНЕЦ_ФУНКЦИИ ] ТИП Б(А) [ ]