321
Ê Выполнение программы Smalltalk. Модель выполнения для Smalltalk основа"
на на коммуникационной модели (communication model). Данные в Smalltalk
состоят из объектов, а методы рассматриваются как сообщения, посылае"
мые объектам. Так, 1 + 2 означает, что сообщение «+» с параметром 2 посла"
но целочисленному объекту
1. Метод «+» в данном
случае возвращает зна"
чение 3. На первый взгляд это может показаться странным, но становится
вполне естественным после небольшой практики.
Smalltalk использует динамическую модель последовательности выпол"
нения действий. Каждый метод выполняется с одновременным созданием
записи активации, называемой контекстом. Так как блоки, которые содер"
жат локальные переменные, могут быть присвоены переменной, то стеко"
вый механизм организации памяти, при котором читается последний запи"
санный объект, становится здесь некорректным. Как для хранения объектов
данных, так и для хранения записей активации Smalltalk должен использо"
вать динамическую организацию памяти в виде кучи. Как правило, исполь"
зуется динамическая сборка мусора, хотя семантика необходимой сборки
мусора в языке не специфицирована.
7.2.5. Объекты и сообщения
Smalltalk представляет альтернативный подход к разработке объектов и методов,
значительно отличающийся по своей идеологии от моделей наследования, пред"
ставленных ранее в этой главе для языков Ada и С++. Идея Smalltalk принадлежит
Алану Кею из Xerox Palo Alto Research Center, он предложил ее в начале 70"х гг.,
но окончательный вариант вобрал в себя многочисленные дополнения других раз"
работчиков. Smalltalk был разработан как целая вычислительная среда для персо"
нального компьютера. Поэтому он включал в себя не только язык для представле"
ния алгоритмов, но и среду вычисления, состоящую из разделенного на окна
(windows) экрана монитора и мыши рабочей станции Xerox Alto. Теперь подоб"
ные возможности являются общепринятыми, но в то время их появление рассмат"
ривалось как революционный шаг вперед.
Программа на Smalltalk состоит из набора определений классов, состоящих, в свою
очередь, из объектов данных и методов. Все данные инкапсулированы, так как толь"
ко методы, определенные для класса, имеют доступ к данным, принадлежащим
этому классу. Сокрытие информации и инкапсуляция являются неотъемлемыми
встроенными свойствами языка в отличие от C++, в котором эти свойства были
добавлены поверх уже существующей структуры типов языка.
Программа на Smalltalk обычно включает в себя три основные составляющие.
1. Определения классов. Они представлены выполняемыми операторами, оп"
ределяющими внутреннюю структуру и методы, которые могут быть исполь"
зованы для создания и манипуляции объектами класса. Также могут быть
определены данные, используемые совместно всеми объектами определен"
ного класса.
2. Создание объектов. Для каждого определения класса создаются свои объек"
ты посредством вызова методов создания в определении этого класса. Ме"
тоды можно определять для отдельных экземпляров класса.
7.2. Наследование