Подійно-орієнтоване програмування (англ. event-driven programming; надалі ПОП) — парадигма програмування, в якій виконання програми визначається подіями — діями користувача (клавіатура, миша), повідомленнями інших програм і потоків, подіями операційної системи (наприклад, надходженням мережевого пакета).
ПОП можна також визначити як спосіб побудови комп'ютерної програми, при якому в коді (як правило, в головний функції програми) явним чином виділяється головний цикл програми, тіло якого складається з двох частин: отримання повідомлення про (подію) і обробки події.
Як правило, в реальних завданнях виявляється неприпустимим тривале виконання обробника події, оскільки при цьому програма не може реагувати на інші події. У зв'язку з цим при написанні подійно-орієнтованих програм часто застосовують автоматне програмування.
Сфера застосування
Подійно-орієнтоване програмування, зазвичай застосовують в трьох випадках:
Застосування в серверних програмах
Подійно-орієнтоване програмування застосовується в серверних програмах для вирішення проблеми масштабування на 10000 одночасних з'єднань і більше.
У серверах, побудованих за моделлю «один потік на з'єднання», проблеми з масштабованістю виникають з наступних причин:
- Занадто великі накладні витрати на структури даних операційної системи, необхідні для опису однієї задачі (сегмент стану завдання, стек);
- Занадто великі накладні витрати на перемикання контекстів.
Філософською передумовою для відмови від потокової моделі серверів може служити вислів Алана Кокса: «Комп'ютер - це кінцевий автомат. Потокове програмування потрібно тим, хто не вміє програмувати кінцеві автомати ».
Серверний застосунок при подійно-орієнтованому програмуванні реалізується на системному виклику, який отримує повідомлення події одночасно від багатьох (мультиплексування). При обробці подій використовуються виключно неблокуючі операції введення-виведення, щоб ні один дескриптор не перешкоджав обробці подій від інших дескрипторів.
Мультиплексування
Для мультиплексування сполук можуть бути використані наступні засоби операційної системи:
- Select (більшість UNIX систем). Погано масштабується, через те, що список дескрипторів представлений у вигляді бітової карти;
- і (Linux);
- (FreeBSD);
- ( Solaris);
- (Windows);
- на поточний момент тільки для операцій дискового введення-виведення;
- і для операцій дискового введення-виведення.
Приклади реалізацій
Застосування в настільних програмах
У сучасних мовах програмування події та обробники подій є центральною ланкою реалізації графічного інтерфейсу користувача. Розглянемо, наприклад, взаємодію програми з подіями від миші. Натискання правої клавіші миші викликає системне переривання, що запускає певну процедуру всередині операційної системи. У цій процедурі відбувається пошук вікна, що знаходиться під курсором миші. Якщо вікно знайдено, то дана подія надсилається в чергу обробки повідомлень цього вікна. Далі, в залежності від типу вікна, можуть генеруватися додаткові події. Наприклад, якщо вікно є кнопкою (у Windows всі графічні елементи є вікнами), то додатково генерується подія натискання на кнопку. Відмінність останньої події в тому, що вона більш абстрактна, а саме, не містить координат курсору, а говорить просто про те, що було вироблено натискання на цю кнопку.
Обробник події може виглядати наступним чином (на прикладі C #):
private void button1_Click (object sender, EventArgs e) { MessageBox.Show ("Була натиснута кнопка"); }
Тут обробник події є процедурою, в яку передається параметр sender, як правило містить покажчик на джерело події. Це дає змогу використовувати одну й ту ж процедуру для обробки подій від декількох кнопок, розрізняючи їх за цим параметром.
Мови програмування
У мові C# події реалізовані як елемент мови і є членами класів. Механізм подій тут реалізує шаблон проектування Publisher / Subscriber. Приклад оголошення події:
public class MyClass { public event EventHandler MyEvent; }
ТутEventHandler- , що визначає тип процедури обробника подій. Підписка на подію проводиться таким чином:
myClass.MyEvent + = new EventHandler (Handler);
ТутmyClass- екземпляр класуMyClass,Handler- процедура-обробник. Подія може мати необмежену кількість обробників. При додаванні обробника події він додається до спеціального стек, а при виникненні події викликаються всі обробники за їх порядку в стеці. Відписка від події, тобто видалення обробника виконується аналогічно, але з використанням оператора «-=».
Різні мови програмування підтримують ПОП в різному ступені. Найповнішу підтримку подій мають наступні мови (неповний список):
Інші мови, в більшості з них, підтримують події як обробку виключних ситуацій.
Інструменти і бібліотеки
- з «Azuki framework»
- Cocoa & Objective-C, рефлексивна об'єктно-орієнтована мова програмування, який додає повідомлення в стилі Smalltalk в мову Сі.
- GLib
- , подійно-орієнтована мова програмування для Windows
- event loop management library [ 9 квітня 2020 у Wayback Machine.]
- POCO
- , частина бібліотек і , ефективна подійна бібліотека для
- PRADO, компонентний подійно-орієнтований інструмент для Web-програмування на PHP 5
- Tcl
- , Python
- The Qt Toolkit, a cross-platform for C + + based on an event-driven model. A version called Qt / Console exists which omits the GUI features, but still includes the event-handling framework and some other features like cross-platform networking, threading, and XML libraries.
- QP - родина відкритих подійно-орієнтованих середовищ для вбудованих систем реального часу
[1] [ 8 липня 2008 у Wayback Machine.]
- Simple Unix Events aka SUE [ 29 березня 2010 у Wayback Machine.], проста об'єктно-орієнтована бібліотека для побудови подійно-орієнтованих програм під Unix на мові .
Див. також
- Автоматне програмування
- Callback (програмування)
- Подійно-орієнтована архітектура (EDA)
- Багатоетапна подійно-орієнтована архітектура (SEDA)
Джерела
- опис [ 7 вересня 2011 у Wayback Machine.] з Portland Pattern Repository [ 22 лютого 2011 у Wayback Machine.]
- Event-Driven Programming: Introduction, Tutorial, History [ 19 лютого 2006 у Wayback Machine.] - навчальний посібник Стефана Фергі (Stephen Ferg)
- навчальний посібник Алана Голда (Alan Gauld)
- Martin Fowler. Event Collaboration [ 2 вересня 2006 у Wayback Machine.]
- Ben Watson. Transitioning from Structured to Event-Driven Programming [ 18 січня 2010 у Wayback Machine.]
- Chris McDonald. The event driven programming style [ 20 лютого 2005 у Wayback Machine.]
- Event-Driven Programming and Agents [ 10 вересня 2011 у Wayback Machine.]
- LabWindows / CVI Resources
- Comment [ 18 грудня 2007 у Wayback Machine.] by
- Complex Event Processing and Service Oriented Architecture [ 30 жовтня 2012 у Wayback Machine.]
- Event-driven programming and SOA: Jack van Hoof. How EDA extends SOA and why it is important;; [ 8 березня 2021 у Wayback Machine.]
- Приклад з відкритим кодом: Distributed Publish / Subscribe Event System [ 21 червня 2008 у Wayback Machine.]
- Подійно-орієнтоване програмування на мові Java: [https: / / jsasb.dev.java.net / Rex Youung. Jsasb]
- Непейвода Н.Н. Событийное программирование. Стили и методы программирования [ 28 січня 2012 у Wayback Machine.]
- Зыков С.В. Введение в теорию программирования. Объектно-ориентированный подход [ 13 квітня 2011 у Wayback Machine.]
Посилання
- . Архів оригіналу за 8 лютого 2008. Процитовано 6 квітня 2011.
- . Архів оригіналу за 29 березня 2010. Процитовано 6 квітня 2011.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title ()
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Ця стаття потребує додаткових для поліпшення її . (листопад 2017) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Podijno oriyentovane programuvannya angl event driven programming nadali POP paradigma programuvannya v yakij vikonannya programi viznachayetsya podiyami diyami koristuvacha klaviatura misha povidomlennyami inshih program i potokiv podiyami operacijnoyi sistemi napriklad nadhodzhennyam merezhevogo paketa POP mozhna takozh viznachiti yak sposib pobudovi komp yuternoyi programi pri yakomu v kodi yak pravilo v golovnij funkciyi programi yavnim chinom vidilyayetsya golovnij cikl programi tilo yakogo skladayetsya z dvoh chastin otrimannya povidomlennya pro podiyu i obrobki podiyi Yak pravilo v realnih zavdannyah viyavlyayetsya nepripustimim trivale vikonannya obrobnika podiyi oskilki pri comu programa ne mozhe reaguvati na inshi podiyi U zv yazku z cim pri napisanni podijno oriyentovanih program chasto zastosovuyut avtomatne programuvannya Sfera zastosuvannyaPodijno oriyentovane programuvannya zazvichaj zastosovuyut v troh vipadkah Pri pobudovi koristuvackih interfejsiv v tomu chisli grafichnih Pri stvorenni servernih zastosunkiv u razi yaksho z tih chi inshih prichin nebazhano porodzhennya obslugovuyuchih procesiv Pri programuvanni igor v yakih zdijsnyuyetsya upravlinnya znachnoyu kilkistyu ob yektiv Zastosuvannya v servernih programahPodijno oriyentovane programuvannya zastosovuyetsya v servernih programah dlya virishennya problemi masshtabuvannya na 10000 odnochasnih z yednan i bilshe U serverah pobudovanih za modellyu odin potik na z yednannya problemi z masshtabovanistyu vinikayut z nastupnih prichin Zanadto veliki nakladni vitrati na strukturi danih operacijnoyi sistemi neobhidni dlya opisu odniyeyi zadachi segment stanu zavdannya stek Zanadto veliki nakladni vitrati na peremikannya kontekstiv Filosofskoyu peredumovoyu dlya vidmovi vid potokovoyi modeli serveriv mozhe sluzhiti visliv Alana Koksa Komp yuter ce kincevij avtomat Potokove programuvannya potribno tim hto ne vmiye programuvati kincevi avtomati Servernij zastosunok pri podijno oriyentovanomu programuvanni realizuyetsya na sistemnomu vikliku yakij otrimuye povidomlennya podiyi odnochasno vid bagatoh multipleksuvannya Pri obrobci podij vikoristovuyutsya viklyuchno neblokuyuchi operaciyi vvedennya vivedennya shob ni odin deskriptor ne pereshkodzhav obrobci podij vid inshih deskriptoriv Multipleksuvannya Dlya multipleksuvannya spoluk mozhut buti vikoristani nastupni zasobi operacijnoyi sistemi Select bilshist UNIX sistem Pogano masshtabuyetsya cherez te sho spisok deskriptoriv predstavlenij u viglyadi bitovoyi karti i Linux FreeBSD Solaris Windows na potochnij moment tilki dlya operacij diskovogo vvedennya vivedennya i dlya operacij diskovogo vvedennya vivedennya Prikladi realizacij Vebserveri Nginx Lighttpd Proksi serveri Squid Serverni platformi node jsZastosuvannya v nastilnih programahU suchasnih movah programuvannya podiyi ta obrobniki podij ye centralnoyu lankoyu realizaciyi grafichnogo interfejsu koristuvacha Rozglyanemo napriklad vzayemodiyu programi z podiyami vid mishi Natiskannya pravoyi klavishi mishi viklikaye sistemne pererivannya sho zapuskaye pevnu proceduru vseredini operacijnoyi sistemi U cij proceduri vidbuvayetsya poshuk vikna sho znahoditsya pid kursorom mishi Yaksho vikno znajdeno to dana podiya nadsilayetsya v chergu obrobki povidomlen cogo vikna Dali v zalezhnosti vid tipu vikna mozhut generuvatisya dodatkovi podiyi Napriklad yaksho vikno ye knopkoyu u Windows vsi grafichni elementi ye viknami to dodatkovo generuyetsya podiya natiskannya na knopku Vidminnist ostannoyi podiyi v tomu sho vona bilsh abstraktna a same ne mistit koordinat kursoru a govorit prosto pro te sho bulo virobleno natiskannya na cyu knopku Obrobnik podiyi mozhe viglyadati nastupnim chinom na prikladi C private void button1 Click object sender EventArgs e MessageBox Show Bula natisnuta knopka Tut obrobnik podiyi ye proceduroyu v yaku peredayetsya parametr sender yak pravilo mistit pokazhchik na dzherelo podiyi Ce daye zmogu vikoristovuvati odnu j tu zh proceduru dlya obrobki podij vid dekilkoh knopok rozriznyayuchi yih za cim parametrom Movi programuvannya U movi C podiyi realizovani yak element movi i ye chlenami klasiv Mehanizm podij tut realizuye shablon proektuvannya Publisher Subscriber Priklad ogoloshennya podiyi public class MyClass public event EventHandler MyEvent TutEventHandler sho viznachaye tip proceduri obrobnika podij Pidpiska na podiyu provoditsya takim chinom myClass MyEvent new EventHandler Handler TutmyClass ekzemplyar klasuMyClass Handler procedura obrobnik Podiya mozhe mati neobmezhenu kilkist obrobnikiv Pri dodavanni obrobnika podiyi vin dodayetsya do specialnogo stek a pri viniknenni podiyi viklikayutsya vsi obrobniki za yih poryadku v steci Vidpiska vid podiyi tobto vidalennya obrobnika vikonuyetsya analogichno ale z vikoristannyam operatora Rizni movi programuvannya pidtrimuyut POP v riznomu stupeni Najpovnishu pidtrimku podij mayut nastupni movi nepovnij spisok Perl Java Delphi C Inshi movi v bilshosti z nih pidtrimuyut podiyi yak obrobku viklyuchnih situacij Instrumenti i bibliotekiz Azuki framework Cocoa amp Objective C refleksivna ob yektno oriyentovana mova programuvannya yakij dodaye povidomlennya v stili Smalltalk v movu Si GLib podijno oriyentovana mova programuvannya dlya Windows event loop management library 9 kvitnya 2020 u Wayback Machine POCO chastina bibliotek i efektivna podijna biblioteka dlya C PRADO komponentnij podijno oriyentovanij instrument dlya Web programuvannya na PHP 5 Tcl Python The Qt Toolkit a cross platform for C based on an event driven model A version called Qt Console exists which omits the GUI features but still includes the event handling framework and some other features like cross platform networking threading and XML libraries QP rodina vidkritih podijno oriyentovanih seredovish dlya vbudovanih sistem realnogo chasu 1 8 lipnya 2008 u Wayback Machine Simple Unix Events aka SUE 29 bereznya 2010 u Wayback Machine prosta ob yektno oriyentovana biblioteka dlya pobudovi podijno oriyentovanih program pid Unix na movi C Div takozhAvtomatne programuvannya Callback programuvannya Podijno oriyentovana arhitektura EDA Bagatoetapna podijno oriyentovana arhitektura SEDA Dzherela opis 7 veresnya 2011 u Wayback Machine z Portland Pattern Repository 22 lyutogo 2011 u Wayback Machine Event Driven Programming Introduction Tutorial History 19 lyutogo 2006 u Wayback Machine navchalnij posibnik Stefana Fergi Stephen Ferg navchalnij posibnik Alana Golda Alan Gauld Martin Fowler Event Collaboration 2 veresnya 2006 u Wayback Machine Ben Watson Transitioning from Structured to Event Driven Programming 18 sichnya 2010 u Wayback Machine Chris McDonald The event driven programming style 20 lyutogo 2005 u Wayback Machine Event Driven Programming and Agents 10 veresnya 2011 u Wayback Machine LabWindows CVI Resources Comment 18 grudnya 2007 u Wayback Machine by Complex Event Processing and Service Oriented Architecture 30 zhovtnya 2012 u Wayback Machine Event driven programming and SOA Jack van Hoof How EDA extends SOA and why it is important 8 bereznya 2021 u Wayback Machine Priklad z vidkritim kodom Distributed Publish Subscribe Event System 21 chervnya 2008 u Wayback Machine Podijno oriyentovane programuvannya na movi Java https jsasb dev java net Rex Youung Jsasb Nepejvoda N N Sobytijnoe programmirovanie Stili i metody programmirovaniya 28 sichnya 2012 u Wayback Machine Zykov S V Vvedenie v teoriyu programmirovaniya Obektno orientirovannyj podhod 13 kvitnya 2011 u Wayback Machine Posilannya Arhiv originalu za 8 lyutogo 2008 Procitovano 6 kvitnya 2011 Arhiv originalu za 29 bereznya 2010 Procitovano 6 kvitnya 2011 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno listopad 2017