52 Глава 2. Синтаксис языка Смолток
объекту example4, все равно возвращается 2, поскольку схема выполнения
полностью идентична предыдущей, несмотря на переопределение классом
Four метода для сообщения test.
Подчеркнем: использование псевдопеременной super не означает, что
поиск нужного метода начнется в суперклассе получателя первоначального
сообщения. Использование super означает, что поиск начинается в супер-
классе того класса, в котором содержится метод, использующий псевдопе-
ременную super. В рассмотренном примере классом, содержащим метод с
псевдопеременной super, был класс Three, поэтому поиск нужного метода
начинался в классе Two. Даже если бы класс Three переопределял метод
test, результатом выполнения выражения example4 result3 было бы 2.
Рассмотренные классы иллюстрируют еще одну отмеченную ранее осо-
бенность — полиморфизм. Обратите внимание, что в классах One, Two,
Four содержится метод с одним и тем же именем test, но тела методов,
исполняемые объектами разных классов в ответ на это сообщение, разные.
Все определялось классом, которому принадлежал получатель сообщения.
Как следует из предыдущего, основной смысл псевдопеременной super со-
стоит в том, чтобы позволить объектам получить доступ к методам супер-
класса, даже если эти методы данным классом были переопределены.
Особенно часто подобный доступ нужен при написании корректного
метода создания нового экземпляра класса. Здесь очень важно правильно
использовать псевдопеременные super и self. Если в т аком методе вместо
правильного выражения ^ super new initialize написать ^ self new initialize,
то будет создан бесконечный цикл вызовов метода new.
2.6. Методы и примитивные методы
Вся работа осуществляется объектами, которым посылаются сообще-
ния. В ответ объекты вызывают для исполнения методы, в которых в свою
очередь посылаются сообщения другим объектам, и так далее. Но только
пересылая сообщения от одного объекта к другому, толку не добьешься.
Кто-то должен взаимодействовать с внешним миром. Но кто и как?
В методах многих классов встречается строка вида <primitive: nn>, где
nn — некоторое число. Тако е обозначение имеют примитивные методы си-
стемы, реализованные в виртуальной машине, а числа nn идентифицируют
их в выражениях, написанных на Смолтоке. В теле метода такая конструк-
ция располагается самой первой. Примитивные методы, как правило, вы-
полняют операции низкого уровня (такие как арифметические операции,
выделение памяти) или операции, критичные по производительности.