
- •1.3.3. Классы
- •1.3.4. Возможность применения в специальных областях
- •2.1. Синтаксис
- •2.2. Семантика ,; V-
- •2.2.1. Подклассы
- •2.2.2. Сочленение . -
- •2.2.3. Виртуальные величины
- •4.3.2.2. Генераторы объектов ,
- •4.3.2.3. Локальный объект
- •4.3.2.4. Оперативная квалификация «
- •7. Дистанционное обращение
- •7.1.2. Семантика
- •10.8.2. Семантика
- •11.3.2. Семантика
- •1 12.1. Последовательности псевдослучайных чисел
- •14.2.1.2. Семантика-
4.3.2.2. Генераторы объектов ,
Генератор объектов вызывает порождение и исполнение некоторого объекта, принадлежащего указанному в генераторе классу. Этот объект является новым представителем (экземпляром) соответствующего (сочлененного) тела класса. Вычисление генератора объектов состоит в следующем;
порождается объект и вычисляются фактические па раметры генератора объектов. Передаются параметры-значе ния и (или) параметры-ссылки (о способах передачи пара метров см. разд. 8); * ,,
управление входит в объект через его начальный сим вол begin, в силу чего объект оказывается работающим в «прикрепленном состоянии» (см. разд. 9). Вычисление ге нератора объектов заканчивается* в следующих случаях:
а) когда выполняется основная процедура detach «по по ручению» порожденного объекта (см. разд. 9.1);
б) при выходе из порожденного объекта через его замы кающий символ end.
Значением генератора объектов является сам объект, порожденный в результате вычисления генератора. После вычисления генератора объект или «самостоятелен» (случай «а»), или «завершен» (случай «б»).
У
4.3.2.3. Локальный объект
■ Локальный объект вида this С является допустимым выражением, если оно находится
в теле класса С или в теле подкласса класса С, или .
в присоединяющем блоке с классом С или с подклас сом этого класса в качестве квалификации блока (см. разд. 7.2).
Значение выражения (локальный объект) в некотором данном контексте — это объект, который является (или который присоединен) наименьшим статически охватывающим экземпляром блока, где локальный объект является допустимым выражением. Если такого блока нет, то данное выражение (локальный объект) незаконно (в этом контексте). Для экземпляра процедуры или тела класса термин «статически охватывающий» означает «содержащий ее (его) декларацию».
4.3.2.4. Оперативная квалификация «
л-
- Пусть X представляет какое-либо простое выражение для ссылки, и пусть С и D суть идентификаторы класса, причем D является квалификацией выражения X. Тогда- квалифицированный объект X qua С является допустимым объектным выражением при условии, что класс С содержит класс D или является подклассом класса D. В противном случае, т. е. если С и D не принадлежат к одной последовательности префиксов, квалифицированный объект Л" qua С недопустим. Если значением выражения X является попе или объект класса, не содержащегося в классе С, то при вычислении X qua С выдается Сообщение об ошибке х)\ во всех других случаях значением X qua С является значение выражения X.
4.4. ТЕКСТОВЫЕ ВЫРАЖЕНИЯ
4.4.1. Синтаксис
(простое текстовое выражение): :~notext| (переменная)
(указатель функции)) (текстовое выражение)
(текстовое выражение) :: = (простое текстовое выражение) |
if (логическое выражение) then (простое текстовое выражение) else (текстовое выражение) (простое текстовое значение): : = (простое текстовое
- . выражение) | (строка)
(текстовое выражение) :: =(простое текстовое значение) I if
логическое выражение) then простое текстовое значение) else (текстовое значение)
W
1) При выдаче сообщения об ошибке исполнение программы прекращается." — Прим. перев.
4.4.2. Семантика .
■
Составляющими строк являются внешние литеры и (или) другие представления внутренних литер, определенные в конкретной реализации языка.
Строка является текстовым значением, а не текстовой ссылкой. Не являясь текстовым выражением, она может выступать в качестве источника (т. е. правой части) оператора присваивания текстового значения (см. разд. 10.6), в качестве операнда отношения текстовых значений (см. разд. 5.2) и в качестве фактического параметра, вызываемого по значению (см. разд. 8.2.1).
В Некоторой конкретной реализации обе кавычки для Строк могут представляться одной и той же внешней литерой. В данном сообщении оба эти символа представляются апострофом (').
notext означает ссылку на пустой текст. Дальнейшие сведения о текстах см. в разд. 10.-
5. ОТНОШЕНИЯ
(отношение):: = (АЛГОЛ-отношение)
отношение литер) | отношение текстовых значений) | /отношение объектов) | (отношение ссылок)
5.1. ОТНОШЕНИЯ ЛИТЕР
5.1.1. Синтаксис
(отношение литер) :: = (простое литерное выражение)
(знак операции отношения) (простое литерное выражение)
5.1.2. Семантика
■
*
Литерные значения можно проверять на равенство и не равенство и оценивать в соответствии с упорядоченностью алфавита (определенной в каждой конкретной реализации). Отношение :•/./■ ' ,
■л: rely,
■ ■ ■■■ ■-- . - ■
где х и у имеют литерные значения, a rel есть какой-нибудь знак операции отношения, имеет то же самое логическое
^значение, что и отношение
F
г rank (x) rel rank (у).
5.2. ОТНОШЕНИЯ ТЕКСТОВЫХ ЗНАЧЕНИЙ
ч
ч
"'5.2Л- Синтаксис
■ (отношение текстовых значений) ::= (простое текстовое ■'•"•. ' значение)
(знак операции отношения) (простое текстовое
значение)
5.2.2. Семантика
41
Два текстовых значения считаются равными, если они или оба пусты, или оба суть экземпляры одной и той же последовательности литер. В противном случае они считаются не-J равными.
;.. Текстовое значение Т ниже, чем текстовое значение t/, тогда и только тогда, когда они не равны и выполняется одно из следующих условий:
Т пусто;
U равно Т, пополненному справа одной или несколь кими литерами;
i-я литера из Т ниже, чем 1-я литера из U, где / (/> 1) есть наименьшее целое, при котором i-e литеры из Т и U не равны.
.3. ОТНОШЕНИЯ ОБЪЕКТОВ
5.3.1. Синтаксис
(отношение объектов) :: = (простое объектное выражение)
is (идентификатор класса) |
(простое объектное выражение) in (идентификатор класса)
5.3.2. Семантика
щ
Знаки операций' is: и in служат для проверки принадлежности объекта классу.
Отношение X is С имеет значение true, если X ссылается на объект класса С, в противном случае оно имеет значение false. Отношение XlnC имеет значение true, если X ссылается на объект класса, содержащегося в С, в противном случае оно имеет значение false.
5.4. ОТНОШЕНИЯ ССЫЛОК
5.4.1. Синтаксис
(знак операции отношения ссылок) :: = ===[=/ = (отношение ссылок) :: = (отношение ссылок на объект) |
(отношение ссылок на текст) (отношение ссылок на объект) :: = (простое объектное .
выражение)
(знак операции отношения ссылок) (простое объектное
1 выражение)
(отношение ссылок на текст) :: = (простое текстовое
1 й выражение)
(знак операции отношения ссылок) (простое текстовое
выражение)
5.4.2. Семантика
- Знаки «операций отношения ссылок = = и =/= служат1) , для сравнения ссылок (но не значений, на которые эти ссылки указывают!). Две ссылки на объект (на текст) X и Y называются «идентичными», если они ссылаются на один и тот же объект (экземпляр текстового значения) или обе суть попе (суть ссылки на пустой текст); в этом случае отношение X= = Y имеет значение true, в противном случае оно имеет значение false.
Отношение X =/~ U является отрицанием ' отношения
Пусть Т и U суть, ссылки на текст. Отметим, что оба отношения Т = / = U и Т= =U могут (одновременно) иметь значение true, когда Т и U ссылаются на одинаковые, но физически различные последовательности литер.
6. ОПЕРАТОРЫ
(оператор) :: = (АЛГОЛ-оператор) | ■
(присоединяющий оператор) | (оператор активации).
О присоединяющих операторах см. разд. 7.2. Об опера торах активации см. разд. 14.2.3.
Знаки
операций == и —I— можно читать
соответственно: «иден
тична» и
«неидентична» или «указывает на то же,
что и» и «указывает не
на то же, что».
— Прим. перев. . .
6.1. ОПЕРАТОРЫ ПРИСВАИВАНИЯ
6.1.1. Синтаксис 1)
W
(оператор присваивания):;=
(присваивание значений) ((присваивание, ссылок) (ЛЧ значений) :: = (переменная) ((идентификатор процедуры) |
(простое текстовое выражение) (ПЧ значений) :: = (выражение для значения) |
(текстовое значение)|
■ (присваивание значения)
/присваивание значения) :; = (ЛЧ значений): = (ПЧ значений) (ЛЧ ссылок) :: = (переменная/ [(идентификатор процедуры) (ПЧ ссылок) :: — (выражение для ссылки) |
(присваивание ссылки) (присваивание ссылок)::=
(ЛЧ ссылок) : — (ПЧ ссылок)
6.1.2. Семантика
Знак операции := (читается — становится равным) означает:
— присваивание некоторого значения переменной обык- - новенного типа или идентификатору процедуры обык новенного типа, являющемуся ЛЧ значений, или
—. присваивание текстового значения тексту, на который
ссылается ЛЧ значений.
Знак операции : — (читается — начинает обозначать) означает:
— присваивание " ссылки переменной ссылочного типа или идентификатору процедуры ссылочного типа, являющемуся ЛЧ ссылок.
В этом контексте идентификатор процедуры означает участок памяти (ячейку), локальный в соответствующем экземпляре процедуры. Содержимое этого участка и является значением или ссылкой, доставляемой соответствующим указателем функции при его вычислении.
Присваиваемое значение (или ссылка) является копией значения (или ссылки), получающегося при вычислении ПЧ значений (или ссылок). Если ПЧ сама есть присваивание, то
доставляемое ею значение является копией значения, присвоенного при ее выполнении в качестве присваивания.
Любое выражение, которое является ЛЧ или его составной частью, вычисляется раньше вычисления ПЧ. Подробное описание присваивания текстовых значений см. в разд. 10.6.
Для объектов не существует присваивания значений.
Тип значения или ссылки, получающейся при вычислении ПЧ, должен совпадать с типом ЛЧ. Из этого правила допускаются исключения, рассматриваемые ниже. .. • "
Если ЛЧ является формальным параметром, а тип соответствующего фактического параметра не совпадает с типом формально^ спецификации, то операция присваивания выполняется в два этапа:
1) выполняется присваивание значения ПЧ некоторой фиктивной переменной типа, специфицированного для формального параметра;
* 2) выполняется присваивание, ЛЧ которого является фактический параметр, а ПЧ — упомянутая фиктивная переменная.
л ■
Значением (или ссылкой), получающимся при вычислении присваивания, является в этом случае содержимое упомянутой фиктивной переменной.
Относительно присваивания ссылок на текст см. разд. 10.5.
6.1.2.1. Присваивание арифметических значений
*
I
Так же как и в языке АЛГОЛ-60, любое арифметическое значение может быть присвоено ЛЧ типа real или integer. При необходимости выполняется соответствующая функция преобразования. '
В качестве примера рассмотрим оператор (не допустимый, однако, в языке АЛГОЛ-60)
где X и Y суть переменные типа real, i—переменная типа integer, a F — формальный параметр, вызываемый по найме-' нованию и специфицированный как real. Если фактическим-параметром, соответствующим F, является переменная типа real, то X, /, У и F получают значения 3, 3, 3.14 и 3.14 соот-'. ветственно. Если же фактическим параметром, соответствующим F, является переменная типа integer, то X, £, У и F получают значения 3, 3, 3.14 и 3 соответственно. .;. V, ' ~ ■
6.1.2.2. Присваивание ссылок на объект
1 Пусть ЛЧ присваивания ссылок на объект квалифициро вана идентификатором класса С/, и пусть ПЧ квалифициро вана идентификатором класса Сг. Если ПЧ сама является присваиванием ссылок, то Сг по определению является квали фикацией ЛЧ этого последнего присваивания. Пусть V есть значение, получающееся при вычислении ПЧ. Законность и результат присваивания ссылок зависят от соотношения ме жду С/, Сг и V. L
Случай 1. Класс С1 содержит класс Сг. Присваивание
ссылок законно, и операция присваивания выполняется.
Случай 2. Класс С1 является подклассом класса Сг. Присваивание законно. Оно выполняется, если V есть попе, или является объектом класса С1/, или подкласса класса С1. В противном случае выдается сообщение об ошибке.
Случай 3. С1 и Сг не удовлетворяют ни одному из указанных выше условий. Присваивание незаконно.
Аналогичные правила приложимы также к неявным присваиваниям параметру цикла и к передаче параметров.
■ ■
в
' Пример 1:
Пусть Гаусс есть класс, декларированный в примере в разд. 2.2.
ref (Гаусс) *G5, G10;
G5: —new Гаусс (5); G10: — new Гаусс (10);
Значениями переменных G5 и G10 являются теперь объекты класса Гаусс. См' также пример 1 в разд. 7.1.2.
Пример 2:
Пусть точка и поляр — это классы, декларированные а примере разд. 2.2.2. :
ref (точка) PI, Р2; ref (поляр) РЗ;
Р\ : — new поляр (3, 4); Р2 : — new точка (5, 6);
Оператор РЗ:— Р\ присвоит переменной РЗ ссылку на объект класса поляр, который сам является значением переменной Р1. Оператор РЗ :— Р2 привел бы к выдаче сообщения об ошибке во время его выполнения.
6.2. ОПЕРАТОРЫ ЦИКЛА .
6.2.1. Синтаксис
(заголовок цикла) :: = (АЛГОЛ-заголовок цикла) |
for (переменная) : — (список объектов) (список объектов) :: =/элемент списка объектов)!
(список объектов), (элемент списка объектов) (элемент списка объектов) :: = (объектное выражение) |
(объектное выражение) while (логическое выражение)
W
I
6.2.2. Семантика
Конструкция (список объектов) аналогична по смыслу конструкции (АЛГОЛ-список цикла). Расширение оператора цикла облегчает обработку списочных структур.
Каждое неявное присваивание ссылок подчиняется правилам из разд. 6.1.2.2.
6.3. БЛОКИ С ПРЕФИКСАМИ
6.3.1. Синтаксис
(блок) :: = (АЛГОЛ-блок) | (блок с префиксом) (префикс блока):: = ' ^\".'
(идентификатор класса) (совокупность фактических
параметров) (ядро блока) :: = (непомеченный блок)) . "
(непомеченный составной) (непомеченный блок с префиксом) :: =
(префикс блока) (ядро блока)
(блок с префиксом) :: — (непомеченный блок с префиксом) |
. (метка) : (блок с префиксом)
6.3.2. Семантика „
Экземпляр блока с префиксом является составным объектом, префиксная часть которого есть объект класса, указанного префиксом блока, а ядро — экземпляром ядра блока. Формальные параметры префиксной части получают исходные значения в соответствии с фактическими параметрами префикса.
Сочленение производится в соответствии с правилами, аналогичными правилам разд. 2.2.2.
При образовании блоков с префиксами необходимо соблюдать следующие ограничения:
Объект, в котором встречается ссылка на него самого через некоторый локальный объект, не может быть префикс ной частью экземпляра блока с префиксом.
Идентификатор класса некоторого префикса блока должен идентифицировать класс, локальный в наименьшем блоке, охватывающем блок с префиксом. Если этот иденти фикатор является идентификатором системного класса, то'он относится к некоторой фиктивной декларации этого систем ного класса, как' бы находящейся в начале наименьшего охватывающего блока. В конкретных реализациях языка можно ограничить количество различных блочных уровней, на которых можно пользоваться такими префиксами (см. разд. 11 и 14).
*■ Экземпляр блока с префиксом является самостоятельным объектом (см. разд. 9). Программа считается вложенной в некоторый блок с префиксом (см. разд. 11), поэтому она является самостоятельным объектом.
Пример:
Пусть расстановка означает класс, декларированный в примере разд. 2.2.3. Тогда внутри блока с префиксом
расстановка (64) begin integer procedure оценка (Т);
text Г; :....;
end
можно обращаться к процедуре номер (декларированной в классе расстановка), использующей процедуру оценка, декларированную в ядре блока.