Объектно-ориентированное программирование.Язык Смолток

         

Сообщения



Сообщения

Как уже говорилось, посылка сообщения служит для активизации того или иного метода. Такая посылка содержит указание адресата - имя получателя сообщения, т.е. имя объекта, к которому посылается сообщение, и само сообщение, представляющее собой требование выполнить процедуру над объектом - получателем сообщения. При этом вызывается соответствующая программа (метод). Сообщение представляет собой имя сообщения и, возможно, несколько объектов-параметров, с которыми может манипулировать метод.

Сообщение определяет, какая требуется операция, но не определяет, каким образом эта операция должна выполняться. Только получатель – объект, которому посылается сообщение, определяет, как выполнить эту операцию. Выполняемая операция, если она возможна, рассматривается как встроенная способность объекта, которую можно единообразно вызвать посылкой ему сообщения.

Программа в системе ООП, таким образом, - последовательность сообщений к различным объектам.

При описании посылок сообщений используют так называемые селекторы.

Посылка сообщения с унарным селектором может записываться, например, следующим образом: stack pop. Здесь stack указывает на объект - получатель сообщения, а pop

является унарным селектором, который и образует сообщение.

Посылка сообщения с бинарным селектором, например, арифметическое выражение, записывается в виде: x+y. Здесь x - получатель сообщения, а +y - сообщение. При этом y – единственный параметр, а "+" - бинарный селектор.

В общем случае бинарные селекторы должны оформляться специальными символами.

Есть возможность создания посылок с несколькими параметрами в сообщении. В выражении, реализующем эту возможность, используется селектор с ключевыми словами. Например, в посылке сообщения

pen move:east by:10

pen - получатель сообщения, move:east by:10 - само сообщение. Два ключевых слова move: и by: представляют собой селекторы ключевых слов, а east и 10 - значения параметров. В селекторе с ключевыми словами каждое ключевое слово должно заканчиваться двоеточием.
Таким образом, имеется возможность создания посылок сообщений без использования специальных символов селекторов.

Сообщение анализируется получателем, и поэтому два синтаксически одинаковых предложения, будучи посланы разным получателям, могут вызвать разные действия. Например, согласно сообщению

cursor moveTo:locationA



курсор будет передвинут в положение A (locationA), а согласно сообщению

window moveTo:locationA

в положение A будет перемещен выделенный фрагмент экрана - окно. В некоторых случаях разбор сообщения может окончиться неудачей. Например, в сообщении table+5 к столу нельзя прибавить 5: объекту table посылать сообщение +5 некорректно. В этом случае системой фиксируется ошибка по невозможности выполнения.

Унарное сообщение имеет более высокий приоритет, чем бинарные. Приоритет может задаваться скобками.

Например, x - y size = x - (y size).

Приведем некоторые примеры сообщений и их результатов:

Сообщение

Тип

Объект-адресат

Имя сообщения

Объект-параметр

Результат

1 + 2

Бинарное сообщение

1 (целое)

+

2 (Целое)

Целое

'привет' inPos: 5

Ключевое сообщение

'привет' (строка)

inPos:

5 (Целое)

Символ

12 factorial

Унарное сообщение

12 (целое)

factorial

Нет

Целое

5 in:3 and:7

Ключевое сообщение

5 (целое)

in: and:

3, 7 (Целое)

Истина


Содержание раздела