Объектно-ориентированное программирование
Этот модуль посвящен объектно-ориентированному программированию: мы увидим, что управление действиями дронов в игре «Защита пасеки» опирается именно на этот подход к моделированию и программированию. Прежде чем перейти к объектам в программе, рассмотрим третий важнейший элемент машин состояний — действия
Методист образовательных программ «Программирование киберфизических систем»
Анита Ходова
Что такое действие?
Рассмотрим действия дронов в игре, которые указываются в диаграмме машины состояний. Действия дрона являются следствием выполнения команд подсистем дрона. Команды вызываются на входе или выходе из состояний или при возникновении событий. Программист, создающий диаграмму машины состояний, может сам выбрать наиболее соответствующий решаемой задаче, удобный и лаконичный способ описания действий в программе.
В диаграммах состояний чаще всего мы встречаемся с действиями на входе и на выходе из состояния. Действия на входе запускаются, когда машина состояний переходит в данное состояние. Например, в программе по умолчанию в «Защите пасеки» при входе в состояние «Скан» вызывается команда с аргументом «Сканер.ПоискПротивникаПоДистанции (мин)». Действия на выходе срабатывают, когда текущее состояние сменяется другим благодаря произошедшему событию. Действие на входе и выходе может включать последовательное выполнение нескольких команд.
Отметим, что в диаграммах машин состояний вход
и выход
а специальные технические обозначения, позволяющие выполнять действия при переключении состояний.
— это не события,
На диаграмме уже знакомой нам микроволновки с грилем тоже видно выполнение команд при входе и выходе из состояний. Здесь для определения действий на входе и выходе используются текстовые строки «entry/» и «exit/», а команды заданы на языке C. При входе в состояние «нагрев» выполняется выражение «heater_on ();», включающее нагрев, а на выходе из этого состояния нагрев выключается. При входе и выходе из состояния «дверца_открыта» лампа, соответственно, включается и выключается.
Напишите программу, при которой «Автобортник» едет вперед на 5 клеток и по окончании движения зажигает светодиод
Задача
Разбор решения
Диаграмма машины состояний позволяет описывать действия, выполняемые также при возникновении событий. Действия могут быть реакцией на внутренние события, которые описываются внутри состояний, например
Действия по событию также могут включать в себя выполнение последовательности из нескольких команд.
«Навигация.ДвижениеЗавершено»
В рассмотренном примере из игры «Защита пасеки» программа описывает движение дрона вперед. На входе в начальное состояние выполняются три команды: сбрасываются координаты, задается определенная относительная координата (150 единиц вверх) и начинается движение по координатам. Если это движение выполнено, то есть происходит соответствующее внутреннее событие, выполняется действие по событию: дрон зажигает зеленый светодиод. Если же случается столкновение с препятствием, происходит событие на переходе, дрон переходит в состояние «Ехать к базе», согласно которому он возвращаемся домой, а действие по событию уже не произойдет.
В диаграмме машин состояний можно также описывать действия, выполняемые при возникновении внешних событий — на переходах между состояниями. Такие действия изображаются на стрелках переходов после событий и ограждающих условий
Рассмотрим две программы «Степлера» в «Защите пасеки». В первой программе (а) «Степлер» включает красный светодиод при входе в состояние «Бой» и выключает его на выходе. Во второй программе (б) те же самые действия были размещены на переходах: cветодиод будет включаться, когда получена цель, и выключаться, когда цель потеряна или уничтожена.
Задача на траекторию движения дрона
Создайте программу, при которой «Автобортник» осуществляет движение по прямоугольнику
Задача
Теперь вернемся к описанию объектов в игре «Защита пасеки». В игре воссоздается виртуальная среда, в которой действуют объекты — автономные системы или дроны. Можно представить себе дрон как сложное инженерное устройство, которое будет состоять из подсистем. Например, подсистема управления вооружением или подсистема навигации
Программист
Софья Дрёмова
Эту декомпозицию можно продолжить, ведь сами подсистемы тоже могут состоять из каких-то объектов — приборов. Например, подсистема, которая отвечает за ориентировку в пространстве и движение дрона, может быть устроена как на рисунке:
Для того чтобы дрон мог ориентироваться в пространстве и совершать целенаправленные перемещения, ему понадобится целый набор устройств:
  • Акселерометр, позволяющий сохранять траекторию движения
  • Датчик столкновений, который подает сигнал о сближении с препятствием
  • Двигатель и гусеницы, которые дают возможность менять направление движения
  • И другие
Дроны-объекты и их подсистемы связаны с программой управления. Программа включает вызовы команд соответствующих подсистем дрона, представленных в программе как объекты-модули.
Рассмотрим модуль «Навигация» дронов в «Защите пасеки». Этот модуль может инициировать события. Например, когда движение дрона завершено или произошла его встреча с препятствием. Также модуль содержит команды, связанные со сбросом или установкой координат, запуском движения с определенной целью или остановку движения. Кроме того, модуль «Навигация» можно охарактеризовать набором параметров, часть из которых доступна в программе (например, последняя пройденная дистанция или скорость дрона), а часть недоступна программисту непосредственно, но является внутренним параметром или константами данного дрона (например, его габариты, которые нужно учитывать при создании программ движения).
Примером использования модуля «Навигация» будет программа, в которой «Автобортник» едет вперед на заданное число клеток (например, в самом начале волны), или более сложные тактические программы, в которых «Автобортник» должен совершить движение по специальной траектории, привлекая внимание дронов противника.
Рассмотренный нами подход к моделированию и программированию систем, состоящих из объектов и их взаимодействий, называется объектно-ориентированным программированием. В игре «Защита пасеки» программирование дронов с использованием машин состояний опирается на этот способ представления виртуального мира игры и управления системой дронов.
Задача на самостоятельное решение
Модифицируйте программу так, чтобы, если здоровье юнита менее 50%, он возвращался на базу, чинил себя, а после возвращался в бой
Задача
Комментарий для педагога
Этот модуль является одним из самых сложных в курсе, поскольку предполагает работу с моделированием. В модуле 4 мы уже рассматривали самый простой способ моделирования при программировании — именование переменных (нашем случае — состояний) в диаграмме машины состояний. За именем состояния скрывается представление программиста о том, что должен совершать дрон при нахождении в этом состоянии. Смена состояний в машине состояний — это модель управления системой, то, как программист представляет себе изменение работы системы во времени.
При этом одной диаграммы машины состояний недостаточно. У программиста должно быть представление об управляемой системе (в нашем случае — системе дронов) и том виртуальном мире, в котором он действует. Для этого требуется другая модель — модель устройства мира, с которым работает программист, или его онтологические представления
На примере игры «Защита пасеки» можно увидеть объектно-ориентированный подход к моделированию и программированию мира игры. Объектно-ориентированная модель мира дана игроку в готовом виде и представляет собой иерархию объектов и их отношений. Объекты обладают свойствами и взаимодействуют друг с другом. В рамках этого подхода в мире игры выделяются как отдельные взаимодействующие дроны-объекты, так и их подсистемы-объекты, называемые модулями. Управление дроном-объектом осуществляется через выполнение команд в его дочерних модулях-объектах, реакции на события модулей-объектов, изменение переменных модулей-объектов.
(«Починка» и «Форсаж»).
(«Оружие» и «ОружиеМассовое»)
специальных способностей дронов
или модули
Эти группы модулей можно было бы объединить в более общие категории. В объектно-ориентированном программировании это называется наследованием.
Методист образовательных программ «Программирование киберфизических систем»
Анита Ходова
Важной частью объектно-ориентированного программирования является иерархия, благодаря которой можно выделять обобщенные категории, объединять схожие типы объектов. Если внимательно изучить набор доступных команд и событий модулей дрона, можно увидеть, насколько схожи модули оружия
Для того чтобы выявить используемый метод моделирования, очень важны схемы, которые учащиеся рисуют самостоятельно. Мы рекомендуем не использовать готовые схемы, рассмотренные нами выше, а дать задание учащимся: изобразить устройство дрона, обозначить представленные в программах модули (не только «Навигация», но и другие) и т. п. Это позволит увидеть и обсудить объектно-ориентированное программирование как метод, как один из подходов к представлению реальности в программе, а также применимость этого метода и его ограничения.

Запишитесь на курс, чтобы выполнять задания и получить сертификат!

Программирование автономных систем на примере игры «Берлога: Защита пасеки»
Курс о том, как с помощью простых инструментов научиться программировать поведение автономных агентов. Вы увидите, как игровые дроны подчиняются коду и как эти же принципы применимы к роботам в реальной жизни.
  • Что вы получите
    • 12 уроков с разбором заданий прямо в игре
    • Авторская подача: сложное программирование простым языком
    • Возможность осмыслить педагогические методики, применяемые в каждой теме
    • Свободное расписание: нет дедлайнов и сроков сдачи заданий
    • Все материалы доступны сразу, можно начать обучение в удобное время
    • Проверочные задания после каждого урока
    • Профессиональное видео и современная графика
    • Быстрая связь с техподдержкой
    • Сертификат о прохождении курса
  • Зачем
    • Научиться и научить программировать через игру
    • Освоить язык ПРИМС — инструмент для создания умных и понятных алгоритмов
    • Разобраться, как работают современные киберфизические системы
    • Научиться строить управление: от простых реакций до сложных сценариев поведения
    • Получить готовую методику проведения занятий: с пояснениями, примерами и игровыми задачами
    • Сделать первый шаг к проектной работе с настоящими роботами и автономными системами
Находясь на сайте, вы даете согласие на обработку файлов cookie. Это необходимо для более стабильной работы сайта
OK