Публикации сообщества

Екатерина Додонова • 10 ноября 2018

Изучаем объектно-ориентированное программирование с Alice

Хотела бы рассказать о возможностях для обучения объектно-ориентированному подходу в программировании в среде программирования Alice на конкретном примере.

Для начала пару слов об объектно-ориентированном подходе. Если верить Википедии, объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

ООП - это  очень распространенная и востребованная парадигма, которая используется почти во всех современных языках программирования.

В центре ООП - понятие объекта. Обычный человеческий язык и наше восприятие мира в целом, отражает идеологию ООП.

Работа  над проектом в Alice строится в парадигме ООП. Давайте рассмотрим это на примере.

Начало работы над проектом. Размещаем на сцене первого персонажа - это Алиса. Что мы можем сказать об этом персонаже? Это объект, по имени Алиса (мы указали это имя, когда создавали персонаж). Алиса является экземпляром класса Alice. То есть можно создать много похожих персонажей, которые будут принадлежать к классу Alice, будут являться экземплярами этого класса, но обладать своими уникальными именами и характеристиками. Например, добавлю персонажа по имени Маша, который будет выглядеть так же, как и Алиса, но будет меньше ростом и полупрозрачной. Это тоже экземпляр класса Aice, но со своими характеристиками.

Теперь посмотрим внимательнее на класс Alice, к которому принадлежит наш персонаж. Класс называется Alice (WONDERLAND) и он является наследником класса Alice, который, в свою очередь, является наследником класса Biped (двуногие прямоходящие).

Это означает, что наша Алиса имеет такую же “структуру” что и все представители класса Alice: она одета в платье с фартуком и у нее волосы до плеч.  Мы можем сделать ее выше или ниже, дать другое имя, раскрасить или сделать прозрачной, но все равно любой экземпляр класса Alice будет девочкой в платье с фартуком. Поскольку данный класс наследует от класса Biped (двуногие), то у любого его экземпляра, как у всех двуногих есть две ноги, две руки, шея, голова и разные суставы, относительно которых конечности могут поворачиваться. И любой экземпляр класса - наследника от Biped будет иметь аналогичную структуру.

Для примера добавим еще несколько персонажей в наш проект: скелета Джо и пикси Анну. Джо является экземпляром класса Skeleton, а Анна - экземпляром класса Pixie. Оба эти класса наследуют от класса Biped, но при этом они не имеют волосы или платье, как Алиса, поскольку не являются наследниками класса Alice. При этом пикси Анна, кроме рук и ног имеет также свои собственные новые “части” - это крылья.

Итак, наследники одного класса имеют общий “костяк”, но при этом могут также обладать своими собственными новыми характеристиками (платье у Алисы или крылья у Анны).

Пока что наш проект представляет собой неподвижную картинку. Попробуем “разговорить” наших персонажей.

Каждый класс, с которым мы работаем, обладает не только какой-то определенной структурой (суставы, конечности, внешний вид…), но также и  “умениями”: может перемещаться по миру, сгибать конечности в суставах, менять цвет или прозрачность, говорить и т.д. Для того, чтобы описывать некоторые действия над или с объектом, мы используем методы класса. В Alice методы класса, описывающие действия, называются процедурами.

Также мы можем получать некоторую информацию об объектах (где он находится, какого он роста, в каком направлении смотрит и т.д.), для того, чтобы получить некоторую информацию в качестве результата выполнения команды, мы используем функции. Функции и процедуры - это методы класса, для каждого класса существуют свои методы. Кроме того,  классы-наследники наследуют методы от своих предков: если двуногие умеют поднимать и опускать ногу, то и Алиса, и скелет Джо, и пикси Анна тоже это умеют, поскольку они являются экземплярами класса - наследника Biped.

Давайте научим наших двуногих говорить “Привет!”

  1. Переключимся в режим Edit Code и создадим новый метод для класса Biped. Этот метод будет описывать действие с объектом, а значит является процедурой, которую мы назовем СказатьПривет.
  2. Кликнем по кнопке с желтым шестиугольником: здесь мы видим список всех классов, экземпляры которых присутствуют в нашем проекте.
  3. Мы добавляем новую процедуру для класса Biped (Add Biped Procedure) и называем ее СказатьПривет.
  4. Теперь мы находимся в редакторе кода. Слева мы видим список всех существующих процедур для класса Biped. Нас интересует процедура say.
  5. После того, как мы перетащим блок say в основное окно редактора кода, мы должны указать значение обязательного параметра процедуры say. Если процедура отвечает на на вопрос  “Что должен сделать объект?”, то параметры говорят нам, как именно он должен это сделать. Например, процедура say указывает на то, что объект должен сказать что-то. Единственный обязательный параметр этой процедуры указывает, что именно должен сказать объект. Кроме того, есть целый набор дополнительных параметров: какой шрифт нужно использовать для отображения текста, какого размера и т.п. Настроим эти параметры.

Итак, теперь все наши двуногие умеют говорить “Привет!”. Однако, если мы сейчас запустим наш проект, то увидим, что никто ничего не говорит. Причина в том, что мы научили наши объекты делать что-то новое  - описали новый метод - но мы не дали команду сделать что-либо, то есть мы не вызвали метод для объекта.

Давайте вызовем процедуру СказатьПривет для объектов Алиса и Джо. Решим, где мы должны разместить эти инструкции. Какой объект отвечает за то, что происходит, когда проект запущен?

Если мы внимательно посмотрим на список классов, экземпляры которых присутствуют в нашем проекте, то увидим, что кроме класса Biped с наследниками Alice, Skeleton и Pixie, тут есть еще класс Scene, который содержит в себе все  объекты, размещенные на сцене. Именно в этом классе описан метод myFirstMethod, который запускается при нажатии на кнопку Run.

Итак, перейдем в myFirstMethod, выберем последовательно объекты Алиса и Анна, и последовательно вызовем для них процедуру СказатьПривет.

Запустим проект и посмотрим на результат:

 

Вот такой небольшой урок позволяет буквально без каких-либо начальных знаний программирования не только создать работоспособный проект, но, что на мой взгляд, гораздо важнее, заложить основы представления об объектах, классах, методах, основных принципах ООП.


Еще про Alice в моей заявке на конкурс #iУчитель "Организация конкурса проектов "Программируем с Alice"

Если вы хотите открыть и посмотреть проект у себя на компьютере, то можете скачать его по этой ссылке >>

Кол-во комментариев: (2)

Борис Ярмахов
А есть ли в Элис какое-то дерево классов, чтобы не запутаться, кто чьим является наследником - и в чем именно?
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии