Smalltalk в примерах/Сообщения: различия между версиями
Содержимое удалено Содержимое добавлено
Kolas (обсуждение | вклад) м орфография |
|||
Строка 30:
<tt>==</tt> идентичность, т.е. один и тот же объект
<tt>&</tt> логическое и, возвращает истину если оба объекта получатель и аргумент истинны. Получатель и аргумент оба вычисляются, поэтому лучше пользоваться сообщением и:, которое вычисляет только то что необходимо и оно также
<tt>|</tt> логическое или, возвращает истину если получатель или аргументы истинны. Получатель и аргумент оба вычисляются, поэтому лучше пользоваться сообщением или:, которое вычисляет только то что необходимо и оно также
<tt>,</tt> соединение двух совокупностей. Обычно используется для объединения строк.
Строка 112:
\end{figure}
Метод ищется в иерархии суперклассов до тех пор пока не найдётся метод с этим именем, который и выполняется. Если достигнут класс Объект и в нём не найден метод, Объект показывает окно Сообщения
==Получатель сообщения==
Строка 140:
Когда <i>супер</i> должна использоваться? Один из основных примеров это создание экземпляра. Если вы хотите инициализировать переменные экземпляра вы обычно пишете метод <tt>инициализировать</tt> на стороне экземпляра. Вы не можете наследовать метод <tt>новый</tt> пока у вас нет метода <tt>инициализация</tt>, но вы должны написать свой собственный метод <tt>новый</tt>, который будет наследовать поведение метода <tt>новый</tt> от суперкласса. Знак <tt>^</tt>, показанный ниже, означает <i>возвращаемое</i> значение.
МойКласс>>
... присвоение некоторых переменных ...
класс МойКласс>>новый
^супер новый
Фактически, <i>супер не</i> ссылается на суперкласс объекта которому пришло сообщение. Вместо этого, он ссылается на суперкласс объекта в котором определён выполняемый код. Это тонкое различие, но очень важное, потому что если бы это было не так, было бы легко получить бесконечную рекурсию. Давайте посмотрим почему. Пусть мы имеем иерархию классов КлассДва подкласс КлассаОдин, и КлассТри подкласс КлассаДва, как показано на Рисунке~\ref{ierarhix123}.
Строка 158:
Все три класса имеют переменные экземпляра, которые должны быть инициализированы, и код, делающий это, выглядит примерно как следующий.
КлассОдин>>
... присвоение некоторым переменным ...
КлассДва>>
супер
... присвоение некоторым переменным ...
КлассТри>>
супер
... присвоение некоторым переменным ...
|