Событийно-ориентированное программирование

Парадигма компьютерного программирования

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

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

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

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

Хотя они не совсем соответствуют событийно-управляемой модели, обработка прерываний и обработка исключений имеют много общего.

Важно различать парадигмы, управляемые событиями и управляемые сообщениями (т. е. управляемые очередями) : сервисы, управляемые событиями (например, AWS SNS ), отделены от своих потребителей. В то время как сервисы, управляемые очередями/сообщениями (например, AWS SQS ), связаны со своими потребителями. [1]

Цикл событий

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

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

Обработчики событий

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

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

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

Распространенное использование

Большинство существующих архитектур GUI используют событийно-управляемое программирование. [2] Windows имеет цикл событий . Фреймворк Java AWT обрабатывает все изменения пользовательского интерфейса в одном потоке, называемом потоком диспетчеризации событий . Аналогично, все обновления пользовательского интерфейса в фреймворке JavaFX происходят в потоке приложения JavaFX. [3]

Большинство сетевых серверов и фреймворков, таких как Node.js, также управляются событиями. [4]

Обработка прерываний и исключений

Смотрите также

Ссылки

  1. ^ Чандрасекаран, Премананд; Кришнан, Картик; Форд, Нил; Байарс, Брэндон; Буйзе, Аллард (2022). Проектирование на основе предметной области с использованием Java — руководство для практиков . Packt Publishing. ISBN 9781800564763.
  2. ^ Самек, Миро (1 апреля 2013 г.). «Кто переместил мой штат?». Dr. Dobb's . Получено 28.01.2018 .
  3. ^ Федорцова, Ирина (июнь 2012 г.). "Параллелизм в JavaFX". Домашняя страница документации JavaFX . Oracle . Получено 4 января 2018 г. Граф сцены JavaFX, представляющий графический пользовательский интерфейс приложения JavaFX, не является потокобезопасным и может быть доступен и изменен только из потока пользовательского интерфейса, также известного как поток приложения JavaFX.
  4. ^ Событийно-ориентированное программирование в Node.js.
  • Презентация шаблонов параллелизма на scaleconf
  • Событийно-ориентированное программирование: введение, руководство, история, руководство Стивена Ферга
  • Событийно-ориентированное программирование, учебник Алана Голда
  • Event Collaboration, статья Мартина Фаулера
  • Переосмысление Swing Threading, статья Джонатана Саймона
  • Стиль программирования, управляемый событиями. Архивировано 20.02.2005 в Wayback Machine , статья Криса Макдональда.
  • Событийно-управляемое программирование с использованием специализации шаблонов, статья Кристофера Диггинса
  • Шиффер, С.; Фролих, Дж. Х. (1994). «Концепции и архитектура Vista — многопарадигмальной среды программирования». Труды симпозиума IEEE 1994 года по визуальным языкам . С. 40–47. doi :10.1109/VL.1994.363642. ISBN 0-8186-6660-9. S2CID  15927869.
  • Событийно-ориентированное программирование и агенты, глава
  • Ресурсы LabWindows/CVI
  • Распределенная система событий публикации/подписки, пример с открытым исходным кодом, находящийся в разработке на MSN.com и Microsoft.com
  • Цикл событий Javascript

Смотрите также

Взято с "https://en.wikipedia.org/w/index.php?title=Программирование_на_событиях&oldid=1239564862"