Сообщения
Сообщения
Как уже говорилось, посылка сообщения служит для активизации того или иного метода. Такая посылка содержит указание адресата - имя получателя сообщения, т.е. имя объекта, к которому посылается сообщение, и само сообщение, представляющее собой требование выполнить процедуру над объектом - получателем сообщения. При этом вызывается соответствующая программа (метод). Сообщение представляет собой имя сообщения и, возможно, несколько объектов-параметров, с которыми может манипулировать метод.
Сообщение определяет, какая требуется операция, но не определяет, каким образом эта операция должна выполняться. Только получатель – объект, которому посылается сообщение, определяет, как выполнить эту операцию. Выполняемая операция, если она возможна, рассматривается как встроенная способность объекта, которую можно единообразно вызвать посылкой ему сообщения.
Программа в системе ООП, таким образом, - последовательность сообщений к различным объектам.
При описании посылок сообщений используют так называемые селекторы.
Посылка сообщения с унарным селектором может записываться, например, следующим образом: 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 (Целое) |
Истина |