Eseményvezérelt programozás - Event-driven programming
A számítógépes programozás során az eseményvezérelt programozás olyan programozási paradigma, amelyben a program áramlását olyan események határozzák meg , mint a felhasználói műveletek ( egérkattintás , gombnyomás), érzékelő kimenetek vagy más programokból vagy szálakból érkező üzenetek . Az eseményvezérelt programozás az uralkodó paradigma, amelyet a grafikus felhasználói felületeken és más alkalmazásokban (pl. JavaScript webes alkalmazások ) használnak, amelyek középpontjában bizonyos műveletek elvégzése áll, válaszul a felhasználói bejegyzésre . Ez igaz az eszközillesztők programozására is (pl. P az USB -illesztőprogram -veremben).
Eseményvezérelt alkalmazásban általában van egy fő hurok, amely figyeli az eseményeket, majd az egyik esemény észlelésekor visszahívási funkciót indít . A beágyazott rendszerekben ugyanez érhető el hardveres megszakításokkal a folyamatosan futó főhurok helyett. Az eseményvezérelt programok bármilyen programozási nyelven írhatók , bár a feladat könnyebb azokon a nyelveken, amelyek magas szintű absztrakciót biztosítanak , mint például a várakozás és a lezárások .
Eseménykezelők
Egy triviális eseménykezelő
Mivel a kód az események ellenőrzésére szolgál, és a fő hurok gyakori az alkalmazások között, sok programozási keret gondoskodik azok végrehajtásáról, és elvárja, hogy a felhasználó csak a kódot adja meg az eseménykezelők számára. Ebben az egyszerű példában előfordulhat, hogy az OnKeyEnter () nevű eseménykezelő hívást kap, amely tartalmaz egy argumentumot karakterlánccal, amely megfelel annak, amit a felhasználó begépelt az ENTER billentyű megnyomása előtt. Két szám hozzáadásához az eseménykezelőn kívüli tárhelyet kell használni. A megvalósítás az alábbiak szerint nézhet ki.
globally declare the counter K and the integer T.
OnKeyEnter(character C)
{
convert C to a number N
if K is zero store N in T and increment K
otherwise, add N to T, print the result and reset K to zero
}
Míg az előzmények nyomon követése rendszerint triviális egy szekvenciális programban, mivel az eseménykezelők külső eseményekre reagálva hajtanak végre, a kezelők helyes strukturálása a megfelelő működésre, ha bármilyen sorrendben meghívják őket, különös figyelmet és tervezést igényelhet egy eseményvezérelt programban.
Eseménykezelők létrehozása
Az eseményvezérelt program kifejlesztésének első lépése az alprogramok vagy módszerek sorozatának megírása , az úgynevezett eseménykezelő rutinok. Ezek a rutinok kezelik azokat az eseményeket, amelyekre a főprogram válaszolni fog. Például, ha egyetlen bal egérgombbal kattint a GUI program egyik parancssorára, egy rutin elindul, amely megnyit egy másik ablakot, adatokat ment az adatbázisba vagy kilép az alkalmazásból. Sok modern programozási környezet biztosítja a programozó számára az eseménysablonokat, lehetővé téve a programozó számára, hogy az eseménykód írására összpontosítson.
A második lépés az eseménykezelőket az eseményekhez kötni, hogy a megfelelő funkciót hívják meg, amikor az esemény megtörténik. A grafikus szerkesztők egyesítik az első két lépést: kattintson duplán egy gombra, és a szerkesztő létrehoz egy (üres) eseménykezelőt, amely a gombra kattintó felhasználóhoz kapcsolódik, és megnyit egy szöveges ablakot, hogy szerkeszthesse az eseménykezelőt.
Az eseményvezérelt program fejlesztésének harmadik lépése a fő ciklus megírása . Ez egy olyan funkció, amely ellenőrzi az események előfordulását, majd felhívja a megfelelő eseménykezelőt annak feldolgozására. A legtöbb eseményvezérelt programozási környezet már biztosítja ezt a fő hurkot, így azt nem kell az alkalmazásprogramozónak kifejezetten biztosítania. Az RPG , az IBM egyik korai programozási nyelve , amelynek 1960-as évekbeli tervezési koncepciója hasonló volt a fent tárgyalt eseményvezérelt programozáshoz, beépített fő I/O hurkot ("programciklus" -ot) tartalmazott, ahol a számítások a " indikátorok ( zászlók ), amelyeket a ciklus elején állítottak be.
Kivételkezelők PL/I -ben
A PL/I-ben , bár maga a program nem túlnyomórészt eseményvezérelt, bizonyos rendellenes események, például hardverhiba, túlcsordulás vagy "programellenőrzések" fordulhatnak elő, amelyek esetleg megakadályozzák a további feldolgozást. A kivételkezelőket a "láthatatlan" hívók "ON" utasításai biztosíthatják, hogy tisztítási rutinokat biztosítsanak a felmondás előtti utólagos tisztításhoz, vagy helyreállítási műveletek végrehajtásához és a megszakított eljáráshoz való visszatéréshez.
Gyakori felhasználások
A legtöbb meglévő GUI fejlesztő eszköz és architektúra eseményvezérelt programozásra támaszkodik. A Java AWT keretrendszer az összes felhasználói felület módosítását egyetlen szálon dolgozza fel, az esemény -diszpécserszálnak . Hasonlóképpen, a JavaFX Java keretrendszer összes felhasználói felületének frissítése a JavaFX alkalmazásszálon történik.
Ezenkívül az olyan rendszerek, mint a Node.js is eseményvezéreltek.
Kritika
Az esemény-cselekvés modellre támaszkodó programok kialakítását kritizálták, és felmerült, hogy az esemény-cselekvés modell arra készteti a programozókat, hogy hibára hajlamos, nehezen kiterjeszthető és túlságosan bonyolult alkalmazási kódot hozzanak létre. Az asztali meghajtású állapotgépeket életképes alternatívaként javasolták. Másrészt az asztali meghajtású állapotgépek maguk is jelentős gyengeségekben szenvednek, beleértve az állapotrobbanás jelenségét. Erre megoldás a Petri -hálók használata .
Halom nélküli menetvágás
A hardverleíró nyelvekben eseményvezérelt megközelítést alkalmaznak . A szálkontextusnak csak CPU -veremre van szüksége, miközben aktívan feldolgozza az eseményt; miután elkészült, a CPU tovább léphet más eseményvezérelt szálak feldolgozására, ami rendkívül nagyszámú szál kezelését teszi lehetővé. Ez lényegében véges állapotú gépi megközelítés.
Lásd még
- Autonóm perifériás működés
- Programozási paradigmák összehasonlítása
- Adatfolyam programozás (hasonló koncepció)
- DOM események
- Eseményvezérelt architektúra
- Eseményfolyam feldolgozás (hasonló koncepció)
- A hardver leírásának nyelve
- Megszakítás
- Az irányítás megfordítása
- Üzenetorientált köztes szoftver
- Programozási paradigma
- Közzététel – feliratkozás minta
- Reaktor minta
- Jel programozás (hasonló koncepció)
- Fokozott eseményvezérelt architektúra (SEDA)
- Idő által kiváltott rendszer (alternatív architektúra a számítógépes rendszerekhez)
- Virtuális szinkron , az eseményvezérelt programozás elosztott végrehajtási modellje
Hivatkozások
Külső linkek
- A párhuzamossági minták bemutatása a scaleconf webhelyen
- Eseményvezérelt programozás: Bevezetés, bemutató, történelem , bemutató Stephen Ferg
- Eseményvezérelt programozás , bemutató Alan Gauld
- Esemény -együttműködés , Martin Fowler cikke
- A Swing Threading újragondolása , Jonathan Simon cikke
- Az eseményvezérelt programozási stílus Archiválva 2005-02-20 a Wayback Machine-nél , Chris McDonald cikke
- Eseményvezérelt programozás sablon specializáció segítségével , Christopher Diggins cikke
- Schiffer, S .; Frohlich, JH (1994). "A Vista koncepciói és architektúrája-egy többparadigmás programozási környezet". Az IEEE 1994 -es szimpóziuma a vizuális nyelvekről . 40–47. doi : 10.1109/VL.1994.363642 . ISBN 0-8186-6660-9. S2CID 15927869 .
- Eseményvezérelt programozás és ügynökök , fejezet
- LabWindows/CVI erőforrások
- Distributed Publish/Subscribe Event System , nyílt forráskódú példa, amely az MSN.com és a Microsoft.com webhelyeken készül
- Javascript eseményhurok