La gestione degli eventi

Slides:



Advertisements
Presentazioni simili
Java base V: La gestione delle Eccezioni
Advertisements

CONCLUSIONE - Nucleo (o Kernel) Interagisce direttamente con lhardware Interagisce direttamente con lhardware Si occupa dellesecuzione.
Interazione Uomo - Macchina
Applet Java.
Informatica Recupero debito quarto anno Terzo incontro.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
CONOSCIAMO IL WINDOWS '95.
Java: programmazione concorrente con condivisione di memoria
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Il linguaggio java Esercitazioni del corso di Sistemi Informativi
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Progetto Mini di Sistemi Distribuiti – AA 2007/08 Secure Group Communication with GDH.1 Alessandro Licata Caruso Matr:
1 9: Progettazione Architetturale Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
Applet Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Grafica Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
JAVASCRIPT DIFFERENZA TRA JAVASCRIPT E JAVA TAG LO SCRIPT OGGETTI LE CLASSI FUNZIONE GESTORE DI EVENTI ELEMENTI DEL LINGUAGGI è un vero e proprio linguaggio.
1 Eventi/2 Più movimento alle classi. 2 Eventi Java Modo per intercettare il verificarsi di certe condizioni / azioni e fare in modo che venga eseguito.
1 Grafica ed eventi/2 Più movimento alle classi. 2 Esercizio n.1 Realizzare una applicazione che permette il trascinamento di una ellissi allinterno di.
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 81 Gestione dei colori La gestione dei colori in AWT consente di specificare un qualunque.
Gestione dei Progetti Software 2 (a.a. 204/05) - Lezione 4 1 Il package java.awt Gestione dellI/O orientato alla grafica: le finestre Sviluppo di interfacce.
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
Corso di Informatica A.A
AA2003/04 © M.A. Alberti Programmazione Interfacce 1 Programmazione Corso di laurea in Informatica.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Sistemi Operativi GESTIONE DEI PROCESSI.
Windows Sistema operativo con interfaccia grafica per PC IBM compatibili (varie versioni dal 95) La gestione dei file viene fatta secondo le modalità.
Corso di PHP.
SARAH Shop Assistant in Reti Ad-Hoc Marco Montali.
Progetto di una architettura per lesecuzione distribuita e coordinata di azioni Progetto per lesame di Reti di Calcolatori L-S Prof. Antonio Corradi Finistauri.
Introduzione alla modellazione di sistemi interattivi
Concorrenza e Sincronizzazione di Thread e Processi
Strutture dati per insiemi disgiunti
Di Luca Santucci 5° Programmatori
Esercizi Swing.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Libreria standard.
Java gestione eventi introduzione. La gestione degli eventi Ci sono 3 oggetti interessati alla g. d. e.: L’oggetto interessato (event source) ad esempio.
LABVIEW Sommario Che cosa è uno strumento virtuale (VI) creato con LABVIEW Parti di un VI: pannello frontale diagramma a blocchi Confronto tra il principio.
JavaScript Generalità Cos'è JavaScript?
© 2012 Microsoft Corporation. Tutti i diritti sono riservati. Pianificare una riunione Lync È possibile pianificare una riunione Lync tramite il componente.
Programmazione ad oggetti
Programmazione ad oggetti
Interfacce grafiche Capitolo 27 marzo 2004 Interfacce grafiche.
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 4 - Progettazione del software Ernesto Damiani Università degli Studi.
PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Marzo 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.
Realizzare controlli Antonio Cisternino. L’esperienza del bottone  Il progetto Bottone (vedere bottone.zip) ci ha consentito di analizzare la struttura.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
MUSE 2 WIFI MUSic Everywhere with WIFI presentazione di Pierangeli Diego Membri del gruppo: Bambini Stefano Bergamini Andrea Pierangeli Diego AA 2006/2007.
Corso di Laboratorio primo modulo Introduzione all'uso di un sistema operativo. Introduzione all'uso della shell (bash). Java – –Introduzione – –Tipi di.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
Costruzione di Interfacce
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Reti di Calcolatori LS - Fabio Poli 15 Giugno 2006 Sviluppo di un player di Campo Minato multigiocatore con supporto di Chat MultiCast.
Mots, programmazione collaborativa di Ettore Ferranti.
La Programmazione ad Oggetti
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
1 Il livello transport. Concetti fondamentali - Canale logico e canale fisico 2 Quando un segnale deve essere trasmesso, viene inviato su un Canale, cioè.
+ Geolocalizzazione Nicolò Sordoni. + Servizi di localizzazione In Windows Phone, la posizione dell’utente può essere rilevata in 3 differenti modi: GPS:
Corso di programmazione di sistemi mobile 1 1 Android Activity, View e Layout.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Le modalità attraverso le quali gli utenti interagiscono con il computer A cura di Eleonora Bilotta.
Transcript della presentazione:

La gestione degli eventi Antonio Cisternino

Programmazione ad Eventi Come abbiamo visto dagli esempi esiste un pattern comune ai vari sistemi per la gestione degli eventi La gestione degli eventi nelle interfacce si articola in: Gestione degli eventi all’interno dell’applicazione Gestione degli eventi del gestore dell’interfaccia grafica

Delegate Event Model Questo modello, inizialmente introdotto da Java 1.1, è ormai quello più diffuso nei framework di programmazione di GUI Il modello prevede: Una sorgente degli eventi (es. il bottone) I consumatori degli eventi Delle interfacce (un modo di comunicazione concordato tra il produttore e il consumatore)

Schema di funzionamento Consumatori registrati Sorgente Eventi (es. Button) Listeners (interfaccia richiesta dalla sorgente)

Il pattern in Java Il delegate event model può essere implementato in vari linguaggi In Java è realizzato utilizzando: Convenzione sui nomi dei metodi per registrare consumatori presso la sorgente (addXXXListener(XXXListener l)) Interfaccia che la sorgente usa per comunicare l’evento (XXXListener) Invocazione dell’evento: la sorgente invoca uno dei metodi dell’interfaccia XXXListener

Chi fa cosa Produttore di eventi: Consumatore di eventi addXXXListener removeXXXListener Definisce una classe XXXEvent Definisce l’interfaccia XXXListener Consumatore di eventi Implementa l’interfaccia XXXListener Si registra presso il produttore

Il punto di vista dei controlli Il delegate event model, ideale per chi usa controlli, presenta problemi nella gestione degli eventi dei controlli Come si fa a rendere “trasparente”un controllo ad un evento? Ad esempio: il click su una label potrebbe convenire che sia notificato alla finestra che lo contiene

Propagazione degli eventi Il bubbling di un evento si ha quando viene passato al contenitore di chi lo ha ricevuto In questo modo si possono implementare i comportamenti di default Si possono anche gestire in modo centralizzato eventi di un controllo composto da finestre

Tunneling Framework come WPF (aka Avalon) supportano anche il flusso in direzione inversa al bubbling degli eventi: il tunneling Questo flusso (solitamente seguito dal bubbling) offre la possibilità al contenitore di un controllo di gestire un evento prima che arrivi al figlio Il gestore dell’interfaccia decide, per ogni tipo evento, se è diretto, se fa uso di bubbling, o tunneling e bubbling

Implementiamo il bubbling Nei linguaggi orientati ad oggetti il bubbling viene facilmente scaricato sulla gerarchia dell’ereditarietà Nei framework OO normalmente tutti I componenti grafici ereditano da una classe base, ad esempio Component Dalla classe base tutti i componenti ereditano (direttamente o meno) un metodo deputato alla gestione degli eventi Il componente vede passare tutti gli eventi a lui diretti, e può gestirli localmente o delegare

Un esempio Java, nella sua prima versione (fino alla versione 1.0.2) aveva un modello di gestione degli eventi come OWL (Borland) e MFC (Microsoft) basato su bubbling La possibilità di invocare il metodo della superclasse consente di delegare la gestione di un evento non gestito (o solo parzialmente gestito) Il dispatch e la classificazione degli eventi viene tipicamente incapsulato da metodi invocati dal metodo che gestisce gli eventi, inclusa la delega

Java AWT Event Model class Component { int x, y; bool handleEvent(Event e); } class Button extends Component { String text; bool handleEvent() { } … class Window extends Component class Frame extends Window

Event handling class MyButton extends Button { boolean handleEvent(Event e) { switch (e.type) { case Event.MOUSE_UP: … return true; // Event handled! } default: return super.handleEvent(e); }}

Dal bubbling alla delegation I controlli, nella gestione degli eventi, possono implementare l’interfaccia necessaria per essere una sorgente di eventi Per fare questo si possono intercettare gli eventi, ed invocare il metodo dei consumatori registrati La delegation migliora le performance: la gestione degli eventi non necessita l’introduzione di nuove classi

L’event loop Chi invoca gli event handler? Un thread dell’applicazione spende una porzione significativa del suo tempo nell’event loop L’event loop ha la seguente struttura: while (m=PickMessage()) DispatchMessage(m) Un qualche metodo (più o meno nascosto) esegue questo ciclo

L’event loop Normalmente l’event-loop viene incapsulato in qualche classe (Application.Run per .NET, SwingUtilities.invokeLater in Java) La funzione di dispatch del messaggio si occupa di inoltrare il messaggio al componente dell’applicazione interessato Questo innesca il meccanismo di chiamate che poi va a chiamare gli event handler definiti dall’applicazione

Thread or threads? Quanti thread gestiscono l’event loop? A dispetto dell’apparente concorrenza degli eventi il thread della UI è uno Se un event handler lo blocca l’intera interfaccia dell’applicazione smette di funzionare Se quindi è necessario intraprendere un qualche lavoro significativo è bene avviare un thread nell’event handler a cui delegare il compito

Troviamo il colpevole Come fa il gestore dell’interfaccia a individuare il destinatario di un evento? Input da tastiera: il controllo che ha il focus riceve il messaggio Spesso il focus si ottiene evidenziando il controllo Usando il tab è possibile spostare il focus su altri controlli La pick correlation consiste nell’associare un evento del puntatore con il controllo a cui è diretto

Pick Correlation Come facciamo a sapere quale controllo deve ricevere gli eventi del puntatore? Abbiamo a disposizione le coordinate del punto (x, y), ma non sono sufficienti! Siamo tutti abituati a sovrapporre finestre: qual’è quella visibile? Il gestore dell’interfaccia organizza in modo appropriato le finestre e per ciascuna ricorda lo z-index ovvero un indice che indica l’ordinamento lungo l’asse Z

Finestre e Z-Ordering La struttura dati primitiva delle interfacce grafiche (fino ad oggi…) è la finestra: un’area rettangolare dello schermo Tutti i controlli non sono altro che finestre specializzate Per trovare a quale finestra corrisponde un punto (x, y) sullo schermo è necessario trovare tutte le finestre che lo contengono tra queste prendere quella con z-index più alto Le finestre sono organizzate in un albero che consenta l’implementazione della ricerca in modo più efficiente (sfruttando il contenimento)

Usare Spy++ Spy++ è un tool Microsoft (ne esistono analoghi per X-Windows) che consente di monitorare gli eventi diretti a finestre È anche possibile analizzare la struttura di un’applicazione in termini di finestre

Osserviamo gli eventi Se abilitiamo il log degli eventi su un bottone della calcolatrice notiamo che: Gli eventi di paint arrivano in momenti inattesi Ci sono molti tipi di eventi Se invece facciamo il log della finestra vediamo in azione il bubbling: alcuni eventi sui figli sono inviati anche al padre