Н. Джехани - Язык Ада (1988) (1160771), страница 64
Текст из файла (страница 64)
Для объекта задачного типа — неявное начальное (и единственное) значение обознача. ет соответствующую задачу. ° Если тип объекта является типом с дискриминантами и его подтип ограничен, то неявное начальное (и единственное) значение каждого дискриминанта определяется подтипом объекта. ° Дпя объекта составного типа неявное начальное значение каждой компоненты, имеющей выражение по умолчанию, получается вычислением этого выражения, если только комле. нанта не дискриминант ограниченного объекта (предыдущий случай). Если компонента сама является составным объектом, значение которой не определено ни явной инициализацией, ни выражением по умолчанию, то неявное начальное значение компо.
нент составного объекта определяется теми же самыми правилами, что и для описанного объекта. Шаги от а до г выполняются в указанном порядке. Если на шаге б вычисляется выражение по умолчанию для дискриминанта, то это вычисление выполняется до вычисления выражений по умолчанию для зависимых от дискриминанта подкомпонент, а также до вычисления выражений по умолчанию, содержащих имя дискриминанта. Кроме предыдущего правила, порядок вычисления выражений по умолчанию языком не определен. При инициализации описанного объекта или одной из его подкомпонент проверяется принадлежность начального значения подтипу объекта; для массива, описанного описанием объекта, сначала применяется неявное преобразование подтипа, как при выполнении оператора Описания я тяпы присваивания, если только объект не является константой с подтипом неограниченного индексируемого типа.
При отрицательном результате проверки возбуждается исключение СОМВТВА(МТ ЕЯВОЯ. Значение скалярной переменной после предвыполнения соответствующего описания объекта не определено, если начальное значение не было присвоено переменной при (явной или неявной( инициализации. Если операнд преобразования типа или квалифицированного выражения является составной переменной с неопределенными значениями скалярных подкомпонент, то значения соот. ветствующих подкомпонент результата неопределенны.
Выполнение программы ошибочно, если делается попытка вычислить скалярную переменную с неопределенным значением. Аналогично выполнение программы ошибочно, если делается попытка применить предопреде. пенную операцию к составной переменной, имеющей скалярную подкомпоненту с неопредепенным значением. Примеры описании переменных: СООМТ, 5ОМ: (МТЕОЕЯ: 5(28: (МТЕОЕЯ савва 0 .. 10 000:= 0; ЗОВТЕО: 500ЬЕАМ:= РАЬЗЕ; СОЬОВ ТА6ЬЕ: амат(1 .. М( с( СОЬОВ; ОРт(бм: 8(т честоя(1 .. 10(:= (с(ьагс > тйце(; Примеры описаний констант: ОМ(Т : асса(аы (МТЕОЕВ := 10 000; ЬОЧЧ ОМ(Т: ссас(аа( (МТЕОЕЯ ы ОМ(Т/10; ТО(.ЕВАМСЕ: ссашаа( ВЕАЬ: О(5РЕВ5(ОМ(1.16(; Примечание.
Выражение для инициализации константы не обязательно является статиче. ским выражением (см. 4.9(. В приведенных выше примерах (.(М((Т и ЕОЧЧ (.(М(Т инициализиро. ваны статическими выражениями, а ТОЕЕЯАМСŠ— нет, если О(ВРЕЯВ(ОМ вЂ” определенная пользователем функция. Ссылки: видимый раздел 7.2, вид в 6.1, в некотором порядке 1.6, вход 9.5, выражение 4.4, выражение по умолчанию для дискриминанта 3.7.1, вычисление 4.5, дискриминант 3.3, зависи.
мый от дискриминанта 3.7.1, задача 9, заданный тип 9.2, зарезервированное слово 2.9, исключение ошибка ограничения 11.1, квалифицированное выражение 4.7, компонента 3.3, лимитируемый тип 7.4.4, личный тип 7.4, настраиваемый модуль 12, начальное значение по умолчанию для ссылочного типа 3.8, ограниченный подтип 3.3, описание 3.1, определение ограниченного индексируемого типа 3.6, отрезок 4.1.2, пакет 7, первичное 4.4, подкомпонента 3.3, подпрограм. ма 6, подтип 3.3, предвыполнение 3.9, предопределенная операция 4.5, преобразования 4.6, присваивание 5.2, скалярный тип 3.5, составной ограничитель присваивания 5.2, составной тип 3.3, ссыпочныи тип 3.8, тип 3.3, указание подтипа 3.3.2, формальный параметр 6.1, фор.
мальный параметр настройки 12.1, 12.3, указывать 3.8. 3.2.2. ОПИСАНИЕ ЧИСЛА Примеры описаний чисел: = 3.14168 26636 = 2.0сР(; = 600: = 2с*16: 1 Р( : ссассаы Т(МО Р( сссссас( МАХ : сслс(алс РбччЕЯ 16: ссассаы ОМЕ, ОМ, Е(М5: салатам — вещественное число -- вещественное число -- целое число — целое число 66 636 †т различных имени 1 Ссылки: идентификатор 2.3, первичное 4.4, статическое выражение 4.9, тип 3.3, тип универсальный вещественный 3.5.6, тип универсальный целый 3.5.4, универсальный тип 4.10.
Описание числа — это специальная форма описания константы. Тип статического выражения, заданного для инициализации в описании числа, должен быть либо типом универсальный целый, либо типом универсальный вещественный. Константа, объявленная описанием числа, называется именованным числом и имеет тот же тип, что и статическое выражение. Примечание. Относящиеся к выражениям универсального типа правила излохсены в разделе 4.10. Из этих правил следует, что именованное число имеет универсальный целый тип, если каждое содержащееся в выражении первичное имеет этот тип.
Аналогично если каждое первичное имеет тип универсальный вещественный, то именованное число имеет этот тип. Глава 3 аа типы и подтипы Тип характеризуется множеством значении и множеством операций. Существует несколько классов типов. Скалярные типы — это целые и вещественные типы и типы, определенные перечислением своих значений; значения этих типов не имеют компонент. Индексируемый и именуемый типы являются составными. Значение составного типа состоит из значений компонент. Ссылочный тип — это тип, значения которого обеспечивают доступ к объектам. Личные типы — это типы, для которых полностью определяется набор возможных значений, но непосредственныи доступ к ним пользователеи невозможен.
Наконец, существуют звдачные типы. (Личные типы описаны в гл. 7, задачные —,в гл. 9, остальные — в гп. 3.) Именуемые и личные типы могут иметь специальные компоненты, называемые дискрими. нантами, значения которых различают альтернативные формы значений одного из этих типов. Если личный тип имеет дискриминанты, они известны пользователям типа.
Следовательно, личный тип известен только своим именем, своими дискриминантами, если они есть, и соответствующим набором операций. Набор возможных значений данного типа может зависеть от условия, которое называется ограничением (сюда не относятся случаи без ограничения), значение удовлетворяет ограничению, если оно удовлетворяет соответствующему условию.
Подтип — это тип вместе с ограни. чением; говорят, что значение принадлежит подтипу, если оно принадлежит типу и удовлетворяет ограничению; данный тип называется базовым типом подтипа. Тип является подтипом самого себя; такой подтип называется неограниченным; он соответствует условию, которое не налагает никаких ограничений. Базовым типом является он сам. Множество операций, определенных над конкретным типом, определено и для любого его подтипа; однако переменной данного подтипа можно присвоить значение только этого подтипа.
Дополнительные операции, например квалификация (в квалификационном выражении), неявно определяются описанием подтипа. Дпя объектов некоторых типов определено начальное значение по умолчанию, некоторые другие типы имеют выражения по умолчанию, определенные для всех или части своих компо. нент. Некоторые операции над типами и подтипами называются атрибутами; эти операции обозначаются именами, описанными в равд. 4.1.4. Термин подкомлонента используется в описании языка вместо термина компонента, чтобы указать компоненту другой компоненты или подкомпоненты.
Если нет других подкомпонент, используется термин компонента. Подкомпонента значения данного типа не должна быть этого же типа. Имя класса типов используется в описании языка для квалификации объектов и значении, принадлежащих к типу рассматриваемого класса. Например, термин индексируемый объект используется для объекта индексируемого типа; аналогично термин ссылочное значение используется для значения ссылочного типа. Примечание. Набор значений подтипа — это подмножество значении базового типа.
Это подмножество не обязано быть собственным подмножеством; оно может быть пустым. Ссылки: атрибут 4.1.4, вещественный тип 3.5.6, задачныи тип 9,1, именуемый тип 3.7, индексируемый тип 3.6, квалифицированное выражение 4.7, компонента записи 3.7, компонента массива 3.6, личный тип 7.4, объект 3.2.1, ограничение дискриминанта 3.7.2, описание подтипа 3.3.2, описание типа 3.3.1, перечислимый тип 3.5.1, присваивание 5.2, ссыпочный тип 3.8, целый тип 3.5.4. 3.3.1. ОПИСАНИЯ ТИПОВ Описание типа объявляет тип.
описание типа::= полное описание типа неполное описание типа ( описание .личного типа полное описание типа::= (уре идентификатор (раздел дискриминантов] (в определение типа; определение типа:: = определение перечиспимого типа определение целого типа определение вещественного типа определение индексируемого типа определение именуемого типа определение ссылочного типа определение производного типа Описания я типы Предвыполнение полного описания типа состоит из предвыполнения раздела дискриминантов, если он есть (исключая случай использования полного описания типа дпя неполного описания типа или описания личного типа), и предвыполнения определения типа. Типы, созданные в результате предвыполнения различных определений, являются различными.