Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Симула.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
393.73 Кб
Скачать

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

можно обращаться к процедуре номер (декларированной в классе расстановка), использующей процедуру оценка, декла­рированную в ядре блока.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]