На Горох
Информатика

20. События

"Информатика (в 2 частях)", Павлов Д.И., Полежаева О.А., Коробкова Л.Н. и др./ Под ред. Горячева А.В.

Объяснение темы В оглавлении: 20. События

Кратко о теме

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

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Событие — действие или изменение, которое происходит во время работы программы и может запустить выполнение команд. Например, программа замечает, что пользователь нажал клавишу. Это понятие нужно, чтобы описать, почему программа начинает действовать именно в определённый момент.

Обработчик события — последовательность команд, выполняемая в ответ на определённое событие. Если событие — нажатие стрелки вправо, обработчик может переместить персонажа. Благодаря обработчику программа не просто замечает событие, а знает, как на него реагировать.

Событие запуска — событие, с которого начинается выполнение соответствующего обработчика. Часто оно возникает, когда пользователь запускает проект. Такой обработчик нужен для начальной настройки объектов или показа приветствия.

Сообщение — сигнал, который одна часть программы посылает другим объектам для запуска связанных обработчиков. Например, кнопка может сообщить персонажам о начале игры. Сообщение помогает передать сигнал между объектами, чтобы их действия были согласованы.

Как это устроено

Программа, управляемая событиями, не обязана сразу выполнять все команды одну за другой. Она ожидает, пока произойдёт событие, потому что заранее неизвестно, когда пользователь нажмёт клавишу или щёлкнет мышью. Когда событие наступает, программа запускает относящиеся к нему команды. Поэтому ожидание позволяет отвечать на действия пользователя в подходящий момент.

Блок запуска связывает конкретное событие с обработчиком: событие находится в начале сценария, а команды реакции размещаются после него. Такая связь нужна, чтобы среда понимала, когда выполнять команды. У одного объекта может быть несколько обработчиков, потому что он способен реагировать на разные события. Например, один сценарий может запускаться при нажатии клавиши, а другой — при получении сообщения.

События могут появляться по разным причинам: пользователь запускает проект, нажимает клавишу или щёлкает по объекту. Отдельный вид события возникает, когда объект получает сообщение от другой части программы. Различение этих причин помогает назначить подходящую реакцию. Например, запуск проекта может включить начальную сцену, а щелчок по кнопке — начать игру.

Сообщения помогают согласовать действия нескольких объектов. Один объект посылает сигнал, а у других объектов заранее подготовлены обработчики его получения. Тогда каждый из них начинает связанные действия после одного и того же сигнала. Это удобно, когда персонажи должны вместе начать движение или одновременно переключиться на новую сцену.

При линейном выполнении команды идут одна за другой в порядке записи. В событийной программе действия запускаются в ответ на события, поэтому расположение сценариев на экране само по себе не задаёт порядок их работы. Это различие появляется из-за того, что событие может произойти в любой момент. Программа реагирует на него соответствующим обработчиком, а команды внутри обработчика выполняются как заданная последовательность.

Виды событий и способы их обработки

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

Вид событияЧто вызывает событиеКакой обработчик запускаетсяПример применения
Запуск проектаНажатие кнопки запуска или команды начала работыОбработчик запуска проектаНачальная настройка сцены и персонажей
Нажатие клавишиНажатие определённой клавиши на клавиатуреОбработчик нажатия этой клавишиУправление движением персонажа
Щелчок по объектуЩелчок мышью по спрайту или объектуОбработчик щелчка по объектуНажатие кнопки интерфейса
Получение сообщенияПосылка сообщения другим объектам программыОбработчик получения сообщенияСогласованное переключение сцен и действий персонажей

Разбор задач

Персонаж говорит после запуска

Условие: после запуска проекта персонаж должен сказать: «Начинаем!». Нужно выбрать событие, которое возникает один раз при старте, и связать с ним команду вывода реплики. Программа не должна ждать нажатия клавиши или щелчка мышью, потому что это не указано в условии.

  1. Выберите объект-персонаж, который должен произнести реплику.
  2. Добавьте блок события запуска проекта. Он будет причиной начала сценария.
  3. Под блоком разместите команду, которая показывает или произносит текст «Начинаем!».
  4. Запустите проект и проверьте, что реплика появляется без дополнительных действий пользователя.

Ответ: обработчик события запуска проекта содержит команду вывода реплики «Начинаем!». Когда проект стартует, событие запуска включает этот обработчик.

Управление стрелками

Условие: при нажатии стрелки вправо персонаж перемещается на 10 шагов, а при нажатии стрелки влево — на 10 шагов в обратную сторону. Здесь нужны две разные реакции, потому что каждая клавиша должна запускать своё действие. Если поместить обе команды в один сценарий запуска, они не будут ждать нажатий клавиш.

  1. Выберите персонажа, которым нужно управлять.
  2. Создайте обработчик события нажатия стрелки вправо и поместите в него перемещение на 10 шагов вправо.
  3. Создайте отдельный обработчик нажатия стрелки влево и задайте перемещение на 10 шагов в обратную сторону.
  4. Запустите проект и нажмите каждую стрелку отдельно, чтобы проверить соответствующую реакцию.

Ответ: нужны два обработчика — для правой и левой стрелок. Каждый реагирует только на свою клавишу и перемещает персонажа в нужную сторону.

Сообщение от кнопки нескольким персонажам

Условие: после щелчка по кнопке один объект должен послать сообщение «Начало игры», а несколько персонажей — одновременно начать свои действия. Значит, щелчок должен запустить отправку сигнала, а не все действия каждого персонажа напрямую. Сообщение позволит передать один сигнал всем нужным объектам.

  1. Добавьте кнопке обработчик щелчка мышью.
  2. Поместите в него команду посылки сообщения с названием «Начало игры».
  3. Для каждого персонажа создайте отдельный обработчик получения сообщения «Начало игры».
  4. В каждый такой обработчик добавьте действие, которое должен начать соответствующий персонаж.
  5. Проверьте, что щелчок запускает сообщение и все персонажи реагируют на него.

Ответ: кнопка посылает сообщение при щелчке, а персонажи запускают свои действия в обработчиках его получения. Поскольку все они реагируют на один сигнал, их действия могут начаться почти одновременно.

Типичные ошибки

Если команды помещают только в общий сценарий, программа может не реагировать на клавиши или щелчки. Так происходит, потому что без обработчика нужное событие не связано с командами; часто ошибочно считают, что программа сама догадается о реакции. Проверьте, есть ли отдельный блок события и находятся ли нужные команды внутри его обработчика.

Событие иногда принимают за команду: например, считают перемещение событием, а нажатие клавиши — действием программы. Путаница возникает потому, что оба понятия описывают происходящее, но событие запускает реакцию, а команда выполняет действие. Проверьте себя вопросом: «Что произошло?» — это событие; «Что сделала программа?» — это команда обработчика.

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

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

Связь с другими темами

Для работы с событиями полезно понимать последовательное выполнение команд: оно показывает, в каком порядке действуют команды внутри обработчика. Условные конструкции помогают выбирать действия в зависимости от проверки, а способы запуска программных блоков объясняют, откуда начинается сценарий. События применяются при создании интерактивных игр, диалогов и кнопок интерфейса. Позже они помогают изучать взаимодействие объектов и параллельное выполнение сценариев.

Что запомнить

  • Событие является причиной запуска заранее подготовленных команд.
  • Обработчик события описывает реакцию программы на это событие.
  • У одного объекта может быть несколько обработчиков для разных событий.
  • Нажатие клавиши, щелчок мышью и запуск проекта могут быть событиями.
  • Сообщение позволяет передать сигнал от одного объекта другим.
  • Без обработчика соответствующего события нужная реакция программы не произойдёт.

Частые вопросы по теме

Чем событие отличается от команды?

Событие — это причина, по которой программа начинает выполнять определённые действия, например нажатие клавиши. Команда — само действие, например перемещение персонажа или вывод текста.

Можно ли назначить одному объекту несколько обработчиков?

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

Почему программа не реагирует на нажатие клавиши?

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

Зачем нужны сообщения между объектами?

Сообщения передают сигнал от одного объекта другим. Получив сигнал, объекты запускают свои обработчики и могут согласованно начать действия.

В каком порядке выполняются обработчики, запущенные одним событием?

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

Спросить по теме параграфа

20. События

Учебник

Оглавление →
Предмет
Информатика
Учебник
"Информатика (в 2 частях)", Павлов Д.И., Полежаева О.А., Коробкова Л.Н. и др./ Под ред. Горячева А.В.