Н. Джехани - Язык Ада (1988) (1160771), страница 110
Текст из файла (страница 110)
437 Нас авеаашые шо ли а) Для описания личного типа разрешены операции, определенные в равд. 7.4.2 (в частности, для личного, но нелимитируемого типа — присваивание, равенство и неравенство). б) Для определения индексируемого типа разрешены операции, определенные в равд. 3.6.2 (например, они включают формирование индексируемых компонент и отрезков). в) Для определения ссылочного типа разрешены операции, определенные в равд. 3.8.2 (на. пример, могут быть использованы генераторы). Четыре формы определения настраиваемого типа, в которых содержится бокс (т.е. составной ограничитель < >), соответствуют следующим основным формам скалярного типа: г) Для дискретного типа: (< >) Разрешенные операции — общие для перечисленных и целых типов; они определены в равд.
3.5.5. д) Для целого типа: гвп9е <> Разрешенные операции над целыми типами определены в равд. 3.5,5. е) Для плавающего типа: 6(9йа < > Разрешенные операции определены в равд. 3.5.8. ж) Для фиксированных типов: деда < > Разрешенные операции определены в равд. 3.5.10. Во всех случаях, пп. а) — е), каждая операция, неявно связанная с формальным типом (т.е. отличная от операции, заданной формальной подпрограммои), считается неявно описанной в месте описания формального типа.
Это же оу носится и к формальному фиксированному типу, исключая мультипликативные операции, которые возвращают результат универсального фиксированного типа (см. 4.5.5), так как эти специальные операции описаны в пакете ЗТАМОАВО. При конкретизации настройки каждая из этих операций — соответствующая базовая операция или предопределенная операция для сопоставленного фактического типа. Для операции это правило сохраняется даже в случае переопределения ее для фактического типа или некоторого его родительского типа. Примеры формальных типов настройки: Фуре (тем 1 ° заьаге; Фура ВОРРЕВ(ФЕМОТН; МАТОВАЦ Ь Вгпяав риуата; Явм ЕМОМ Ь (<>); Фур, (нт Ь ге В <>: 1уре Амвье ь вава <>; 1ура МАЗЗ 1 ° гярве <>: Фурв ТАВЬЕ 1 ° апау (ЕМОМ) е( 1ТЕМ; Пример раздела формальных параметров настройки с описанием формального целого типа: вююгм Фуре ЯАМК (а гапеа <>; ШЯЗТ: ЯАМК: ВАМК'Р(ВЗТ; ЗЕСОМ0: ЯАМК:= ШЯЗТ + 1; — операция «е» для типа ВАМК Ссыпки: генератор 4.8, дискретный диапазон 3.6, дискретныи тип 3.6, индексируемая компонента 4.1.1, класс типа ЗЗ, конкретизация 12.3, лимитируемый личный тип 744, мультипликативная операция 4.5, 4.5.5, неравенство 4.5.2, обозначение типа 3.3.2, ограничение 3.3, опера.
ция 4.5, операция типа 3.3, описание 3.1, описание настраиваемого модуля 12.1, описание параметра настройки 12.1, определение индексируемого типа 3.6, определение пичного типа 7.4, определение настраиваемого типа 12.1, отрезок 4.1.2, перечислимый тип 3.5.1, плавающий тип 3.5.7, присваивание 5.2, равенство 4.5.2, раздел дискриминантов 3.7.1, раздел формальных параметров настройки 12.1, родительский тип 3.4, скалярный тип 3.5, сопоставление фактиче. ских параметров настройки 12.3.2, 12.3.3, 12.3.4, 12.3.5, стандартный пакет 8.6 С, тело настраиваемого модуля 12.2, указание подтипа 3.3.2, универсальный фиксированныи тип 3.5.9, факти.
ческий тип настройки 12.3, фиксированный тип 3.5.9, формальная подпрограмма настройки 12.1.3, формальный тип настройки 12.1, целый тип 3.5.4. 12.1.3. ФОРМАЛЬНЫЕ ПОДПРОГРАММЫ НАСТРОЙКИ Описание параметра настройки, включающее спецификацию подпрограммы, описывает формальную подпрограмму настройки. В описании формальной подпрограммы настройки могут встречаться две формы умолча- ния. В них после спецификации подпрограммЫ следует зарезервированное слово (в и либо бокс, либо имя подпрограммы или входа. Правила сопоставления для таких умолчаний описаны в равд. 12.3.6.
Формальная подпрограмма настройки обозначает подпрограмму, литерал перечисления ипи вход, заданный соответствующим фактическим параметром настройки в конкретизации настройки, как описано в разд. 12.3.6. Примеры формальных подпрограмм настройки: стив (оосвоо )нсйеАзе(х: (мтебея) мсссо )нте6ей; и)ТИ Ыпсвоо ЗОМ(Х, у .' )ТЕМ! говно (ТЕМ; сита Мосеоя "+"(Х, т: )ТЕМ! гоаоя )ТЕМ ! ° <>; мИЬ Гоослос )МА6Е(Х: ЕЙОМ) ьмого ЗТИЛЧ6 ! ° ЕНОМ')МАВЕ; ст)сь Ргосоеосо ОРОАте а беРАО!.т ОРОАте; Примечание. Ограничения на параметр формальной подпрограммы те же, что у соответствующего параметра в спецификации сопоставленной фактической подпрограммы (а не те, которые вводятся соответствующим обозначением типа в спецификации формальной подпро. граммы).
Это же относится и к результату функции. Во избежании путаницы рекомендуется везде, где можно, в описании формальной подпрограммы использовать имя базового типа, а не имя подтипа. Если, однако, базовый тип — анонимный, то рекомендуется использовать имя подтипа, определенное в описании типа. Тип, заданный для формального параметра формальной подпрограммы настройки, может быть любым видимым типом, включая формальный тип настройки из того же раздела фор. мальных параметров настройки.
Ссылки: анонимный тип 3.2.1, базовый тип 3.3, бокс 12.1.2, зарезервированное слово 2.9, знак операции 6.1, идентификатор 2.3, конкретизация настройки 12.3, область действия 8.2, обозначение 6.1, обозначение типа 3.2.2, ограничение 3.3, описание параметров настройки 12.1, описание переименования 8.6, описание подпрограммы 6.2, подпрограмма 6, подтип 3.3.2, со. поставление фактических подпрограмм настройки 12.3.6, спецификация подпрограммы 6.1, тип 3.3, фактический параметр настройки 12.3, формальная подпрограмма настройки 12.1, формальная функция настройки 12.1. 12.2.
НАСТРАИВАЕМЫЕ ТЕЛА Тело настраиваемой подпрограммы или настраиваемого пакета (настраиваемое тело) является шаблоном для тел соответствующих подпрограмм или пакетов, получаемых конкретизацией настройки. Синтаксис настраиваемого тела идентичен обычному телу. Для каждого описания настраиваемой подпрограммы должно быть соответствующее тело.
Предвыполнение настраиваемого тела не имеет другого эффекта, кроме установления то. го, что тело начиная с этого момента может быть использовано в качестве шаблона для попучения соответствующих экземпляров. Пример настраиваемого тела процедуры: ртосееого ехснлнбе(О, ч: )о мп вьем) и — см. пример в 12.1 т: вьем; — формальный тип настройки Ьовм Т:= О; О := Ч: Ч := Т; оса ЕХСНАНВЕ; Пример тела настраиваемой функции: аомеоо 30ОАя(м6(х: )тем) совая )тем ь — см. пример в 12.1 Иее(я моея Х*Х; — формальная операция «*» оое; 439 Наст мваемые мо лм Пример тела настраиваемого пакета: яеезпзп Ьовт Ом ЧЕСТОВЗ ь — см. пример в 12.1 Ьпееоп 80М(А, В: ЧЕСТОВ) мапо ЧЕСТОВ Ь йе$01.Т: ЧЕСтОВ(А'ВАМЗЕ); — формальный тип ЧЕСТОВ 8(АЗ: ефпиппе )МТЕЗЕВ:= В'К(ВЗТ - АЗ(ВЗТ1 ьое(о В А'ЬЕМОТН / В'ЬЕМЗТН Вмп га(ео ЬЕМЗТН ЕВВОВ; опо в; (ог М Ь А'ЯАМОЕ Ьоа ВЕ$0ьт(М):= $0М(А(М), В(М ь 81АЗ))1 опо Ьоа; гоапп ВЕ80ЬТ1 — формальная функция 80М Ьпееоп 8(ЗМА(А: ЧЕСТОй) мепгп 1ТЕМ Ь ТОТАЬ: 1ТЕМ: А(А'МВЗП; веем Ьг М (п АТВЯЗТ + 1 ..
А''ьАЗТ Ьов ТОТА1.: $0М(ТОТА1., А(М)); опв Ьоя; папа ТОТАМ опе; опв; — формальный тип (ТЕМ вЂ” формальная функция 80М Ссылки: конкретизация настройки 12.3, настраиваемая подпрограмма 12.1,настраиваемое тело 12.1, настраиваемый пакет 12.1, пакет 7, подпрограмма 6, предвыполнение 3.9, тело 3.9, тело пакета 7.1, тело подпрограммы 6.3, экземпляр 12.3. 12.3.
КОНКРЕТИЗАЦИЯ НАСТРОЙКИ Экземпляр настраиваемого модуля списывается конкретизацией настройки. конкретизация настройки :: = расйа9е идентификатор )э пем нмя настраиваемого пакета )раздел фактических параметров настройки); ргосебаге идентификатор 1в пем имя настраиваемой процедуры )раздел фактических параметров настройки); (ипс((оп обозначение 1в пвм имя настраиваемой функции )раздел фактических параметров настройки); раздел фактических параметров настройки::= (сопоставление параметров настройки (допоставление параметров настройки) сопоставление параметров настройки::= )формальный параметр настройки = >) фактический параметр настройки формальный параметр настройки с= простое имя параметра ) знак операции фактический параметр настройки::= выражение имя переменной ) имя подпрограммы имя входа ) обозначение типа Для каждого формального параметра настройки должен быть задан явный фактический параметр настройки, кроме случая, когда соответствующим описанием параметра настройки задана форма умолчания.
Сопоставление параметров настройки может быть либо позицион. ным, либо именованным (как в вызове подпрограммы (см. 6.4)). Если две или несколько фор- Глава 12 мальных подпрограмм имеют одно и то же обозначение, то для соответствующих параметров настройки именованные сопоставления недопустимы. Каждый фактический параметр настройки должен быть солосгавлен с соответствующим формальным параметром. Выражение может быть сопоставлено с формальным объектом вида 1л; имя переменной может быть сопоставлено с формальным объектом вида (л ов1; имя подпрограммы или имя входа может сопоставляться с формальной подпрограммой; обозначение типа может сопоставляться с формальным типом. Детальные правила, определяющие единственные допустимые сопоставления, даны в равд.
12.3.1 — 12.3.6. Экземпляр — это копия настраиваемого модуля без его раздела формальных параметров настройки; таким образом, экземпляр настраиваемого пакета — пакет, настраиваемой процедуры — процедура, настраиваемой функции — функция. Для каждого вхождения обозначаю. щего данное понятие имени в настраиваемый модуль следующий список определяет, какое понятие соответствует этому имени в экземпляре. а) Имя обозначает настраиваемый модулги соответствующее вхождение обозначает экземпляр.
б) Имя обозначает формальный объект настройки вида 1л: соответствующее в экземпляре имя обозначает константу, значение которой — копия значения сопоставленного фактического параметра настройки. в) Имя обозначает формальный объект настройки вида 1л ов1: соответствующее в экземпляре имя обозначает переменную, указанную сопоставленным фактическим параметром настройки. г) Имя обозначает формальный тип настройки: соответствующее в экземпляре имя обозна. чает подтип, указанный сопоставленным фактическим параметром настройки (фактическим подтипом).
д) Имя обозначает дискриминант формального типа настройки: соответствующее в экземпляре имя обозначает соответствующий дискриминант (он должен быть один) фактического типа, сопоставленного формальному типу настройки. е) Имя обозначает формальную подпрограмму настройки: соответствующее в экземпляре имя обозначает подпрограмму, литерал перечисления или вход, указанный сопоставленным фактическим параметром настройки (фактической подпрограммой).