Объекты и именованные числа
Объект —
это понятие языка; объект имеет (содержит) значение данного типа. Объектом может быть:
• объект, объявленный в описании объекта или в описании одиночной задачи;
• формальный параметр подпрограммы, входа или настраиваемой подпрограммы;
• формальный объект настройки;
• параметр цикла;
• объект, указанный значением ссылочного типа;
• компонента или отрезок другого объекта.
Описание числа — это специальная форма описания объекта, которая связывает идентификатор со значением типа
универсальный-целый
или
универсальный-вещественный.
описание-объекта ::= список-идентификаторов : [constant] указание-подтипа [:= выражение]; список-идентификаторов : [constant] определение-ограниченного-индексируемого-типа [:= выражение];
описание-числа ::= список-идентификаторов : constant := универсальное-статическое-выражение;
список-идентификаторов ::= идентификатор {, идентификатор}
Описание объекта называется
единичным описанием
объекта, если список его идентификаторов имеет единственный идентификатор; оно называется
групповым описанием объектов,
если его список имеет два или несколько идентификаторов. Групповое описание объектов эквивалентно последовательности соответствующего числа единичных описаний объектов. Для каждого идентификатора из списка в такой эквивалентной последовательности единичное описание объекта формируется из идентификатора, двоеточия и всего того, что стоит справа от двоеточия в групповом описании объекта; описания в эквивалентной последовательности идут в том же порядке, что и список идентификаторов.
Аналогичная эквивалентность имеет место также для списка идентификаторов описания числа, описаний компонент, спецификаций дискриминантов, спецификаций параметров и описаний параметров настройки, исключений и субконстант.
В остальной части описания языка все пояснения даны для описаний с единственным идентификатором; соответствующие пояснения для описаний с несколькими идентификаторами следуют из эквивалентности, установленной выше.
Примеры:
-- групповое описание объектов JOHN, PAUL : PERSON_NAME := new PERSON(SEX => M); -- CM. 3.8.1 -- эквивалентно единичным описаниям объектов, -- следующим в данном порядке JOHN : PERSON_NAME := new PERSON(SEX => M); PAUL : PERSON_NAME := new PERSON(SEX => M);
Ссылки:
вход 9.5, выражение 4.4, идентификатор 2.3, компонента 3.3, настраиваемая подпрограмма 12.1, настраиваемый модуль 12, настраиваемый формальный объект 12.1.1, область действия 8.2, описание 3.1, описание исключения 11.1, описание одиночной задачи 9.1, описание параметра настройки 12.1, описание субконстанты 7.4, определение индексируемого типа 3.6, отрезок 4.1.2, параметр цикла 5.5, подпрограмма 6, простое имя 4.1, спецификация дискриминанта 3.7.1, спецификация параметра 6.1, ссылочный тип 3.8, статическое выражение 4.9, тип 3.3, тип универсальный вещественный 3.5.6, тип универсальный целый 3.5.4, указание подтипа 3.3.2, указывать 3.8, формальный объект настройки 12.1.1, формальный параметр 6.1, числовой тип 3.5.
3.2.1. ОПИСАНИЯ ОБЪЕКТОВ
Описание объектов вводит объект, тип которого задан либо указанием подтипа, либо определением индексируемого типа. Если описание объекта включает составной ограничитель-присваивание, за которым следует выражение, то это выражение определяет начальное значение описываемого объекта; тип выражения должен быть тем же, что и тип объекта.
Описываемый объект —
константа,
если в описании объекта присутствует зарезервированное слово
constant.
В этом случае описание должно включать явную инициализацию. Значение константы не может быть изменено после инициализации. Формальные параметры вида in подпрограмм и входов, а также формальные параметры настройки вида in являются константами; параметр цикла — константа в соответствующем цикле; подкомпонента или отрезок константы тоже константа.
Объект, не являющийся константой, называется
переменной
(в частности, объект, заданный описанием объекта без зарезервированного слова
constant,
является переменной). Для- изменения значения переменной существует только два пути: непосредственное присваивание и косвенное изменение (см. 6.2) оператором вызова процедуры или входа (это действие может быть выполнено над самой переменной, над подкомпонентой переменной либо над другой переменной, для которой данная является подкомпонентой).
Предвыполнение описания объекта происходит следующим образом:
а. Устанавливается подтип объекта посредством предвыполнения указания подтипа или определения ограниченного индексируемого типа.
б. Если описание объекта включает явную инициализацию, то его начальное значение получается вычислением соответствующего выражения. В противном случае вычисляются неявные начальные значения (если они есть) объекта или его подкомпонент.
в. Создается объект.
г. Начальное значение (заданное явно или по умолчанию) присваивается объекту или соответствующей подкомпоненте.
Неявные начальные значения определяются для объектов, заданных описанием объекта, и для компонент таких объектов в следующих случаях:
• Для объекта ссылочного типа — его неявное начальное значение равно пустому значению ссылочного типа.
• Для объекта задачного типа — неявное начальное (и единственное) значение обозначает соответствующую задачу.
• Если тип объекта является типом с дискриминантами и его подтип ограничен, то неявное начальное (и единственное) значение каждого дискриминанта определяется подтипом объекта.
• Для объекта составного типа неявное начальное значение каждой компоненты, имеющей выражение по умолчанию, получается вычислением этого выражения, если только компонента не дискриминант ограниченного объекта (предыдущий случай).
Если компонента сама является составным объектом, значение которой не определено ни явной инициализацией, ни выражением по умолчанию, то неявное начальное значение компонент составного объекта определяется теми же самыми правилами, что и для описанного объекта.
Шаги от а до г выполняются в указанном порядке. Если на шаге б вычисляется выражение по умолчанию для дискриминанта, то это вычисление выполняется до вычисления выражений по умолчанию для зависимых от дискриминанта подкомпонент, а также до вычисления выражений по умолчанию, содержащих имя дискриминанта. Кроме предыдущего правила, порядок вычисления выражений по умолчанию языком не определен.
При инициализации описанного объекта или одной из его подкомпонент проверяется принадлежность начального значения подтипу объекта; для массива, описанного описанием объекта. сначала поименяется неявное преобразование подтипа, как пои выполнении оператора
присваивания, если только объект не является константой с подтипом неограниченного индексируемого типа. При отрицательном результате проверки возбуждается исключение
CONSTRAINT_ERROR.
Значение скалярной переменной после предвыполнения соответствующего описания объекта не определено, если начальное значение не было присвоено переменной при (явной или
неявной) инициализации.
Если операнд преобразования типа или квалифицированного выражения является составной переменной с неопределенными значениями скалярных подкомпонент, то значения соответствующих подкомпонент результата неопределенны. Выполнение программы ошибочно, если делается попытка вычислить скалярную переменную с неопределенным значением. Аналогично выполнение программы ошибочно, если делается попытка применить предопределенную операцию к составной переменной, имеющей скалярную подкомпоненту с неопределенным значением.
Примеры описаний переменных:
COUNT, SUM : INTEGER; SIZE : INTEGER range 0 .. 10_000 := 0; SORTED : BOOLEAN := FALSE; COLOR TABLE : array(1 .. N) of COLOR; OPTION : BIT_VECTOR(1 .. 10) := (others => TRUE);
Примеры описаний констант:
LIMIT : constant INTEGER := 10_000; LOW LIMIT : constant INTEGER := LIMIT/10; TOLERANCE : constant REAL := DISPERSION(1.15);
Примечание
Выражение для инициализации константы не обязательно является статическим выражением (см. 4.9).
В приведенных выше примерах LIMIT и LOW-LIMIT инициализированы статическими выражениями, a TOLERANCE - нет, если DISPERSION - определенная пользователем функция.
Ссылки:
видимый раздел 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. ОПИСАНИЕ ЧИСЛА
Описание числа — это специальная форма описания константы. Тип статического выражения, заданного для инициализации в описании числа, должен быть либо типом
универсальный-целый,
либо типом
универсальный-вещественный.
Константа, объявленная описанием числа, называется
именованным числом
и имеет тот же тип, что и статическое
выражение.
Примечание.
Относящиеся к выражениям универсального типа правила изложены в разделе 4.10. Из этих правил следует, что именованное число имеет
универсальный-целый
тип, если каждое содержащееся в выражении первичное имеет этот тип. Аналогично если каждое первичное имеет тип
универсальный-вещественный,
то именованное число имеет этот тип.
Примеры описаний чисел:
pi : constant := 3.14159_26636; -- вещественное число TWO_PI : constant := 2.0*PI; -- вещественное число МАХ : constant := 500; -- целое число POWER16 : constant := 2**16; -- целое число 65-536 ONE, UN, EINS : constant := 1; -- три различных имени 1
Ссылки:
идентификатор 2.3, первичное 4.4, статическое выражение 4.9, тип 3.3, тип универсальный вещественный 3.5.6, тип универсальный целый 3.5.4, универсальный тип 4.10.
Пред. | Уровень выше | След. |
Глава 3. ОПИСАНИЯ И ТИПЫ |
Содержание | 3.3. ТИПЫ И ПОДТИПЫ |