PROGRAMMAZIONE GUIDATA DA EVENTI
Event-driven programming
Modalita' di programmazione con la quale si creano applicazioni (dotate
di interfaccia grafica)
aventi un comportamento di tipo reattivo.
Le reazioni sono scatenate dagli eventi prodotti dal WMS a seguito
delle azioni dell'utente.
Gli eventi determinano il flusso del programma.
La reazione dell'applicazione ad un evento puo' comportare:
- cambiamento dello stato interno dell'applicazione
- attivazione di una procedura di calcolo con produzione
di risultati
- visualizzazione di risultati attraverso l'interfaccia
grafica o comunque feedback per confermare
che l'operazione e' stata effettuata
- cambiamento nell'interfaccia grafica: apertura / chiusura /
modifica di finestre, attivazione / disattivazione
di tipi di eventi
- eventuale generazione di eventi diretti ad altre applicazioni
Queste applicazioni tipicamente sono
implementate come client nel contesto di un WMS.
Schema di funzionamento
Schema di funzionamento di una applicazione guidata da eventi:
- Inizializzazione
- collegamento con il WMS
- preparazione dell'interfaccia grafica (definire le
finestre, il loro contenuto, gli eventi che si intendono
catturare...)
- visualizzazione dell'interfaccia grafica (mappare le finestre)
- Ciclo degli eventi. Ad ogni giro:
- guarda se c'e' un evento
- esegui la reazione a seconda del tipo di evento e della finestra
in cui si e' verificato
Nota bene
Questo e' lo schema di funzionamento interno.
Non e' detto che nel codice scritto dal programmatore
siano presenti (tutte) queste parti.
-
se uso un toolkit la preparazione dell'interfaccia si riduce ad
istanziare i widget opportuni
-
se uso un toolkit il ciclo degli eventi e' implementato nel toolkit
-
se il toolkit e' integrato al linguaggio (es. in java)
il collegamento al WMS non e' necessario
Tipo di interazione
Come e' implementato il "guarda se c'e' un evento" nello schema precedente?
- interazione bloccante
- interazione non bloccante
Interazione bloccante
Programma completamente guidato da eventi: compie elaborazioni solo
in seguito agli eventi.
Attende che giunga un evento interrompendo il flusso del programma
e liberando la CPU.
Si risveglia solo in occasione del verificarsi di eventi.
Interazione non bloccante
Programma oltre a reagire agli eventi esegue anche operazioni
(indipendenti dagli eventi). Esempio: animazione.
Monitora se arrivano eventi e nel frattempo
esegue le sue operazioni (consumando CPU).
Se arriva un evento, allora interrompe la sua normale
attivita' per reagire all'evento.
- controlla se ci sono eventi in coda
- se c'e' un evento, esegui l'azione corrispondente all'evento
- altrimenti / in ogni caso esegui la procedura autonoma
Il controllo della coda puo' avvenire o guardando se c'e' qualche evento
in questo momento, oppure aspettando per un tempo massimo
prefissato (breve) che arrivi qualche evento. Questo ultimo modo
libera la CPU per il tempo di attesa.
In alcuni pacchetti l'interazione non bloccante e' gestita introducendo
uno speciale evento nullo:
- se non ci sono eventi in coda, viene restituito l'evento nullo
- la reazione all'evento nullo coincide con
l'eseguire la procedura indipendente
Implementazione del ciclo degli eventi
Come e' implementato "esegui la reazione relativa all'evento"?
- a mano mediante switch
- automaticamente mediante callback preassociate agli eventi
Gestione "a mano"
Ad ogni evento verificatosi, l'applicazione esegue una selezione (switch)
in base al tipo di evento e alla finestra in cui e' avvenuto:
- se l'evento e' di tipo TA ed e' avvenuto nella finestra FA,
esegui azione AA
- se l'evento e' di tipo TB ed e' avvenuto nella finestra FB,
esegui azione BB
- se l'evento e' di tipo TC ed e' avvenuto nella finestra FC,
esegui azione CC
- ...
Fattibile solo in programmi piccoli.
Procedure callback
Il toolkit di sviluppo di interfacce grafiche fornisce un meccanismo che
implementa automaticamente il ciclo degli eventi.
Callback: procedura dell'applicazione che viene registrata per
essere eseguita
automaticamente dal sistema al verificarsi di un dato evento in un dato
widget.
In fase di inizializzazione, la procedura viene definita e
registrata cioe' collegata al widget e all'evento in questione.
Il sistema automaticamente, all'occorrere di un evento, chiama la
callback registrata per quell'evento.
Lo schema dell'applicazione diventa:
- Inizializzazione
- collegamento con il WMS
- preparazione dell'interfaccia grafica: definire i widget
e collocarli nelle finestre
- associazione di callback ai widget per gli eventi di interesse
- visualizzazione dell'interfaccia grafica (mappare le finestre)
- Ciclo degli eventi
- basta chiamare una sola apposita funzione del toolkit, che esegue
automaticamente al suo interno il ciclo degli eventi
Nota bene
In alcuni toolkit (es. java) non e' necessario chiamare esplicitamente
il ciclo degli eventi: viene chiamato automaticamente non appena
l'interfaccia e' visibile.