Какова связь между "управляемым событиями" и "объектно-ориентированным" программированием?

В наши дни я почти везде слышу о программировании на основе событий.

Википедия говорит:

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

Разве это не наш старый друг ООП? И если это не ООП, в чем разница?

5 ответов

  1. Объектно-ориентированное программирование (ООП) и программирование на основе событий (EDP) являются ортогональными, что означает, что они могут использоваться вместе.

  2. В ООП с EDP все принципы ООП (инкапсуляция, наследование и полиморфизм) остаются неизменными.

  3. В ООП с EDP объекты приобретают некоторый механизм публикации уведомлений о событиях и подписки на уведомления о событиях от других объектов.

  4. Разница между ООП с / без EDP заключается в потоке управления между объектами.

    • В ООП без EDP управление перемещается от одного объекта к другому по вызову метода. Объект в основном вызывает методы других объектов.

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

  5. Вывод: OOP+EDP - это "точно наш старый друг ООП" с инвертированным потоком управления благодаря Event-Driven Design.

Объектно-ориентированное программирование определяется путем объединения данных и действий в модель объекта реального мира. Программирование на основе событий - это стиль программирования, в котором у нас есть сервер, будь то порт связи или пользовательский интерфейс, ожидающий команду ввода. Затем он обработает эту команду и отобразит / выдаст желаемые результаты.

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

Алгоритм последовательной (не управляемой событиями) программы подобен рецепту: начните с начала, проработайте до конца, затем остановитесь.

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

Объектно-ориентированный принцип кажется более применимым к модели, управляемой событиями, потому что каждый из "элементов управления" в основном не связан с другими (разделение интересов), и порядок событий в основном не важен, как совпадение во времени: вы можете включите дворники, выключите дефростер, управляйте и ускоряйте все одновременно, и действия не влияют друг на друга. Это также возможно в некоторых случаях с рецептом, но это зависит от шеф-повара (компилятор / оптимизатор / процессор), чтобы вывести его.

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

Мой удар в это. Вот три метафоры:

Программирование событий похоже на работу аппаратных шин: шина используется для периферийных устройств, чтобы общаться друг с другом. Аналогично, вышка сотовой связи - это шина сообщений, по которой сотовые телефоны общаются друг с другом. Также рассмотрим старую добрую модель топологии Star Network ( https://en.wikipedia.org/wiki/Star_network). Черт, посмотрите, как домашний маршрутизатор соединяет компьютеры и устройства IoT с домашней сетью.

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

ASIDE: извлеченные уроки

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

  • Объектно-ориентированное программирование (ООП) и программирование, управляемое событиями (EDP), ортогональны, что означает, что их можно использовать вместе.
  • В ООП с EDP все принципы ООП (инкапсуляция, наследование и полиморфизм) остаются неизменными.
  • В ООП с EDP объекты приобретают некоторый механизм публикации уведомлений о событиях и подписки на уведомления о событиях от других объектов.
  • Разница между ООП с / без EDP заключается в потоке управления между объектами.

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

Заключение: ООП + EDP - это «в точности наш старый друг ООП» с инвертированным потоком управления благодаря Event-Driven Design.

Другие вопросы по тегам