Введение

Парадигма компьютерного программирования
В компьютерном программировании, событийное программирование — это парадигма программирования, в которой ход выполнения программы определяется внешними событиями. Типичными событиями могут быть события пользовательского интерфейса от мыши, клавиатуры, тачпада и сенсорных экранов, или входные данные с внешних датчиков, или события, генерируемые программно (передача сообщений) из других программ или потоков, или сетевые события. Событийное программирование является доминирующей парадигмой, используемой в приложениях с графическим пользовательским интерфейсом и сетевых серверах. В событийном приложении обычно присутствует цикл обработки событий, который отслеживает события и затем вызывает функцию обратного вызова при обнаружении одного из этих событий. Событийные программы могут быть написаны на любом языке программирования, хотя задача упрощается в языках, предоставляющих высокоуровневые абстракции. Обработка прерываний и обработка исключений имеют много общего, хотя они и не полностью соответствуют событийной модели.

Круг событий

Поскольку цикл обработки и распределения событий является общим для приложений, многие программные фреймворки берут на себя реализацию этого цикла и ожидают от пользователя предоставления только кода для обработчиков событий. RPG, один из ранних языков программирования от IBM, концепция разработки которого в 1960-х годах была схожа с вышеописанным событийно-ориентированным программированием, предоставлял встроенный основной цикл ввода-вывода (известный как "цикл программы"), в котором вычисления реагировали на "индикаторы" (флаги), установленные ранее в этом цикле.

Управляющие событиями

Фактическая логика содержится в подпрограммах обработки событий. Эти подпрограммы обрабатывают события, на которые будет реагировать основная программа. Например, одиночный щелчок левой кнопкой мыши по кнопке в программе с графическим интерфейсом может запустить подпрограмму, которая откроет другое окно, сохранит данные в базу данных или завершит работу приложения. Многие IDE предоставляют программистам шаблоны событий графического интерфейса, позволяя программистам сосредоточиться на написании кода обработки событий. В то время как отслеживание истории обычно является тривиальной задачей в последовательной программе, поскольку обработчики событий выполняются в ответ на внешние события, правильная организация этих обработчиков для корректной работы при вызове в любом порядке может потребовать особого внимания и планирования в событийно-ориентированной программе. Помимо написания обработчиков событий, необходимо также связать их с соответствующими событиями, чтобы при возникновении события вызывалась нужная функция. Для событий пользовательского интерфейса многие IDE объединяют эти два шага: двойной щелчок по кнопке приводит к тому, что редактор создает (пустой) обработчик событий, связанный с нажатием кнопки пользователем, и открывает текстовое окно для редактирования этого обработчика.

Общее применение

Большинство существующих архитектур графических интерфейсов используют событийное программирование. В Windows есть цикл обработки событий. Фреймворк Java AWT обрабатывает все изменения пользовательского интерфейса в одной нити, называемой нитью диспетчеризации событий. Аналогично, все обновления пользовательского интерфейса в JavaFX происходят в нити JavaFX Application Thread. Большинство сетевых серверов и фреймворков, таких как Node.js, также построены на основе событийного подхода.