Programmazione Orientata agli Oggetti in Linguaggio Java Sommario

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