Справочное руководство по языку Ада-83

         

type FRAME is access MATRIX;



type FRAME is access MATRIX; -- см. 3.6 type BUFFERNAME is access BUFFER; -- см. 1
. Ссылочное значение, передаваемое генератором, может быть присвоено нескольким ссылочным объектам. Следовательно, объект, созданный генератором, может быть указан более чем одной переменной или константой ссылочного типа. Ссылочное значение может указывать только объект, созданный генератором, в частности, оно не может указывать объект, объявленный описанием объекта.
Если тип объектов, указанных ссылочными значениями, — индексируемый тип или тип с дискриминантами, то эти объекты ограничены либо границами массива, либо значениями дискриминантов, заданными неявно или явно соответствующими генераторами (см. 4.8).
Ссылочные значения в некоторых других языках называются указателями или ссылками.
Ссылки: генератор 4.8, зарезервированное слово 2.9, имя 4.1, индексируемый тип 3.6, константа 1, лимитируемый тип 4, литерал 4.2, объект 1, ограничение 3.3, ограничение дискриминанта 2, ограничение индекса 1, описание объекта 1, переменная 1, подкомпонента 3.3, подтип 3.3, Предвыполнение 3.9, принадлежит подтипу 3.3, присваивание 5.2, простое имя 4.1, спецификация индекса 3.6, тип 3.3, удовлетворять 3.3, указание подтипа 2.
1. НЕПОЛНЫЕ ОПИСАНИЯ ТИПОВ
Никаких конкретных ограничений на тип, указываемый ссылочным типом, не существует. В частности, тип компоненты указываемого типа может быть другим ссылочным типом или даже тем же самым ссылочным типом. Это позволяет вводить взаимозависимые и рекурсивные ссылочные типы. Их описания требуют предварительного неполного описания типа (или описания личного типа) для одного или нескольких типов.
неполное-описание-типа ::= type идентификатор [раздел-дискриминантов];




Для каждого неполного описания типа должно быть соответствующее описание типа с тем же идентификатором. Соответствующее описание должно быть либо полным описанием, либо описанием задачного типа. В оставшейся части главы пояснения даны в терминах полных описаний типа; те же правила применяются к описаниям задачного типа. Если неполное описание типа встречается непосредственно в разделе описаний или видимом разделе спецификации пакета, то полное описание типа должно встретиться позже непосредственно в этом разделе описаний или видимом разделе. Если неполное описание типа встречается непосредственно в личном разделе пакета, то полное описание типа должно быть позже непосредственно в самом личном разделе или же в разделе описаний соответствующего тела пакета.
Раздел дискриминантов должен быть дан в полном описании типа тогда и только тогда, когда он дан в неполном описании типа; если разделы дискриминантов даны, то они должны быть согласованы (см. 1 для правил согласования). До конца полного описания типа использование имени, обозначающего" тип, объявленный неполным описанием типа, допустимо только как обозначение типа в указании подтипа определения ссылочного типа; единственной формой ограничения, допустимой в указании подтипа, являются ограничения дискриминанта.
Предвыполнение неполного описания типа создает тип. Если неполное описание типа имеет раздел дискриминантов, то это Предвыполнение включает Предвыполнение раздела дискриминантов: в этом случае раздел дискриминантов полного описания типа не предвыпол-няется.
11 явно или неявно, прямо или косвенно. — Прим. ред.
Пример рекурсивного типа:
type CELL; — неполное описание типа type LINK is access CELL;type CELL is record VALUE : INTEGER; SUCC : LINK; PRED : LINK; end record;HEAD : LINK := new CELL'(O, null, null); NEXT : LINK := HEAD.SUCC;
Примеры взаимозависимых ссылочных типов:
type PERSON(SEX : GENOER); — неполное описание типа type CAR; — неполное описание типаtype PERSONNAME is access PERSON; type CARNAME is access CAR;type CAR is record NUMBER : INTEGER; OWNER : PERSONNAME; end record;type PERSON(SEX : GENDER) is record NAME : STRING(1 .. 20); BIRTH : DATE; AGE : INTEGER range 0 .. 130; VEHICLE : CAR_NAME; casa SEX is when M => WIFE : PERSON_NAME(SEX => F); when F => HUSBAND ; PERSON_NAME(SEX => M); end case: end record;MYCAR, YOURCAR, NEXTCAR : CARNAME; — неявно инициированы — пустым значением
Ссылки: идентификатор 2.3, имя 4.1, компонента 3.3, обозначение типа 2, ограничение 3.3, ограничение дискриминанта 2, описание 3.1, определение ссылочного типа 3.8, предвы-полнение 3.9, раздел дискриминантов 1, согласован 1, ссылочный тип 3.8, тип 3.3, указание подтипа 2, указывать 3.8, элемент описания
2. ОПЕРАЦИИ НАД ССЫЛОЧНЫМИ ТИПАМИ
Базовые операции над ссылочным типом включают присваивание, генераторы для этого ссылочного типа, проверку принадлежности, явное преобразование, квалификацию и литерал null. Если указываемый тип — тип с дискриминантами, то базовые операции включают именование соответствующих дискриминантов; если указываемый тип — именуемый тип, то они включают именование соответствующих компонент; если указываемый тип — индексируемый тип, то они включают образование индексируемых компонент и отрезков; если указываемый тип — задачный тип, то они включают именование входов и семейств входов. Кроме того, базовые операции включают образование именуемой компоненты с зарезервированным словом аll (см. 3).
Если указываемый тип — индексируемый тип, то базовые операции включают атрибуты с обозначениями FIRST, LAST, RANGE и LENGTH (и эти же атрибуты с параметром N для номера измерения). Префикс каждого из этих атрибутов должен быть значением ссылочного типа. Эти атрибуты вырабатывают соответствующие характеристики указываемого объекта (см. 2).
Если указываемый тип — задачный тип, то базовые операции включают атрибуты с обозначениями TERMINATED и CALLABLE (см. 9.9). Префикс каждого из этих атрибутов должен быть значением ссылочного типа. Эти атрибуты вырабатывают соответствующие характеристики задачных объектов.
Кроме того, атрибут T'BASE (см. 3) и атрибуты представления T'SIZE и T'STORAGE-SIZE (см. 2) определены для ссылочного типа или подтипа Т; атрибуты A'SIZE и A'ADDRESS определены для ссылочного объекта А (см. 2).
Кроме базовых операции над ссылочным типом включают предопределенное сравнение на равенство и неравенство.
Ссылки: атрибут 4, базовая операция 3, базовый тип 3.3, генератор 4.8, дискриминант 3.3, задачный тип 9.1, именуемая компонента 3, именуемый тип 3.7, индексируемая компонента 1, индексируемый тип 3.6, квалифицированное выражение 4.7, литерал 4.2, личный тип 7.4, набор 3.8, обозначение атрибута 4, объект 1, ограниченный индексируемый подтип 3.6, операция 3.3, отрезок 2, подтип 3.3, преобразование 4.6, присваивание 5.2, проверка принадлежности 4.5, 2, ссылочный тип 3.8, тип 3.3, указываемый подтип 3.8, указываемый тип 3.8, указывать

Содержание раздела