18/02/2005 Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Grafica: Introduzione versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca – Università della Basilicata – [email protected] Programmazione Grafica: Introduzione >> Sommario Sommario m Panoramica m Un Pò di Storia m Caratteristiche di Swing m Progetti di Riferimento G. Mecca - Programmazione Orientata agli Oggetti 2 1 18/02/2005 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Finora ðprogrammazione con la console ðragionevole solo in un contesto didattico m Nelle applicazioni industriali ðdue tecnologie principali per l’interfaccia utente ðinterfaccia Web (HTML) (>>) ðinterfaccia grafica G. Mecca - Programmazione Orientata agli Oggetti 3 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Graphical User Interface (GUI) ðinterfaccia utente grafica disegnata sullo schermo (“desktop”) ðall’interno di finestre ðcon cui l’utente può interagire attraverso il mouse ðutilizzando tipici componenti (o “controlli”) grafici come menu, bottoni ecc. ðoppure disegnando o visualizzando immagini G. Mecca - Programmazione Orientata agli Oggetti 4 2 18/02/2005 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Funzionalità rilevanti per il programmatore ðdisegno di linee e punti sullo schermo (funzionalità di base) utilizzata per il disegno delle finestre e dei componenti oppure per le animazioni ðutilizzo di componenti predefiniti per costruire l’interfaccia utente delle applicazioni (menu, bottoni, icone) ð“catturare” e gestire le azioni dell’utente G. Mecca - Programmazione Orientata agli Oggetti 5 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Nei linguaggi tradizionali (es: C/C+) ðil linguaggio non fornisce funzionalità per la programmazione grafica ðè possibile utilizzare librerie esterne appositamente sviluppate m Una possibile soluzione ðutilizzare la libreria grafica fornita dal sistema operativo G. Mecca - Programmazione Orientata agli Oggetti 6 3 18/02/2005 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Infatti ðogni sistema operativo ha una sua libreria per la programmazione grafica ðnecessaria per lo sviluppo dell’interfaccia utente del sistema (desktop) m Esempio ðin Windows: Win32 API (per il C) ðin Linux: X11 (XLib) (per il C) G. Mecca - Programmazione Orientata agli Oggetti 7 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Caratteristiche tipiche di queste librerie ðsono relativamente di basso livello (quasi sempre basate sul C) ðnon sono portabili ðsono pensate per essere efficienti ðsono centrate attorno ad un componente fondamentale ðil Window Manager G. Mecca - Programmazione Orientata agli Oggetti 8 4 18/02/2005 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Window Manager ðcomponente responsabile del disegno delle finestre sullo schermo ðconsente le operazioni tipiche sulle finestre ðcreazione, distruzione, riduzione a icona, ridimensionamento, trascinamento, sovrapposizione, “rinfresco” ðgestisce i movimenti del mouse 9 G. Mecca - Programmazione Orientata agli Oggetti Programmazione Grafica: Introduzione >> Panoramica Panoramica m Schiacciare un bottone: processo tipico ðla libreria di sistema disegna attraverso linee e punti sullo schermo il bottone ðl’utente seleziona il bottone con il mouse e schiaccia il tasto sinistro ðil Window manager intercetta il gesto dell’utente e ridisegna il bottone ðil Window manager segnala all’applicazione l’evento che si è verificato G. Mecca - Programmazione Orientata agli Oggetti 10 5 18/02/2005 Programmazione Grafica: Introduzione >> Panoramica Panoramica Sistema Operativo gesto dell’utente evento segnalato all’applicazione Applicazione Login X nome utente password Invia Cancella Start “sorgente” dell’evento azione applicativa “gestore” dell’evento G. Mecca - Programmazione Orientata agli Oggetti 11 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Programmare con la libreria del S.O. ðnormalmente è molto complesso m Per semplificare la programmazione ðvengono sviluppati “toolkit” aggiuntivi m Toolkit grafico ðlibreria che consente il disegno dei componenti (menu, icone, bottoni, testo ecc.) ðpensata per essere più ad alto livello rispetto alla libreria di sistema (detta “toolkit nativo”) G. Mecca - Programmazione Orientata agli Oggetti 12 6 18/02/2005 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Esempi di toolkit grafici ðWindows: Microsoft Foundation Cl. (MFC) ðLinux: Motif, GTK, QT... Applicazione Toolkit (es: GTK) Window manager (es: X) API grafica (es: XLib) “toolkit nativo” Sistema Operativo (es: Linux) G. Mecca - Programmazione Orientata agli Oggetti 13 Programmazione Grafica: Introduzione >> Panoramica Panoramica m Le piattaforme moderne (Java/.NET) ðc’è l’esigenza di svincolare lo sviluppo delle applicazioni grafiche dalle librerie di sistema ðdal momento che il codice viene eseguito da una macchina virtuale e non dal processore ðdi conseguenza queste piattaforme hanno un proprio toolkit grafico m Il toolkit grafico di Java ðSwing/JFC G. Mecca - Programmazione Orientata agli Oggetti 14 7 18/02/2005 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Programmazione grafica in Java ðsi è evoluta attraversando varie fasi m Il problema centrale ðrispettare il motto di Java: “write one, run anywhere” ðovvero l’indipendenza dalla piattaforma e dalle diverse librerie di sistema G. Mecca - Programmazione Orientata agli Oggetti 15 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Java 1.0: Abstract Windowing Toolkit ðil package java.awt: primo toolkit di Java ðtipico approccio Java: il package “incapsula” l’API del sistema operativo sottostante ðper ogni elemento grafico tipico (es: bottone) c’è una classe awt (es: java.awt.Button) ðle operazioni di disegno del bottone sono rimandate al corrispondente elemento bottone della libreria nativa detto “peer” (es: bottone Windows o bottone XLib) G. Mecca - Programmazione Orientata agli Oggetti 16 8 18/02/2005 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Vantaggio di questo approccio ðmolto veloce perchè sfrutta su ogni sistema la libreria nativa m Svantaggio ðle librerie di sistema sono troppo diverse ðproblema di “minimo comune denominatore” ðla resa grafica era inaffidabile (bachi diversi) ð“write once, debug anywhere” G. Mecca - Programmazione Orientata agli Oggetti 17 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Java 1.1 ðriorganizza completamente la gestione degli eventi introducendo il package java.awt.event m Nel 1996 ðNetscape rilascia la libreria IFC (“Internet Foundation Classes”) ðpensata per lo sviluppo di applicazioni ricche in ambiente Web ðindipendente dalla piattaforma G. Mecca - Programmazione Orientata agli Oggetti 18 9 18/02/2005 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Java 2: Swing (javax.swing) ðuna nuova libreria grafica ispirata a IFC m Idea ðle finestre sono gli unici componenti affidati alla piattaforma nativa (Window manager) ðper ottenere una reale indipendenza dalla libreria nativa, tutti gli altri componenti sono disegnati in finestre vuote utilizzando linee e punti G. Mecca - Programmazione Orientata agli Oggetti 19 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Vantaggi di questo approccio ðconsente una reale portabilità delle applicazioni ðtutte le API native supportano il disegno di linee e punti e lo fanno correttamente m Svantaggio di questo approccio ðpiù lento ðSwing stenta a decollare perchè inizialmente troppo lento G. Mecca - Programmazione Orientata agli Oggetti 20 10 18/02/2005 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Versioni successive di Swing ðsignificativi miglioramenti nella versione 1.4 ðe successivamente nella 1.5 ðci riferiremo a queste versioni m Attualmente ðuna libreria molto completa e di ottime prestazioni (se adeguatamente utilizzata...) ðparte di un gruppo di package più ampio G. Mecca - Programmazione Orientata agli Oggetti 21 Programmazione Grafica: Introduzione >> Un Pò di Storia Un Pò di Storia m Java Foundation Classes (JFC) ðcollezione di package Java per la programmazione grafica ðcomponenti grafici Swing ðgestione degli eventi AWT ðJava 2D (API per il disegno in 2 dimensioni) ðAccessibility API ðDrag & Drop ðInternazionalizzazione G. Mecca - Programmazione Orientata agli Oggetti 22 11 18/02/2005 Programmazione Grafica: Introduzione >> Caratteristiche di Swing Caratteristiche di Swing m Swing ðuna tecnologia molto complessa m Alcune caratteristiche ðnumero molto alto di componenti ðfunzionalità avanzate di disegno ð“look & feel” variabile ðgestione sofisticata della disposizione (“layout”) ðgestione complessa degli eventi 23 G. Mecca - Programmazione Orientata agli Oggetti Programmazione Grafica: Introduzione >> Caratteristiche di Swing Caratteristiche di Swing m Un esempio ðSwingSet2 ðun’applicazione dimostrativa di Swing ðdistribuita con l’SDK di Java ðin demo/jfc/swingset2 ðjava –jar swingset2.jar >> SwingSet2 G. Mecca - Programmazione Orientata agli Oggetti 24 12 18/02/2005 Programmazione Grafica: Introduzione >> Caratteristiche di Swing Caratteristiche di Swing m I package di swing (17 in J2SE 1.5) ð javax.swing.plaf.multi ð javax.swing.plaf.synth ð javax.swing.table ð javax.swing.text ð javax.swing.text.html ð javax.swing.text.html.parser ð javax.swing.text.rtf ð javax.swing.tree ð javax.swing.undo ð javax.swing ð javax.swing.border ð javax.swing.colorchooser ð javax.swing.event ð javax.swing.filechooser ð javax.swing.plaf ð javax.swing.plaf.basic ð javax.swing.plaf.metal 25 G. Mecca - Programmazione Orientata agli Oggetti Programmazione Grafica: Introduzione >> Caratteristiche di Swing Caratteristiche di Swing m I Package di AWT (12) m ð java.awt ð java.awt.color ð java.awt.datatransfer ð java.awt.dnd ð java.awt.event ð java.awt.font ð java.awt.geom ð java.awt.im ð java.awt.im.spi ð java.awt.image ð java.awt.image.renderable ð java.awt.print G. Mecca - Programmazione Orientata agli Oggetti Altri package rilevanti ð javax.accessibility ð javax.print ð javax.print.attribute ð javax.print.attribute.standard ð javax.print.event ð java.applet ð javax.sound.midi ð javax.sound.midi.spi ð javax.sound.sampled ð javax.sound.sampled.spi 26 13 18/02/2005 Programmazione Grafica: Introduzione >> Caratteristiche di Swing Caratteristiche di Swing m Il ATTENZIONE alla difficoltà di Swing problema didattico connesso con Swing ðnotevole complessità tecnologica (libreria complessa e sofisticata tecnicamente) ðpresentare tutti i componenti è impossibile ðnotevole complessità concettuale (eventi, thread, classi interne...) ðnotevole complessità metodologica (gestione delle prestazioni, organizzazione del codice ...) G. Mecca - Programmazione Orientata agli Oggetti 27 Programmazione Grafica: Introduzione >> Caratteristiche di Swing Caratteristiche di Swing m Swing tutorial ðparte del tutorial di Java disponibile sul sito della Sun ðè possibile scaricarlo in formato .zip dall’URI http://java.sun.com/docs/books/tutorial/information/d ownload.html ðun riferimento fondamentale per il programmatore ðin particolare la sezione “How to...” G. Mecca - Programmazione Orientata agli Oggetti 28 14 18/02/2005 Programmazione Grafica: Introduzione >> Progetti di Riferimento Progetti di Riferimento m Alcune applicazioni già viste ðLa Morra Cinese ðIndovina il Numero m La nuova versione con Swing ðlogica applicativa sostanzialmente inalterata ðcambia significativamente lo strato di interfaccia e controllo >> morraCineseSwing >> indovinaIlNumeroSwing G. Mecca - Programmazione Orientata agli Oggetti 29 Programmazione Grafica: Introduzione >> Sommario Riassumendo m Panoramica m Un Pò di Storia m Caratteristiche di Swing m Progetti di Riferimento G. Mecca - Programmazione Orientata agli Oggetti 30 15 18/02/2005 Termini della Licenza Termini della Licenza m This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. G. Mecca - Programmazione Orientata agli Oggetti 31 16