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