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 .
Az eseményvezérelt programozást általában három esetben alkalmazzák:
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.
Az alábbi operációs rendszer-eszközök használhatók multiplex kapcsolatokhoz:
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.
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 .