Н. Джехани - Язык Ада (1988) (1160771), страница 109
Текст из файла (страница 109)
В отличие от нее экземпляр настраиваемой подпрограмМы может быть вызван, но не может использоваться для изготовления других экземпляров. Ссылки: конкретизация настройки 12.3, настраиваемый пакет 12.1, настраиваемая подпрограмма 12.1, описание 3.1, описание настройки 12.1, пакет 7, подпрограмма 6, программный модуль 6, раздел формальных параметров настройки 12.1, фактический параметр настройки 12.3, формальный параметр настройки 12.1, экземпляр 12.3. 12.1. ОПИСАНИЕ НАСТРОЙКИ Описание настройки задает настраиваемый модуль — настраиваемую подпрограмму или настраиваемый пакет.
Описание настройки включает раздел формальных параметров настройки, в котором описываются ее формальные параметры. Формальный параметр настройки может быть объектом; кроме того (в отличие от параметра подпрограммы), он может быть типом или подпрограммой. описание настройки :; = спецификация настройки; спецификация настройки :: = раздел формальных параметров настройки спецификация подпрограммы раздел формальных параметров настройки спецификация пакета раздел формальных параметров настройки::= йепебс (описание параметра настройки) описание параметра настройки::= список идентификаторов: [(п [ов()[ обозначение типа [:= выражение[; (уре идентификатор (в определение настраиваемого типа; описание личного типа ьт)бп спецификация подпрограммы [(е имя); щйй спецификация подпрограммы [(в <>[; определение' настраиваемого типа:;= (<>) [ галде <> [ б)дйв <> ) дейв <> определение индексируемого типа определение ссылочного типа Для ссылки на соответствующие формальные параметры настройки используются такие термины: формальный объект настройки (или, короче, формальный объект), формальный тип настройки (или, короче, формальный тип) и формальная подпрограмма настройки [или, коро.
че, формальная подпрограмма). Наст аиваемыа мо лп 436 В разделе формальных параметров настройки указание подтипа допустимо только в виде обозначения типа (т.е. такое указание подтипа нв должно содержать явного ограничения). Обозначение настраиваемой подпрограммы должно быть задано идентификатором. Имя программного модуля, являющегося настраиваемым модулем, вне его спецификации и тела обозначает этот настраиваемый модуль. В отличие от этого в зоне описания, связанной с настраиваемой подпрограммой, имя такого программного модуля обозначает подпрограмму, полученную при текущей конкретизации настраиваемого модуля. Аналогично в зоне описания, связанной с настраиваемым пакетом, имя программного модуля обозначает пакет, полученный при текущей конкретизации.
Првдвыполнение описания настройки не имеет другого эффекта. Примеры разделов формальных параметров: веэенс — без параметров Еа пенс 8!Ее: НАТОВАΠ— формальный объект веласе ЬЕМОТН; )МТЕОЕВ:= 200; — формальный объект с выражением по умолчанию АлеА: )мтебея:- ьембтн*ьемОтн; — формальный объект с выражением по умолчанию рэеэис Фура 1ТЕМ Фе ртмате; — формальный тил Фурс )МОЕХ 1 ° (<>); — формальный тип 1уре йОУЧ 1е апет(!МОЕХ талас <>1 <Н )ТЕМ; — формальный тип тсиь сепсиса "<-(х, у: !тем)»пеп ЯООьепм: — формальная подпрограмма Примеры описаний настройки с настраиваемыми подпрограммами: Еснип1С Фуре Е1.ЕМ Ь РНуа»; пикк»ге ЕХСНАМОЕ(О, Ч; 1э СФП ЕЬЕМ); Ве пенс ФУРЭ !ТЕМ 1 ° РФЬЭ»: Фтпв Ьпсвсп "* (О, Ч: !ТЕМ) ФетепФ (ТЕМ Ь <>; Ьекясп 8ООАВ(МО(Х: !ТЕМ) Феапп (ТЕМ; Пример описания настройки с настраиваемым пакетом: В»ФЭНЭ Фуре )ТЕМ Ь РФЬМ °; Фуре ЧЕСТОВ Ь Фетву (РО81Т)ЧЕ»пве <>) СФ )ТЕМ; кпа Ьпкяэп ЕОМ(Х, у: (ТЕМ) Фа»пФ (ТЕМ; распеве ОМ ЧЕСТОВЕ Ь Ьпсйсп 8ОМ (А, 8: ЧЕСТОВ) капп ЧЕСТОЯ; Ъпсвсп 8)ОМА [А: ЧЕСТОВ) Фавел (ТЕМ; ЬЕМОТН ЕЯЯОЯ: ессарвеп; эпа; Примечание Внутри тела настраиваемой подпрограммы ее имя рассматривается как имя подпрограммы.
Следовательно, это имя может быть совмещено, а также может появиться в рекурсивном вызове текущей конкретизации. По этой же причине его нельзя использовать после зарезервированного слова пек в (рекурсивной) конкретизации настройки. Выражение, которое находится в разделе формальных параметров настройки, — это выражение по умолчанию для формального параметра вида (и, либо составная часть имени вхо.
да, заданного как имя по умолчанию для формальной подпрограммы, либо выражение по умолчанию для параметра формальной подпрограммы. В первых двух случаях значение этого выражения вычисляется только в тех конкретизациях, в которых используется соответствую. щее умолчание. В третьем случае значение выражения вычисляется только в вызовах фор. мальных подпрограмм, использующих такое умолчание.(К любому имени, используемому в выражении по умолчанию, применяются обычные правила видимости: обозначенные этим именем понятия должны быть видимы в том месте, где стоит выражение.) Ни формальные параметры настройки, ни их атрибуты в качестве частей статических выражений недопустимы (см. 4.9).
Глава 12 Ссылки: атрибут 4.1.4, выражение 4.4, зарезервированное слово 2.9, идентификатор 2.3, имя 4.1, конкретизация настройки 12.3, обозначение 6.1, обозначение типа 3.3.2, объект 3.2, ограничение 3.3, описание 3.1, определение индексируемого типа 3.6, определение личного типа 7.4, определение ссылочного типа 3.8, параметр подпрограммы 6.2, подпрограмма 6, поня тие 3.1, процедура 6.1, предвыполнение не имеет другого эффекта 3.1, совмещение 6.6, 8.7, спецификация пакета 7.1, спецификация подпрограммы 6.1, список идентификаторов 3.2, статическое выражение 4.9, тип 3.3, указание подтипа 3.3.2, функция 6.6, экземпляр 12.3.
12.1.1. ФОРМАЛЬНЫЕ ОБЪЕКТЫ НАСТРОЙКИ Первая форма описания формального параметра настройки задает формальные объекты настройки. Тип формального объекта настройки — это базовый тип обозначения типа, данно. го в описании формального параметра настройки. Описание формального параметра настройки с несколькими идентификаторами эквивалентно последовательности единичных описании, как поясняется в равд. 3.2. Формальный объект настройки имеет вид (л или !л ом(.
При отсутствии в описании формального параметра настройки явного указания вида подразумевается вид )и. Если описание формального параметра настройки задано выражением, то оно является выражением ло умолчанию для этого формального параметра. Выражение по умолчанию допустимо только для параметров вида (л (указанного либо явно, либо неявно) Тип выражения по умолчанию должен быть таким же, как и у соответствующего формального параметра настройки. Формальный объект настройки вида )л — это константа, значение которой является копией значения сопоставленного вму фактического параметра конкретизации настройки, как описано в равд.
12.3. Тип формального объекта настройки вида (и не должен быть лимитируемым типом; подтип такого формального объекта настройки — зто подтип в обозначении типа, данного в описании параметра настройки. Формальный объект настройки вида !л ом( — это переменная, обозначающая объект, задаваемый в конкретизации настройки фактическим параметром настройки, как описано в равд.
12.3. Ограничения, применяемые к формальному объекту настройки, те же, что и для соответствующего фактического параметра Примечание. Ограничения, применяемые к формальному объекту настройки вида !л ои(, те же, что и для соответствующего фактического параметра (а не те, которые связаны с обо. значением типа из описания параметра настройки). Во избежание путаницы рекомендуется, когда это возможно, использовать в описании такого формального объекта имя базового типа. Если, однако, базовый тип анонимный, то рекомендуется использовать имя подтипа, определенного в описании базового типа. Ссылки: анонимный тип 3.3.1, базовый тип 3.3, вид 6.1, идентификатор 2.3, имя 4.1, конкре.
тизация настройки 12.3, лимитируемый тип 7.4.4, обозначение типа 3.3.2, объект 3.3, ограничение 3.3, описание 3.1, описание константы 32, описание параметра настройки 12.1, описание типа 3.2, переменная 3.2.1, подтип 3.2, присваивание 5.2, простое имя 4.1, сопоставление фактического параметра настройки 12.3, фактический параметр настройки 12.3, формальный объект настройки 12.1, формальный параметр настройки 12.1. 12.1.2. ФОРМАЛЬНЫЕ ТИПЫ НАСТРОЙКИ Описание параметра настройки, включающее определение настраиваемого типа или спи. сание личного типа, задает формальный тип настройки. Формальный тип настройки обозначает подтип, заданный соответствующим фактическим параметром в конкретизации настройки, как описано в и. П равд. 12.3. В настраиваемом модуле формальный тип настройки рассматривается как некоторый уникальный тип, отличный от всех остальных (формальных или нет) типов.
Форма ограничения, применимого к формальному типу в указании подтипа, зависит от класса типа, как и для типов, не являющихся формальными. В описании формального (ограниченного) индексируемого типа настройки в качестве формы дискретного диапазона допустимо только обозначение типа. Раздел дискриминантов формального личного типа настройки не должен включать выражение по умолчанию для дискриминанта. (Следовательно, переменная, заданная описанием объекта, должна быть ограничена, если ее тип — это формальныи тип настройки с дискриминантами.) В описании и теле настраиваемого модуля операции, которые можно выполнять над значениями формального типа настройки (кроме дополнительных операций, заданных формальными подпрограммами настройки), определяются описанием параметра настройки для этого формального типа.