Se numeste eveniment orice modificare care are loc, fie în starea dispozitivelor de intrare, fie în cea a obiectelor grafice de pe ecran: apăsarea sau eliberarea unei taste, deplasarea mouse-ului, apăsarea sau eliberarea unui buton al mouse-ului, deschiderea sau închiderea unei ferestre, efectuarea unui clic de mouse pe un obiect de control (buton, caseta de validare, bara de defilare etc.), intrarea cursorului de mouse în câmpul activ al unui obiect grafic sau părăsirea acestuia etc. Pot exista, desigur, și alte tipuri de evenimente, dar aici ne interesează numai cele legate de interfața grafică a aplicației.
Interacțiunea dintre operator și aplicație într-un
sistem bazat pe evenimente decurge astfel: operatorul provoacă generarea
unui eveniment, acționând asupra tastaturii, mouse-ului sau a altui
dispozitiv de intrare, iar programul "răspunde" la acest eveniment prin
executarea unei anumite acțiuni. Acest mod de lucru impune o nouă
concepție în proiectarea programelor, numită programarea
orientată pe evenimente.
În programarea procedurală tradițională, procesul de calcul
este în întregime ghidat de instrucțiunile programului. Imediat ce s-a
încheiat executarea unei instrucțiuni, se trece la instrucțiunea
următoare, respectând fluxul de instrucțiuni al programului respectiv.
Aceasta se referă și la interacțiunea dintre program și utilizator.
Chiar dacă programul este interactiv, initiațiva privind ce date trebuie
introduse și în ce moment se introduc acestea aparține programului.
Operatorului uman nu îi rămâne decât să se conformeze solicitărilor
programului și să introducă date atunci când ele sunt cerute de acesta.
Este evident că un asemenea rol nu este deloc convenabil pentru om,
care dorește să aibă el inițiativa acțiunilor.
Apariția interfețelor grafice a permis introducerea unei noi concepții în interacțiunea dintre operator și aplicatie, astfel ca inițiativa să îi revină operatorului uman, iar programul să execute comenzile acestuia. S-a trecut, astfel, de la programarea procedurală tradițională la programarea orientată pe evenimente (engleză: Event-Oriented Programming), cunoscuta și sub numele de programare ghidată de evenimente (engleză: Event Driven Programming). |
Există diferite modele de generare, captare și tratare a evenimentelor. În lucrarea de față va fi prezentat modelul de evenimente specific platformei Java 2.
In JDK 1.0 s-a folosit un model de evenimente bazat pe moștenire, reprezentat prin clasa Event. Această clasă este menținuta în continuare, din motive de compatibilitate a programelor din JDK 1.0 cu cele din versiunile ulterioare, dar nu mai este recomandată. |
Începând cu JDK 1.1 s-a introdus un nou model de evenimente, bazat
pe delegare (engleză: Delegation Event Model).
Conform acestui model, distingem trei catedorii de obiecte care au
relații cu evenimentele:
- obiecte care generează evenimente, numite surse de
evenimente (engleza: Event Source);
- obiecte care captează și tratează evenimentele, numite ascultători
de evenimente (engleză: Event Listener);
- evenimentele propriu-zise (engleză: Event),
care sunt tot obiecte, generate de surse și captate de ascultători.
Un eveniment generat de o sursă poate fi interceptat de mai mulți
ascultători. Este posibil ca un obiect să se "asculte" pe sine însuși,
deci să își trateze propriile evenimemte. Tocmai această legatură
strânsa între sursele și ascultătorii de evenimente este caracteristica
esențiala a "modelului delegării": ea constă în faptul că sursa
transmite evenimentele generate de ea numai către ascultătorii care au
fost atașați la sursa respectivă, iar ascultătorul primește evenimente
numai de la sursele la care a fost atașat.
În modelul de evenimente din JDK 1.0 sursa transmitea evenimentele fără o destinație anume, iar consumatorii de evenimente trebuiau sa depisteze singuri ce fel de evenimente sunt acestea și de la ce sursă provin și, în funcție de aceasta, să decidă dacă interceptează sau nu evenimentul respectiv. |
Remarcăm, deci, că se aplică cu consecvență principiul programării orientate pe obiecte, în sensul că aplicația este constituită dintr-un ansamblu de obiecte care interacționează. Putem spune că evenimentul este o nouă forma de mesaj, care se transmite între obiectele-sursă și obiectele-ascultători. Fiecare ascultator trebuie "adăugat" la sursă. În acest fel, sursa "știe" căror ascultători să le transmită evenimentele pe care le generează. |
Este important sa reținem faptul că, în acest model de evenimente, sursele sunt întotdeauna componente ale interfeței grafice. Când cursorul mouse-ului intră în interiorul unei componente sau iese din aceasta, sau când facem click de mouse pe o componenta, evenimentul nu este generat direct de către mouse, ci de către componenta respectivă a interfeței. În mod similar, când apăsăm sau eliberăm o tastă, evenimentul nu este generat direct de către tastă, ci de către acea componentă a interfeței grafice, care este activă în momentul respectiv. Evenimentele pot fi generate de o componentă și atunci când au loc modificari ale stării acesteia ca urmare a executării unor instrucțiuni din program (de exemplu când se deschide sau se închide o fereastră, etc.).