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

Hivatkozások

Külső linkek