Перевёл Лев Белава 2005.
На основе:
Beginners
Guide to Doplhin Smalltalk Chapter 3: Playing with Objects in the
Playground
Забава с Объектами на игровой площадке (Playground)
Предыдущая глава была несколько суха и содержала много теории. Попробуем немного отвлечься. Хотелось бы представить Вам уже готовую программу, входящую в изначальный образ Dolphin'a. Её имя - Playground. Playground - это окно, в которое можно добавлять различные геометрические фигуры и посылать им сообщения из рабочего пространства (workspace) (фигуры мы будем называть геометрическими объектами, так-как такое название более точно определяет их суть). Выглядит она примерно так:
Как мы уже знаем - геометрическим объектам можно посылать самые разные сообщения. Например, заставляющие их менять цвет, размер, количество рёбер, передвигаться в окне и даже изменять свой цвет. Кроме того им можно посылать запросы об их характеристиках и состояниях. Типичный диалог в workspace выглядит вот так:
А теперь откройте новое окно workspace и мы вместе попробуем реализовать несколько примеров.
Создаём объект Playground
Пакет Playground состоит из нескольких нужных нам классов и находится внутри Вашего образа Dolphin. Одним из них является собственно игровая площадка - Playground. Этот класс предоставляет программисту весь функционал окна Playground. Попробуем же создать такое окно:
playground := Playground new.
Заметьте, что в результате отправки сообщения #new классу Playground мы получили новое окно. Вы увидите как оно появиться на вашем экране. Объект языка Smalltalk, представляющий это окно также будет сопоставлен с переменной playground Вашего рабочего пространства workspace. А дальше? А дальше можно использовать эту переменную для коммуникации, что мы и попробуем сделать в последующих примерах.
Подсказка: в этой главе мы не раскрываем до конца идею классов. Более подробное описание будет в статье "Классы и Методы". Если всё-таки возникнут проблемы - не волнуйтесь. Просто запомните: в Smalltalk всё является объектом.
Добавление фигур в окно Playground
В пакет Playground входят несколько классов, представляющих различные геометрические фигуры. Из них нас интересуют: Triangle, Square и Circle. Попробуем добавить по одному объекту каждого класса в наше окно Playground:
teresa := playground add: Triangle new. simon := playground add: Square new. charlie := playground add: Circle new.
Повторим ещё раз. Мы создаём объекты классов (Triangle, Square, Circle итд.) посылая им (классам) сообщения #new. Затем добавляем их в Playground передавая их как параметр сообщению #add:. Сопоставление фигур дружественным переменным, происходит для того, чтобы позднее иметь возможность вести с ними "диалог"
Подсказка: как Вы помните, в предыдущей главе мы говорили о том, что есть некая конвенция программирования в Smalltalk. А именно: сообщение #add: в ответе всегда возвращает объект, который само и добавляет.
Теперь у нас есть несколько переменных:
"Teresa the Triangle"
"Simon the Square" и
"Charlie the Circle"
Диалог с Teresa, Simon и Charlie
Зададим нашим геометрическим объектам несколько вопросов. Попробуйте вычислить (Evaluate) следующие выражения за один раз и отобразить результаты используя Display it (Ctrl+D).
teresa position. simon position. charlie position.
Заметьте, что позиция каждой фигуры представлена координатами точки в двухмерном пространстве, которые указывают на центры опрашиваемых фигур относительно окна Playground.
Заметка: возрастание координаты Y к низу окна - это особенность работы интерфейса MS Windows.
Попробуем выслать другие сообщения нашим графическим объектам. Попробуйте следующее:
teresa sides. simon rotation. charlie color. teresa radius.
Ответом на сообщение #radius является радиус наименьшей окружности, в которую можно вписать опрашиваемый объект.
Попробуйте спросить Playground какие объекты в нём находятся:
playground shapes.
Заставим их попрыгать
Teresa, Simon и Charlie понимают ещё несколько различных сообщений, которые просят их выполнить некоторые операции. Попробуйте вычислить следующее выражение с помощью Ctrl+E:
simon radius: 80. simon rotateBy: 10. simon moveUp: 30. charlie color: Color magenta. charlie growBy: 20. teresa position: 300@100. teresa chooseColor. teresa growBy: 15; moveBy: 10 @ 15; color: Color green.
Запомните, последний пример является каскадом сообщений. И Вам придётся выделить все строки этого каскада, чтобы вычислить их одновременно.
Экспериментируем
Изюминкой Smalltalk является то, что Вы можете динамически взаимодействовать с объектами которые создаете. Попробуйте поэксперементировать сами. Попросите объекты Playground выполнить для Вас различные операции, а потом опросите их состояние. Возможно Вы захотите добавить несколько новых фигур.
Эти сообщения помогут Вам поэксперементировать.
Message | Parameter | ||
#sides | None | ||
#sides: | An integer | ||
#radius | None | ||
#radius: | A number | ||
#rotation | None | ||
#rotation: | A number | ||
#position | None | ||
#position: | A point | ||
#color | None | ||
#color: | A color | ||
#growBy: | A number | ||
#shrinkBy: | A number | ||
#rotateBy: | A number | ||
#moveBy: | A point | ||
#moveUp: | An integer | ||
#moveDown: | An integer | ||
#moveLeft: | An integer | ||
#moveRight: | An integer | ||
#chooseColor | None |
Помните, если Вы сделаете ошибку (возможно перепутаете параметры или типы), скорее всего встретитесь с сообщением об ошибке. Просто нажмите Terminate и в дальнейшем попробуйте исправить Ваш код. Если дела пойдут совсем плохо - закройте окно Playground и ассоциированное с ним рабочее пространство workspace и начните с начала.
Что Вы выучили?
Эта глава должна сформировать у Вас некоторые идеи относительно объектов и сообщений, ввод в которые был в предыдущей главе. Речь была о:
Программа Playground .
Создание новых объектов с помощью сообщения #new.
Создание окна Playground.
Добавление геометрических фигур в окно Playground.
Манипулирование и опрашивание графических объектов в окне Playground.
В последующих главах мы снова будем использовать нашу игровую площадку Playground для иллюстрации особенностей языка программирования Smalltalk.