"Информатика (в 2 частях)", Павлов Д.И., Полежаева О.А., Коробкова Л.Н. и др./ Под ред. Горячева А.В.
Событие — это действие или изменение, которое может запустить команды программы: например, запуск проекта, нажатие клавиши или щелчок мышью. Для реакции на событие создают обработчик — набор команд, который выполняется именно тогда, когда событие происходит. События позволяют управлять персонажами, кнопками и другими объектами, а сообщения помогают согласовать их действия. Поэтому порядок работы программы зависит не только от расположения команд, но и от того, какие события наступят.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Событие — действие или изменение, которое происходит во время работы программы и может запустить выполнение команд. Например, программа замечает, что пользователь нажал клавишу. Это понятие нужно, чтобы описать, почему программа начинает действовать именно в определённый момент.
Обработчик события — последовательность команд, выполняемая в ответ на определённое событие. Если событие — нажатие стрелки вправо, обработчик может переместить персонажа. Благодаря обработчику программа не просто замечает событие, а знает, как на него реагировать.
Событие запуска — событие, с которого начинается выполнение соответствующего обработчика. Часто оно возникает, когда пользователь запускает проект. Такой обработчик нужен для начальной настройки объектов или показа приветствия.
Сообщение — сигнал, который одна часть программы посылает другим объектам для запуска связанных обработчиков. Например, кнопка может сообщить персонажам о начале игры. Сообщение помогает передать сигнал между объектами, чтобы их действия были согласованы.
Программа, управляемая событиями, не обязана сразу выполнять все команды одну за другой. Она ожидает, пока произойдёт событие, потому что заранее неизвестно, когда пользователь нажмёт клавишу или щёлкнет мышью. Когда событие наступает, программа запускает относящиеся к нему команды. Поэтому ожидание позволяет отвечать на действия пользователя в подходящий момент.
Блок запуска связывает конкретное событие с обработчиком: событие находится в начале сценария, а команды реакции размещаются после него. Такая связь нужна, чтобы среда понимала, когда выполнять команды. У одного объекта может быть несколько обработчиков, потому что он способен реагировать на разные события. Например, один сценарий может запускаться при нажатии клавиши, а другой — при получении сообщения.
События могут появляться по разным причинам: пользователь запускает проект, нажимает клавишу или щёлкает по объекту. Отдельный вид события возникает, когда объект получает сообщение от другой части программы. Различение этих причин помогает назначить подходящую реакцию. Например, запуск проекта может включить начальную сцену, а щелчок по кнопке — начать игру.
Сообщения помогают согласовать действия нескольких объектов. Один объект посылает сигнал, а у других объектов заранее подготовлены обработчики его получения. Тогда каждый из них начинает связанные действия после одного и того же сигнала. Это удобно, когда персонажи должны вместе начать движение или одновременно переключиться на новую сцену.
При линейном выполнении команды идут одна за другой в порядке записи. В событийной программе действия запускаются в ответ на события, поэтому расположение сценариев на экране само по себе не задаёт порядок их работы. Это различие появляется из-за того, что событие может произойти в любой момент. Программа реагирует на него соответствующим обработчиком, а команды внутри обработчика выполняются как заданная последовательность.
В таблице сопоставлены причины событий, запускаемые обработчики и примеры применения. По ней можно определить, какой обработчик понадобится для нужной реакции. При составлении программы сначала выберите событие, а затем укажите команды для его обработки.
| Вид события | Что вызывает событие | Какой обработчик запускается | Пример применения |
|---|---|---|---|
| Запуск проекта | Нажатие кнопки запуска или команды начала работы | Обработчик запуска проекта | Начальная настройка сцены и персонажей |
| Нажатие клавиши | Нажатие определённой клавиши на клавиатуре | Обработчик нажатия этой клавиши | Управление движением персонажа |
| Щелчок по объекту | Щелчок мышью по спрайту или объекту | Обработчик щелчка по объекту | Нажатие кнопки интерфейса |
| Получение сообщения | Посылка сообщения другим объектам программы | Обработчик получения сообщения | Согласованное переключение сцен и действий персонажей |
Условие: после запуска проекта персонаж должен сказать: «Начинаем!». Нужно выбрать событие, которое возникает один раз при старте, и связать с ним команду вывода реплики. Программа не должна ждать нажатия клавиши или щелчка мышью, потому что это не указано в условии.
Ответ: обработчик события запуска проекта содержит команду вывода реплики «Начинаем!». Когда проект стартует, событие запуска включает этот обработчик.
Условие: при нажатии стрелки вправо персонаж перемещается на 10 шагов, а при нажатии стрелки влево — на 10 шагов в обратную сторону. Здесь нужны две разные реакции, потому что каждая клавиша должна запускать своё действие. Если поместить обе команды в один сценарий запуска, они не будут ждать нажатий клавиш.
Ответ: нужны два обработчика — для правой и левой стрелок. Каждый реагирует только на свою клавишу и перемещает персонажа в нужную сторону.
Условие: после щелчка по кнопке один объект должен послать сообщение «Начало игры», а несколько персонажей — одновременно начать свои действия. Значит, щелчок должен запустить отправку сигнала, а не все действия каждого персонажа напрямую. Сообщение позволит передать один сигнал всем нужным объектам.
Ответ: кнопка посылает сообщение при щелчке, а персонажи запускают свои действия в обработчиках его получения. Поскольку все они реагируют на один сигнал, их действия могут начаться почти одновременно.
Если команды помещают только в общий сценарий, программа может не реагировать на клавиши или щелчки. Так происходит, потому что без обработчика нужное событие не связано с командами; часто ошибочно считают, что программа сама догадается о реакции. Проверьте, есть ли отдельный блок события и находятся ли нужные команды внутри его обработчика.
Событие иногда принимают за команду: например, считают перемещение событием, а нажатие клавиши — действием программы. Путаница возникает потому, что оба понятия описывают происходящее, но событие запускает реакцию, а команда выполняет действие. Проверьте себя вопросом: «Что произошло?» — это событие; «Что сделала программа?» — это команда обработчика.
Отправка сообщения без обработчика получения не вызывает видимой реакции объекта. Можно ошибочно решить, что одного сигнала достаточно, но объекту ещё нужно указать, что делать при его получении. Проверьте, совпадает ли название сообщения в отправляющей команде и в обработчиках нужных объектов.
Если смешать обработчики разных событий, можно ожидать, что команды будут выполняться просто по порядку их расположения. Такая ошибка возникает при переносе привычки от линейной программы, хотя каждый обработчик запускается только своим событием. Проверьте, к какому блоку запуска относятся команды и какое событие должно их включить.
Для работы с событиями полезно понимать последовательное выполнение команд: оно показывает, в каком порядке действуют команды внутри обработчика. Условные конструкции помогают выбирать действия в зависимости от проверки, а способы запуска программных блоков объясняют, откуда начинается сценарий. События применяются при создании интерактивных игр, диалогов и кнопок интерфейса. Позже они помогают изучать взаимодействие объектов и параллельное выполнение сценариев.
Чем событие отличается от команды?
Событие — это причина, по которой программа начинает выполнять определённые действия, например нажатие клавиши. Команда — само действие, например перемещение персонажа или вывод текста.
Можно ли назначить одному объекту несколько обработчиков?
Да, у одного объекта могут быть отдельные обработчики для запуска проекта, нажатия клавиш и получения сообщений. Каждый из них срабатывает только при соответствующем событии.
Почему программа не реагирует на нажатие клавиши?
Возможно, для этой клавиши не создан обработчик или команды помещены в другой обработчик. Проверьте, что событие выбрано правильно и нужные действия находятся внутри его блока.
Зачем нужны сообщения между объектами?
Сообщения передают сигнал от одного объекта другим. Получив сигнал, объекты запускают свои обработчики и могут согласованно начать действия.
В каком порядке выполняются обработчики, запущенные одним событием?
Порядок определяется настройками среды программирования и устройством обработчиков, а не просто расположением их блоков на экране. Если несколько объектов получают одно сообщение, их действия могут начаться почти одновременно.
20. События