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

Содержимое удалено Содержимое добавлено
Строка 156:
-->
 
==Что происходит, когда посылается сообщение отправлено==
 
Когда сообщение посылается объекту, Smalltalk смотритпроверяет, существует ли метод с таким именем для текущего типа объекта (другими словами, был написанли он описан и помещён в класс объекта). Если такой метод есть, он выполняется. Если такого метода нет, этот метод ищется в непосредственном суперклассе. Если это метода нет в суперклассе, он ищется в суперклассе суперкласса. Рисунок~\ref{mehanizm} иллюстрирует это.
МетодПоиск ищетсяметода в иерархии суперклассов осуществляется до тех пор, пока не найдётсянайдется метод с этим именем, который и выполняется. Если достигнут класс Объект и в нём не найден метод, Объект показывает окносоответствующее Сообщениясообщение, и позволяядает тебевозможность запустить отладчик и узнатьвыяснить, что произошло\footnote{Что в действительности происходит когда метод не найден, посылается сообщение неПонял:. Если этот метод не переопределён он заставляет Объект вызвать исключение. !!!}.
 
<!--
\begin{figure}[!htb]
What happens when a message is sent
\begin{center}
When a message is sent to an object, the Smalltalk system looks to see if a method with that name exists for that type of object (in other words, has been written and stored in the class of the object). If there is a method, it is executed. If no method of that name is defined in the object's class, the system looks in the method dictionary for its immediate superclass. If there is no method with that name in the superclass it looks in the superclass's superclass.
\includegraphics{mehanizm.eps}
The method lookup keeps working its way up the superclass hierarchy until it finds a method with that name,which it then executes. If it reaches Object and still doesn't find a method, it displays a Notifier window that gives you an opportunity go into a Debugger and figure out what went wrong.
\end{center}
-->
\caption{Механизм нахождения метода}
\label{mehanizm}
\end{figure}
 
Метод ищется в иерархии суперклассов до тех пор пока не найдётся метод с этим именем, который и выполняется. Если достигнут класс Объект и в нём не найден метод, Объект показывает окно Сообщения позволяя тебе запустить отладчик и узнать что произошло\footnote{Что в действительности происходит когда метод не найден, посылается сообщение неПонял:. Если этот метод не переопределён он заставляет Объект вызвать исключение. !!!}.
 
==Получатель сообщения==