Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В компьютерном программировании программирование , управляемое событиями, представляет собой парадигму программирования, в которой поток программы определяется такими событиями , как действия пользователя ( щелчки мыши, нажатия клавиш), выходы датчиков или передача сообщений из других программ или потоков . Программирование, управляемое событиями, является доминирующей парадигмой, используемой в графических пользовательских интерфейсах и других приложениях (например, веб-приложениях JavaScript ), которые сосредоточены на выполнении определенных действий в ответ на ввод пользователя . Это также верно для программирования драйверов устройств (например,P в стеке драйверов USB-устройств [1] ).

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

Обработчики событий [ править ]

Тривиальный обработчик событий [ править ]

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

глобально объявить счетчик K и целое число T.OnKeyEnter (символ C){ преобразовать C в число N если K равно нулю, сохраните N в T и увеличьте K в противном случае добавьте N к T, распечатайте результат и сбросьте K до нуля}

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

Создание обработчиков событий [ править ]

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

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

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

Обработчики исключений в PL / I [ править ]

В PL / I , даже если сама программа не может быть преимущественно управляемой событиями, могут происходить определенные аномальные события, такие как аппаратная ошибка, переполнение или «проверки программы», которые могут препятствовать дальнейшей обработке. Обработчики исключений могут быть предоставлены «ON заявления» в (невидимых) вызывающих абонентах , чтобы обеспечить очистки процедуры , чтобы очистить потом до прекращения или выполнение операций восстановления и возвращения к прерванной процедуре.

Обычное использование [ править ]

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

Кроме того, такие системы, как Node.js, также управляются событиями. [4]

Критика [ править ]

Дизайн тех программ, которые полагаются на модель «событие-действие», подвергся критике, и было высказано предположение, что модель «событие-действие» побуждает программистов создавать подверженный ошибкам, трудно расширяемый и чрезмерно сложный код приложения. [2] Конечные автоматы с табличным управлением были рекомендованы как жизнеспособная альтернатива. [5] С другой стороны, конечные автоматы, управляемые таблицами, сами по себе страдают от существенных недостатков, включая явление взрыва состояний . [6] Решением для этого является использование сетей Петри .

Бесстековая резьба [ править ]

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

См. Также [ править ]

  • Автономная периферийная работа
  • Сравнение парадигм программирования
  • Программирование потока данных (похожая концепция)
  • События DOM
  • Архитектура, управляемая событиями
  • Обработка потока событий (аналогичная концепция)
  • Язык описания оборудования
  • Прерывать
  • Инверсия контроля
  • По промежуточного слоя, ориентированного на сообщения
  • Парадигма программирования
  • Шаблон публикации – подписки
  • Схема реактора
  • Сигнальное программирование (аналогичная концепция)
  • Поэтапная событийная архитектура (SEDA)
  • Система с синхронизацией по времени (альтернативная архитектура для компьютерных систем)
  • Виртуальная синхронность , распределенная модель выполнения для программирования, управляемого событиями

Ссылки [ править ]

  1. Вивек Гупта, Итан Джексон, Шаз Кадир и Шрирам Раджамани (ноябрь 2012 г.). «P: Безопасное асинхронное программирование, управляемое событиями» . Microsoft Research . Проверено 20 февраля 2017 года .CS1 maint: использует параметр авторов ( ссылка )
  2. ^ a b Самек, Миро (1 апреля 2013 г.). "Кто изменил мое состояние?" . Доктора Добба . Проверено 28 января 2018 .
  3. Федорцова, Ирина (июнь 2012 г.). «Параллелизм в JavaFX» . Домашняя страница документации JavaFX . Oracle . Проверено 4 января 2018 . Граф сцены JavaFX, представляющий графический пользовательский интерфейс приложения JavaFX, не является потокобезопасным и может быть доступен и изменен только из потока пользовательского интерфейса, также известного как поток приложения JavaFX.
  4. ^ Event-Driven Программирование в Node.js .
  5. ^ Самек, Miro (11 марта 2009). "Государственные машины для событийно-управляемых систем" . Проверено 19 марта 2013 года .
  6. ^ Патрик Schaumont (2012-11-27). Практическое введение в разработку программного и аппаратного обеспечения . ISBN 978-1-4614-3737-6.

Внешние ссылки [ править ]

  • Презентация шаблонов параллелизма на scaleconf
  • Программирование, управляемое событиями: Введение, Учебное пособие, История , Учебное пособие Стивена Ферга
  • Программирование , управляемое событиями , учебник Алана Голда
  • Сотрудничество при проведении мероприятий , статья Мартина Фаулера
  • Rethinking Swing Threading , статья Джонатана Саймона
  • Стиль программирования, управляемый событиями. Архивировано 20 февраля 2005 г. в Wayback Machine , статья Криса Макдональда.
  • Событийное программирование с использованием специализации шаблонов , статья Кристофера Диггинса
  • Schiffer, S .; Frohlich, JH (1994). «Концепции и архитектура Vista-многопарадигмальной среды программирования». Материалы симпозиума IEEE 1994 г. по визуальным языкам . С. 40–47. DOI : 10.1109 / VL.1994.363642 . ISBN 0-8186-6660-9.
  • Событийно-ориентированное программирование и агенты , глава
  • Ресурсы LabWindows / CVI
  • Распределенная система событий публикации / подписки , пример с открытым исходным кодом, который находится в разработке на MSN.com и Microsoft.com
  • Цикл событий Javascript