Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar
Függvénymutatókkal Származtatással Interfészekkel Egyéb nyelvi elemekkel Eseménykezelés
3 Komponens alapú programozás Komponens egy független egység Jól elhatárolható a környezetétől és más komponensektől Magába zárja az általa nyújtott szolgáltatásokat A komponens felhasználójának nem kell ismernie a működését Komponens interfésze A komponens funkcióihoz csak az interfészen keresztül lehet hozzáférni Egy komponens akár több interfészt is biztosíthat a külfönéle kliensek számára Eseménykezelés Általában a kliens próbál hozzáférni a komponens funkcióihoz, de elképzelhető, hogy bizonyos esetekben a komponensnek kell kommunikációt kezdeményeznie Amennyiben kétirányú kommunikációra van szükség, ezt technikailag biztosítani kell a komponens módosítása nélkül
4 Függvénymutatók A napjainkban használt (Neumann-elvű) architektúrák esetén a programok kódja azonos memóriában (és azonos módon) tárolódik az adatokkal Ez alapján technikailag egyszerűen megoldható, hogy egy mutató ne egy változóra, hanem egy függvény belépési címére mutasson Hagyományos nyelveknél ezzel lehetett megoldani a visszahívásokat (callback) Előnyei Hatékony (gyors) Hátrányai Bonyolult Nincs ellenőrzés (fordítás, futtatás közben) Nagy a hibalehetőség (hibás kód, rosszindulatú kód stb.) a : 8 bites szám függvény Növel(k) k k + 1 Növel k függvény vége 01011011101100110010101 01010101010101010001010 11010111010110101101010 00110101000111001010111 01000011100010101111000 11010100101011111100001 01101110110011001010101 01010101010101000101011 01011101011010110101000 11010100011100101011101 00001110001010111100011 01010010101111110000101 10111011001100101010101 01010101010100010101101 01110101101011010100011 01010001110010101110100 00111000101011110001101 01001010111111000010110 11101100110010101010101 01010101010001010110101 11010110101101010001101 01000111001010111010000 11100010101111000110101 00101011111100001011011
Függvénymutatókkal Származtatással Interfészekkel Egyéb nyelvi elemekkel Eseménykezelés
6 Eseménykezelés származtatással Az eseményeket küldő osztály rendelkezik olyan (alapesetben absztrakt vagy üres) metódusokkal, amelyeket az esemény bekövetkeztekor mindig meghív Az események kezeléséhez szükséges egy leszármazott osztály készítése, majd ott ezen metódusok implementálása A módszer többféleképpen megoldható Minden eseményt egy metódus kezel Minden eseményhez külön metódus tartozik Előnyei Jól illeszkedik az OOP szemlélethez Hátrányai Sok, gyakran minimális kóddal rendelkező osztály definiálását igényli Gomb +Lenyomás( ) +EseményKezelő( ) HelloGomb +EseményKezelő( ) Az esemény forrása és az eseményhez tartozó kezelő nem függetlenek (pl. ugyanaz a kezelő több helyen?)
Függvénymutatókkal Származtatással Interfészekkel Egyéb nyelvi elemekkel Eseménykezelés
8 Eseménykezelés interfészekkel Az eseménykezelésben résztvevő típusok Esemény támogató interfész Eseményt küldő osztály (tárol egy vagy több, az interfészt megvalósító objektumreferenciát) Eseményt kezelő osztály (megvalósítja ezt az interfészt) Eseménykezelés lépései Eseménykezelő osztály definiálása Eseménykezelő objektum példányosítása Eseménykezelő objektum regisztrálása Esemény bekövetkezte esetén a forrás az interfészen keresztül meghívhatja a kezelő metódusát Előnyei Az esemény forrása és kezelője egymástól függetlenek Gomb -kezelő(k) : IGombKezelő +Feliratkozás(IGombKezelő) +Leiratkozás(IGombKezelő) +Lenyomás( ) IGombKezelő <<interface>> IGombKezelő +LenyomásKezelő( ) GombKezelő +LenyomásKezelő( ) 1 forrás N kezelő, N forrás 1 kezelő, N forrás N kezelő (általában az eseménykezelő metódus paramétere a forrás objektum) Az interfész több metódust is tartalmazhat (lenyom, lenyit stb.)
Függvénymutatókkal Származtatással Interfészekkel Egyéb nyelvi elemekkel Eseménykezelés
10 Eseménykezelés metódusreferenciákkal Alapelve hasonló a függvénymutatóknál megismert módszerhez (legalábbis a programozó számára a metódusreferenciák kezelése hasonlónak tűnik) Lényeges különbségek Csak objektumok metódusaira tudunk hivatkozni Metódusreferencia értékadásánál szigorú típusellenőrzésen kell átesnie a metódusnak (paraméterek típusa, visszatérési érték) Az eseménykezelés architektúrája megfelel az OOP alapelveinek Előnyei Könnyen olvasható kód, nincs szükség új osztály definiálására (vagy interfészek megvalósítására) az események kezeléséhez Példány és osztály metódusok egyaránt értékül adhatók Eseménykezelés nyelvi szintű támogatásából eredő előnyök (pl. regisztráció, eseménykezelők tárolása stb.)
11 Irodalomjegyzék Javasolt/felhasznált irodalom Nyékyné Gaizler Judit: Java 2 útikalauz programozóknak 1.3, ELTE TTK Hallgatói alapítvány, Budapest J. Richter: CLR via C# 2nd edition, Microsoft press, 2006