Eseményvezérelt programozás

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2016. február 13-án felülvizsgált verziótól ; az ellenőrzések 15 szerkesztést igényelnek .

Az eseményvezérelt programozás ( eng.  event-driven programming ; a továbbiakban SOP) egy olyan programozási paradigma , amelyben a programvégrehajtást események határozzák meg  - felhasználói műveletek (billentyűzet, egér, érintőképernyő), más programok és szálak üzenetei, operációs rendszer eseményei ( például hálózati csomag fogadása ).

Az SOP úgy is meghatározható, mint egy számítógépes program létrehozásának módja, amelyben a fő alkalmazási hurok kifejezetten le van foglalva a kódban (általában a program fő funkciójában) , amelynek törzse két részből áll: eseménylekérésből és eseményfeldolgozásból . .

A valós feladatokban általában elfogadhatatlan az eseménykezelő hosszú ideig történő futtatása, mivel ebben az esetben a program nem tud reagálni más eseményekre. Ebben a tekintetben az eseményvezérelt programok írásakor gyakran használják az automatikus programozást .

Hatókör

Az eseményvezérelt programozást általában három esetben alkalmazzák:

  1. felhasználói felületek (beleértve a grafikusakat is ) építése során;
  2. szerveralkalmazások létrehozásakor, ha valamilyen okból a szolgáltatási folyamatok generálása nem kívánatos ;
  3. olyan játékok programozásakor, amelyekben sok tárgyat irányítanak.

Alkalmazások szerveralkalmazásokban

Az eseményvezérelt programozást kiszolgálóalkalmazásokban használják a 10 000 vagy több egyidejű kapcsolatra való méretezés problémájának megoldására.

Az "egy szál kapcsolatonként" modell szerint épített szervereken a méretezhetőségi problémák a következő okok miatt merülnek fel:

A szerverek streaming modelljének feladásának filozófiai előfeltétele lehet Alan Cox kijelentése : „A számítógép egy állapotgép . A folyamatprogramozás azoknak való, akik nem tudják, hogyan kell programozni az állapotgépeket” [1] .

Az eseményorientált programozás kiszolgálóalkalmazása olyan rendszerhíváson történik, amely egyszerre fogad eseményeket sok leírótól (multiplexelés). Az eseménykezelés kizárólag nem blokkoló I/O-műveleteket használ, így egyetlen kezelő sem zavarja meg a többi leíró eseményeinek feldolgozását.

Multiplexelés

Az alábbi operációs rendszer-eszközök használhatók multiplex kapcsolatokhoz:

Megvalósítási példák

Alkalmazások asztali alkalmazásokban

A modern programozási nyelvekben az események és eseménykezelők központi szerepet töltenek be a grafikus felhasználói felület megvalósításában. Vegyük például egy program interakcióját az egéreseményekkel. A jobb egérgomb megnyomása rendszermegszakítást vált ki, amely egy adott eljárást futtat le az operációs rendszeren belül. Ez az eljárás az egérkurzor alatti ablakot keresi. Ha talál egy ablakot, akkor ez az esemény az ablak üzenetsorába kerül. Továbbá, az ablak típusától függően további események generálhatók. Például, ha egy ablak egy gomb (Windowsban minden grafikus elem ablak), akkor a rendszer emellett egy gombkattintási eseményt is generál. Az utolsó esemény különbsége, hogy elvontabb, vagyis nem tartalmazza a kurzor koordinátáit, hanem egyszerűen azt írja ki, hogy a gombra kattintottak.

Egy eseménykezelő így nézhet ki (példaként a C# használatával):

private void button1_Click ( objektum küldője , EventArgs e ) { Üzenetdoboz . Show ( "A gomb megnyomva" ); }

Itt az eseménykezelő egy olyan eljárás, amelynek átadják a küldő paramétert, amely általában az eseményforrásra mutató mutatót tartalmaz. Ez lehetővé teszi, hogy ugyanazt az eljárást használja több gomb eseményeinek kezelésére, ezzel a paraméterrel megkülönböztetve őket.

Programozási nyelvek

A C# -ban az események nyelvi elemként valósulnak meg, és osztályok tagjai. Az eseménymechanizmus itt a kiadó/előfizető tervezési mintát valósítja meg . Példa esemény deklarációra:

public class MyClass { nyilvános esemény EventHandler MyEvent ; }

Ahol az EventHandler  egy delegált , amely meghatározza az eseménykezelő eljárás típusát. Az eseményre való feliratkozás a következőképpen történik:

osztályom . MyEvent += új EventHandler ( Kezelő );

Itt a myClass  a MyClass osztály egy példánya, a Handler pedig egy  kezelő eljárás. Egy eseménynek korlátlan számú kezelője lehet. Amikor egy eseménykezelőt adunk hozzá, az hozzáadódik egy speciális veremhez, és amikor egy esemény bekövetkezik, az összes kezelő a veremben lévő sorrendjében kerül meghívásra. Az eseményről való leiratkozás, azaz egy kezelő törlése hasonlóan történik, de a "-=" operátor használatával.

A különböző programozási nyelvek különböző mértékben támogatják az SOP-okat. A következő nyelveken van a legteljesebb támogatás az eseményekhez (a lista nem teljes):

Más nyelvek többnyire kivételkezelésként támogatják az eseményeket .

Eszközök és könyvtárak

  • Node.js , a V8 JavaScript motoron alapuló eseményvezérelt I/O keretrendszer
  • Cocoa & Objective-C , egy tükröző objektum-orientált programozási nyelv, amely Smalltalk stílusú üzeneteket ad a C nyelvhez .
  • Sima
  • Gui4Cli [4] , eseményvezérelt programozási nyelv Windowshoz
  • libsigc++
  • élősködő
  • POCO
  • libasync , az sfs és sfslite [5] könyvtárak része, hatékony eseménykönyvtár a C++ számára
  • Perl objektumkörnyezet
  • AnyEvent, EV - Perl modulok eseményvezérelt programozáshoz
  • PRADO, egy eseményvezérelt összetevő eszköz a webes programozáshoz PHP 5 -ben
  • tcl
  • Twisted , Python
  • Qt , egy többplatformos C ++ widget könyvtár , amely az eseménykezelési modellen alapul. Van egy kisebb verzió, a Qt/Console, amely eltávolítja a widget-támogatási kódot, és egy eseményvezérelt keretrendszer, amely további funkciókat is tartalmaz, például a platformok közötti hálózatkezelést, a többszálú kezelést és az XML -manipulációt .
  • A QP  nyílt eseményvezérelt környezetek családja beágyazott valós idejű rendszerek számára [6]
  • Simple Unix Events, más néven SUE [7] , egy egyszerű objektum-orientált könyvtár esemény-orientált Unix programok C++ nyelven történő építéséhez .

Lásd még

Angol nyelvű források

Orosz nyelvű anyagok

Linkek

  1. Linux-Kernel archívum: Re: Alan Cox idézet? (volt: Re: könyvelés (hivatkozás nem elérhető) . Letöltve: 2008. április 29. Az eredetiből archiválva : 2008. február 8.. 
  2. N. N. Nepeyvoda. 13. Előadás: Eseményprogramozás // A programozás stílusai és módszerei. előadás tanfolyam. tanulmányi útmutató . - M . : Internet University of Information Technologies, 2005. - S. 213-222. — 316 p. — ISBN 5-9556-0023-X . Archiválva : 2012. január 28. a Wayback Machine -nél
  3. S.V. Zykov. №15 és №16 előadások // Bevezetés a programozáselméletbe. Objektum orientált megközelítés . — Internet University of Information Technologies. Archivált : 2011. április 13. a Wayback Machine -nél
  4. Gui4Cli honlap . Letöltve: 2011. július 1. Az eredetiből archiválva : 2011. július 9..
  5. sfslite: áttekintés (downlink) . Hozzáférés dátuma: 2008. január 22. Az eredetiből archiválva : 2010. március 29. 
  6. Letöltés a Quantum Leaps webhelyről . Letöltve: 2008. január 22. Az eredetiből archiválva : 2008. július 8..
  7. A Simple Unix Events (SUE) könyvtár kezdőlapja . Hozzáférés dátuma: 2011. július 1. Az eredetiből archiválva : 2010. március 29.