Н. Джехани - Язык Ада (1988) (1160771), страница 66
Текст из файла (страница 66)
ла наследуемой, и она не скрыта наследуемой подпрограммой первого сорта, являешься далее наследуемой. Описание производного типа неявно описывает операции над производным типом. Неявные описания любых производных подпрограмм следуют за описанием производного типа. Спецификация производной подпрограммы неявно получается систематическим замещением родительского типа на производныи тип в спецификации наследуемой подпрограммы. Любои подтип родительского типа подобным образом замещается подтипом производного типа с аналогичными ограничениями (как при замене ограничения родительского подтипа на соответствующее ограничение производного подтипа). Наконец, любое выражение родительского типа можно использовать как операнд преобразования типа, которое вырабатывает ре. зультат производного типа.
Вызов производной подпрограммы эквивалентен вызову соответствующей подпрограммы родительского типа, в котором каждый фактический параметр производного типа заменяется преобразованием типа этого фактического параметра на родительский тип (это означает, что преобразование к родительскому типу происходит перед вызовом параметров вида 1л и !л ом(!обратное преобразование к производному типу происходит после вызова параметров вида 1л ом( и оц(, см. 6.4.1). Дополнительно, если результат вызванной функции имеет родительскии тип, то он преобразуется к производному типу.
Если производный или личный тип описан непосредственно в видимом разделе пакета, то в нем этот тип не должен использоваться как родительский тип в определении производного типа. (Для личных типов см. также равд. 7.4.1.) При предвыполнении определения производного типа сначала предвыпопняется указание подтипа, затем создается производныи подтип. Примеры: !ура ьОсА( сООВО(мАте )в пвш сООВО)мАте; — два различных типа 1УРВ М(ОУУЕЕК !Е Пв|Е ОАУ ПЫВЕ ТОЕ .. ТНОЛ вЂ” СМ. 3.5.1 туре с00мтея (в пеш Р051т1уе; — тот же диапазон, что и — у Р051ТГУЕ !Урв ВРЕС1А~ КЕУ 1 ° пеш КЕУ МАМАОЕЛ.КЕУ: — СМ. 7.4.2 -- Производные подпрограммы имеют следующие спецификации: — рпмвЬте ОЕТ КЕУ(К: оч! ВРЕС1А~ КЕУ); — ЫпсИоп "<"(Х,У; ВРЕС1А! КЕУ) гвтвгп ВООЬЕАМ! Примечание.
Из правил наследования базовых операций и литералов перечисления следу. ет, что обозначения для литерала или агрегата производного типа те же самые, что и для родительского типа; такие литералы и агрегаты называются совмещенными. Из правил также следует, что обозначения компоненты, дискриминанта, входа, отрезка ипи атрибута одинаковы для производного и родительского типов. Скрытие производнои подпрограммы допустимо даже в одной и той же зоне описания (см.
8.3). Производная подпрограмма скрывает предопределенную операцию, имеющую тот же профиль типа параметров и результата (см. 6.6). Описание настраиваемой подпрограммы не наследуется, поскольку оно описывает настраиваемый модуль, а не подпрограмму. С другой стороны, конкретизация настраиваемой подпрограммы является (ненастраиваемой) подпрограммои, которая является наследуемой, ес. ли она удовлетворяет требованиям наследуемости подпрограмм. Если родительский тип является логическим, то предопределенные операции отношения над производным типом дают результаты предопределенного типа ВООСЕАМ (см.
4,5.2). Описания и типы Если спецификатор представления дан для родительского типа и помещен за описанием производного типа, то соответствующий спецификатор представления неприменим к производному типу; следовательно, для такого производного типа допускается явный спецификатор представления. Если параметр производной подпрограммы принадлежит производному типу, подтип этого параметра не обязан иметь значение, общее с производным подтипом, Ссылки: агрегат 4.3, атрибут 4.1.4, базовая операция 3.3.3, базовый тип З.З, вид 6.1, видимый оаэдел 7.2, вход 9.5, вызов функции 6.4, выражение по умолчанию 3.2.1, граница диапазона 3.5, дискриминант 3.3, зарезервированное слово 2.9, зона описания 8.1, класс типа З.З, компонента 3.3, литерал 4.2, литерал перечисления 3.5.1, личный тип 7.4, логическии тип 3.5.3, набор 3.8, начальное значение по умолчанию для ссылочного типа 3.8, непосредственно в 8.1, неявное описание 3.1, ограничение 3.3, ограничение диапазона 3.5, ограничение плавающего типа 3.5.7, ограничение фиксированного типа 3.5.9, оператор вызова процедуры 6.4, описание 3.1, описание настройки 12.1, определение типа 3.3.1, отрезок 4.1.2, пакет 7, подпрограмма 6, подтип 3,3, предвыполнение 3.9, предопределенная операция 4.5, преобразование 4.6, процедура 6, совмещение 6.6, 8.7, сопоставление параметров 6.4, составной тип З.З, спецификатор представления 13.1, спецификация пакета 7.1, спецификация подпрограммы 6.1, ссылочное значение 3.8, тип 3.3, указание подтипа 3.3.2, фактический параметр 6.4.1, формальныи параметр 6.1.
3.5. СКАЛЯРНЫЕ ТИПЫ Под скалярными типами подразумеваются перечиспимые, целые и вещественные типы. Перечислимые и целые типы называются дискретными типами; каждое значение дискретного типа имеет номер позиции — целое значение. Целые и вещественные типы называются числовыми типами. Все скалярные типы упорядочены, т.е. для их знацений предопределены все операции отношения. ограничение .диапазона:;= гапйе диапазон диапазон::= атрибут диапазона ~простое выражение.. простое выражение Атрибуты Для любого скалярного типа Т или для любого подтипа Т скалярного типа определены следующие атрибуты; Вырабатывает значение нижней границы Т. Значение этого атрибута имеет тип Т. Вырабатывает значение верхней границы Т.
Значение этого атрибута имеет тип Т. Т'Е1ВЗТ Т'1АЗТ Диапазон определяет подмножество значений скалярного типа. Диапазон Е..В определяет значения от Е до Я включительно, если истинно отношение Е < = Я. Значения Е и Я называются соответственно нижней границей и верхней границей диапазона. Значение Ч удовлетворяет ограничению диапазона, если оно принадлежит диапазону; говорят, что значение Ч принадлежит диапазону, если одновременно истинны отношения Е < = Ч и Ч < = Я. Пустой диапазон — зто диапазон, дпя которого истинно отношение Я < Ц пустому диапазону не принадлежит никакое значение. Операции < = и < в вышеприведенных определениях являются предопределенными операциями над скалярными типами.
Если ограничение диапазона используется в указании подтипа либо непосредственно, либо как часть ограничения плавающего ипи фиксированного типа, тип простых выражений (а также границ атрибута диапазона) должен быть тем же, что и базовый тип в обозначении типа указания подтипа. Ограничение диапазона совместимо с подтипом, если каждая граница диапазона принадлежит подтипу или если ограничение диапазона определяет пустой диапазон; иначе ограничение диапазона не совместимо с подтипом.
Предвыполнение ограничения диапазона состоит иэ вычисления диапазона. Вычисление диапазона определяет его нижнюю и верхнюю границы. Если границы заданы простыми выражениями, вычисление диапазона вычисляет зти выражения в порядке, который не определен в языке. Глава 8 Примечание. Индексирование и правила итерации используют значения дискретных типов.
Ссылки: атрибут 4.1.4, атрибут диапазона 3.6.2, вещественный тип 3.5.6, вычисление 4.5, индекс 3.6, обозначение типа 3.3.2, ограничение 3.3, ограничение плавающего типа 3.5.7, огра. ничение фиксированного типа 3.5.9, оператор цикла 5.5, операция отношения 4.5, 4.5.2, ошибочный 1.6, перечислимый тип 3.5.1, простое выражение 4.4, удовлетворяет ограничению З.З, указание подтипа 3.3.2, целый тип 3.5.4. 3.5.1. ПЕРЕЧИСЛИМЫЕ ТИПЫ Определение перечиспимого типа задает перечислимый тип определение перечиспимого типа::= (спецификация литерала перечисления (, спецификация литерала перечисления)) спецификация литерала перечисления::= литерал перечисления литерал перечисления::= идентификатор(символьный литерал Идентификаторы и символьные литералы, перечисленные в определении перечислимого типа, должны быть различными.
Каждая спецификация литерала перечисления является его описанием; это описание эквивалентно описанию функции без параметров, обозначение кото. рой — литерал перечисления, а тип результата — перечислимый тип. Предвыполнение апре. деления перечислимого типа создает перечислимый тип; это предвыполнение включает пред- выполнение каждой спецификации литерала перечисления.
Каждый литерал перечисления вырабатывает отличное от других перечислимое значение. Предопределенные операции отношения упорядоченности между перечислимыми значениями следуют порядку, соответствующему номерам позиций; номер позиции первого значения в списке литералов перечисления равен нулю; номер каждого следующего литерала перечисления на единицу больше номера предыдущего литерала в списке. Если один и тот же идентификатор или символьный литерал задан в нескольких опреде. пениях перечислимого типа, соответствующие литералы называются совмещеннымн.
В тексте программы тип совмещенного литерала перечисления должен быть определимым из контекста (см. 8.71. Поимеры: 1 ° (МОМ, ТОЕ. И1ЕО, ТН0, РЯ1, ВАТ, 80М1; 1 ° (СЬ088, 01АМОМОВ, НЕАВТВ, ВРАОЕ81: Ь (М. Р1; ш (ЬОЪУ. МЕ010М, 0ВОЕМТ1; 1 ° М(Н(ТЕ, ЯЕО, УЕЬЬОУУ, ОВЕЕМ, ВЬОЕ, ВЯОИ1М, ВЬЗСК1; Ь (ЯЕО, АМВЕВ, ОЯЕЕМ1; -- ВЕО и ОВЕЕМ совмещены Шра ОАУ тур 80лт гуре ОЕМОЕН Зуав ЬЕНЕЬ зуяе С01.0Я утре ООНТ Фрв НЕХА (е ('АЗ '81 'С' (у Е р( гура М(ХЕО 1 ° ГА', 'В'. '*1 В, НОМЕ, '1', 'З(1; еажурв И/ЕЕКОАУ (е ОАУ гарле МОМ .. РВ1; еввзуре МАЗОВ Ь 801Т гаева НЕАНТВ .. ВРАОЕВ: еьыура ВА1мвоьу 1 ° сОЕОВ гааве ВеО ..
ВЕ0е; — цвет, но не свет Примечание. Если литерал перечисления встречается в контексте, недостаточном для определения типа литерала, то один из путеи разрешения неоднозначности — это применение квалифицированного выражения с именем перечислнмого типа (см. 4.7). Ссылки: идентификатор 2.3, имя 4.1, квалифицированное выражение 4.7, номер позиции 3.5, обозначение 6.1, операция отношения 4.5, 4.5.2, описание 3.1, определение типа 3.3.1, пред. выполнение 3.9, 6.1, символьный литерал 2.5, совмещение 6.8, 82, тип 3.3, функция 6.5. 3.52.
СИМВОЛЬНЫЕ ТИПЫ Перечислимый тип называется символьным, если хотя бы один из его Литералов перечно. пения является символьным литералом. Предопределенный тип СНАЯАСТЕН вЂ” символьный тип, значения которого представляют собой 128 символов стандартного набора А8СВ. Каждый из 95 графических символов этого символьного набора обозначен соответствующим символьным литералом. Описания и тяпы Пример: Гуре яОМАМ О!6!Т !З ('!'. 'Ч', 'Х', Ш', 'С', 'О'. 'ВГ); Примечание.
Предопределенный пакет АЗСН включает описания констант, обозначающих управляющие символы, а также констант, обозначающих графические символы, не входящие в основной набор символов. Другой символьный набор, например ЕВСО!С, можно описать как символьный тип; внутренние коды символов можно задать спецификатором представления перечислимых, как пояснено в равд.
13.3. Ссылки: графическии символ 2.1, идентификатор 2.8, константа 3.2.1, литерал 4.2, описание 3.1, основной символ 2.1, перечислимый тип 3.5.1, предопределенный пакет С, предопреде. ленный тип С, символьный литерал 2.5, тип 3.3. 3.5.3. ЛОГИЧЕСКИЕ ТИПЫ Существует предопределенный перечиспимый тип, именуемый ВООЕЕАМ, Он содержит два литерала ЕАЕЗЕ и ТВОЕ, упорядоченные соотношением РАЕЗЕ < ТВОЕ.