Smalltalk в примерах/Сообщения: различия между версиями

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