Содержание сайта
Главная Новичку Цитаты Реализации Статьи Документация
Компании Программы Ссылки Обсуждение Обсуждение 2 Гостевая

Перевёл Лев Белава 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.




Есть комментарии? Пишите.