Introducere in POE – programarea orientata pe evenimente

 

Când se lucrează cu o interfață grafică,  apar diferite obiecte grafice: ferestre, meniuri, butoane, bare de defilare obiecte standard Windows etc. Utilizatorul unui program cu interfata grafica poate utiliza atat tastatura dar, în plus poate utiliza si mouse-ul cu ajutorul căruia poate alege diferite obiecte grafice de pe ecran și poate da anumite comenzi prin apăsarea unuia din butoanele acestui dispozitiv.

 

Programele cu interfețe grafice sunt de obicei programate într-o modalitate gestionată de evenimente. Sistemele de operare sunt un alt exemplu clasic de programe dirijate de evenimente.

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). 

Programarea orientată eveniment este o paradigmă a programării calculatoarelor. Spre deosebire de programele tradiționale, care-și urmează propria execuție, schimbându-și câteodata doar cursul în puncte de ramificație (instrucțiuni test, etc), cursul execuției unui program orientat eveniment este condus în mare parte de evenimente externe.

Programele orientate eveniment sunt formate de obicei dintr-un număr de programe mici numite handlere de eveniment, care sunt apelate ca răspuns la evenimente externe și dintr-un coordonator (dispatcher), care apelează handlerele de evenimente, folosind de obicei o coadă a evenimentelor, care să rețină evenimentele care nu au fost procesate.

În multe cazuri, handlerele de evenimente pot declanșa ele însele evenimente, ducând la o cascadă de evenimente.

Programarea orientată eveniment accentuează ca și virtuți, flexibilitatea și asincronicitatea.

In BorlandC++ Builder exista un designer (wizard) pentru proiectarea interfețelor grafice, care ajută la realizarea unor programe ce folosesc obiecte standard Windows și utilizează programarea orientată pe evenimente. Până acum in limbajul C/C++ s-a folosit programarea clasică care utilizează comenzile procedurale pentru a selecta diferite funcții definite de programator sau predefinite. Interfața grafică in BorlandC++Builder permite utilizarea obiectelor TLabel de exemplu la care se pot alege diferite dimensiuni, fonturi, culori.

Designer-ul este un generator de cod de program C, care definește o clasă Form de tipul TForm (clasa ferestrei aplicatiei) pe care se gasesc obiecte derivate din alte clase (Label, Button, Edit, ComboBox, Image, List, Meniu etc.)

Programatorul proiectează o machetă de formular (din clasa TForm) pe care plasează obiectele de pe o Paletă de obiecte, pe care le personalizează modificându-le proprietățile cu ajutorul unei Palete de proprietăți afișate de Inspectorul de obiecte (obiect al designer-ului). Unele proprietati ale obiectelor din macheta de formular pot fi modificate de catre programator chiar si cu ajutorul mouse-ului (spre exemplu dimensiunile unui buton).

 

Activarea inspectorului de obiecte se face din meniu View al aplicatiei alegand optiunea Object Inspector.

Practic programatorul are doua posibilitati de realizare a aplicatiei: in linie de cod editand programul sursa si/ sau utilizand un editor grafic cu ajutorul caruia va amplasa componentele grafice ale aplicatiei in macheta de formular. Daca in modul grafic prelucrarile sunt minimale (de obicei se stabilesc anumite valori ale unor proprietati ale obiectelor ca dimensiune, culoare, aspect etc) modul program permite o prelucrare avansata (evaluarea unor expresii, prelucrari pe siruri de caractere etc.). In plus, programatorul are posibilitatea de a „comuta” intre un mod de lucru sau altul prin optiunea: Toggle Form / Unit din meniul View sau alegand simbolul:  de pa bara de meniuri.

 

Obiecte inserate in

formular

 

Inspector de obiecte:

Proprietati

Evenimente

 

Cod sursa

 

formular