introduzione - dsi.unive.itmp/slides/01intro.pdf · 4 versioni di javatm 1.6 2006 aggiornamento...
TRANSCRIPT
![Page 1: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/1.jpg)
1
Introduzione
Contenuti del corso
• Programmazione ad OggettiOggetti, polimorfismo, ereditarieta
• Metodologie di progettoAstrazione ed incapsulamento (encapsulation)Contratti e invariantiAsserzioni e documentazione
• Programmazione ad EventiInterfacce grafiche
• Programmazione di strutture datiCollections e streams
Contenuti – dettaglio
1. Introduzione: oggetti, e introduzione alla programmazione grafica2. Definizione di classi e progetto di semplici applicazioni grafiche3. Tipi di dato fondamentali: stringhe, array, arraylists4. Progetto di classi: packages, pre/post condizioni, invarianti
asserzioni, design,by contract.5. Interfacce e polimorfismo , progetto di applicazioni grafiche interattive6. Ereditarietà7. Streams, eccezioni8. Programmazione ad eventi e interfacce grafiche9. Un caso di studio: Automatic Teller Machine 10. Programmazione parametrica: generics e strutture dati11. Il framework Collection di Java12. C# e la piattaforma .net / Design patterns
![Page 2: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/2.jpg)
2
Libri di testo
• Metodologie di progetto OOObject Oriented Software Development using in Java (II Edition)Xiaoping Jia. Pearson Education, 2002
• JavaJava Concepts (V Edition)Cay Horstmann. Wiley & Sons, 2008….
Esame
• Esercitazioni e progetticonsegna durante il corsodiscussione orale
• Scrittosolo per chi consegna le esercitazioni
MP on-line
• Informazioni e news sulla pagina web del corso
http://www.dsi.unive.it/~mp
• Consegna esercitazioniAutomatica (servizio in corso di attivazione)
![Page 3: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/3.jpg)
3
JavaTM
L’ambiente diprogrammazione
JavaTM
• Alto livelloNo puntatori, no gestione esplicita dellamemoria (free/malloc)
• EspressivoFacilmente estendibile con nuovi tipi di dato, ricca collezione di tipi nelle librerie
• Portabile: bytecode eseguibile su JVM
• Robustocontrollo dei tipi forte, analisi di sicurezza
JavaTM – nato per la rete
![Page 4: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/4.jpg)
4
Versioni di JavaTM
Aggiornamento delle Librerie20061.6
Generics, auto-boxing, for loops20051.5
Asserzioni20021.4
Nuovo compilatore20001.3
Swing e Collections19981.2
Classi interne19971.1
Prima versione19961.0
NovitàAnnoVersione
La piattaforma JavaTM
Compilazione ed Esecuzione
A.java A.class
BytecodeSorgente
![Page 5: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/5.jpg)
5
Una vecchia conoscenza . . .
1: public class HelloTester2: { 3: public static void main(String[] args) 4: { 5: // Scrivi in output un saluto6:7: System.out.println("Hello, World!"); 8: } 9: }
Il cuore del programma
• Una chiamata di metodo
Compilazione ed esecuzione
• Compilazionejavac HelloTester.java
• Se ha successo crea il fileHelloTester.class
• Esecuzionejava HelloTester.class
• OutputHello World!
![Page 6: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/6.jpg)
6
JVM – Java Virtual Machine
• Una macchina astratta: esegue codice intermedio (bytecode)specifica (istruzioni, registri, heap,…) indipendente dall’architettura sottostante
• Indipendente dal sistema operativo
• Presente nei browser più diffusi
• Implementazioni specifiche per smart card, palmari, cellulari (KVM) …
Java Virtual Machine• CLASS LOADER
carica in memoria tutte le classinecessarie al programma (anchequelle delle librerie usate)
• BYTECODE VERIFIERControlla l’integrità degli accessi in memoria, verifica l’aderenza allaspecifica della JVM, …
• SECURITY MANAGERverifica la sicurezza delle classicaricate a run time, controlla gliaccessi ai file, …
JVM
Security Manager
Bytecode Verifier
Class Loader
Interpreter
JAVAIL LINGUAGGIO
![Page 7: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/7.jpg)
7
Tipi e variabili• Ogni valore nel linguaggio ha un tipo
• Ogni variabile deve essere dichiarata edassociata ad un tipo:
• Il tipo determina quali sono le operazionilegali sui valori (e le variabili)
• Variabili di un tipo possono solo assumerevalori di quel tipo
String greeting = "Hello, World!";PrintStream printer = System.out;int luckyNumber = 13;
Operatore di assegnamento
• =
• Modifica il valore delle variabiliint luckyNumber = 13; // inizializzazioneluckyNumber = 12; // assegnamento
Oggetti
• Entità manipolabili all’interno di un programma (mediante i metodi)
• Di un oggetto non necessariamenteconosciamo la struttura interna
• La cosa importante è che l’oggetto abbia un comportamento ben definito
una interfaccia verso l’esterno ben definita
• È tutto quello che ci serve per utilizzarel’oggetto
![Page 8: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/8.jpg)
8
Programmazione procedurale
• Scopo: trovare la sequenza di passi che risolve il problema
• Incentrata sulla ricerca dell’algoritmo risolutivo
Programmazione ad oggetti
• Identifica gli oggetti del sistema e ne definisce struttura interna e interfaccia
• Coordina le interazioni tra oggetti, basandosi sulle interfacce
? ?
?
Classi e oggetti
• Ogni oggetto appartiene ad una classe. • Ad esempio System.out appartiene alla
classe PrintStream
![Page 9: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/9.jpg)
9
Metodi• Codice che permette di accedere ai dati di un
oggetto
• I dati / lo stato di un oggetto sono accessibilisolo attraverso i metodi dell’oggetto
• La classe definisce i metodi dei suoi oggetti
• Interfaccia pubblica: specifica quali sono i metodi invocabili sugli oggetti della classe
Continua…
Due oggetti di tipo String
Metodi della classe String
• length: conta il numero di caratteri dellastringa
Continua…
String greeting = "Hello, World!";
int n = greeting.length(); // n = 13
Oggetto Metodo
![Page 10: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/10.jpg)
10
Metodi della classe String
• toUpperCase: crea un altro oggetto di tipoString che contiene i caratteri della stringaoriginaria, ma convertiti in maiuscolo
Continua…
String fiume = "Mississippi";String fiumeInUpperCase = fiume.toUpperCase(); // fiumeInUpperCase = "MISSISSIPPI"
Metodi della classe String
• L’invocazione di un metodo su un oggetto èlegale solo se il metodo è parte dell’interfaccia pubblica della classe a cui l’oggetto appartiene
System.out.length(); // ERRORE
Oggetti di classe Rectangle
• Definita nella libreria java.awt
• Descrivono un rettangolo posizionato ad unadata coordinata sul piano
(x,y) = origine: angolo in alto a sinistra
![Page 11: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/11.jpg)
11
Costruttori
• Il costrutto new costruisce un nuovo oggettodi tipo rettangolo
• Usa i parametri (5, 10, 20, e 30) per inizializzare I dati dell’oggetto
• Restituisce un riferimento all’oggetto
• Tipicamente il risultato viene assegnato ad una variabile
Rectangle box = new Rectangle(5, 10, 20, 30);
new Rectangle(5, 10, 20, 30)
Costruttori
• Una classe può fornire più di un costruttore(sempre con lo stesso nome) all’interno dellastessa classe
• fornisce diverse modalità di creazione dioggetti
new Rectangle()// costruisce un rettangolo con origine (0,0)// larghezza 0, e altezza zero 0
Sintassi: new
new ClassName(parameters)
Esempio:new Rectangle(5, 10, 20, 30)new Rectangle()
• Costruisce un nuovo oggetto, inizializza lo stato con i parametri, e restituisce un riferimento all’oggetto costruito.
![Page 12: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/12.jpg)
12
Metodi della classe Rectangle
• getWidth: restituisce il valore che corrispondealla base del rettangolo
• translate: modifica l’oggetto su cui vieneinvocato modificando le coordinate dellaposizione
• Mutators: metodi con side effectsContinua…
box.translate(15, 25);
Metodi e side-effects
box.translate(15, 25);
Parametri espliciti e impliciti• Parametri = dati in input per i metodi
• Non tutti i metodi hanno parametri
• Tutti i metodi hanno un parametro implicito: l’oggetto su cui il metodo viene invocato
Continua…
System.out.println(greeting) greeting.length() // no parametri espliciti
System.out.println(greeting)
![Page 13: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/13.jpg)
13
Parametri espliciti e impliciti
“Hello, World” è un parametro passato al metodo println
Parametri espliciti e impliciti
• Replace: ancora un metodo su stringhe
• Parametri:Uno implicito: "Mississippi"Due espliciti: "issipp" e "our"
• Risultato: "Missouri"
Continua…
fiume.replace("issipp", "our");
Parametri espliciti e impliciti
![Page 14: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/14.jpg)
14
Definizione di metodi
• La definizione di un metodo specificai parametri espliciti con i loro tipiil tipo del risultato
• Il tipo del parametro implicito non vienespecificato
è la classe di cui la definizione di metodo faparte
Continua…
Definizione di metodi• I metodi che non restituiscono valori sono dichiarativoid
• Overloading:Un nome di metodo si può usare in più definizioniSe le definizioni sono nella stessa classe diciamo cheil nome è overloaded Le versioni di un metodo overloaded devono avereparametri diversi
public void println(String output) // classe PrintStream
public void println(String output)public void println(int output)
Oggetti e riferimenti
• Un riferimento è una astrazione del puntatoread un oggetto
• L’operatore new restituice un riferimento ad un nuovo oggetto
• Diverse variabili di tipo oggetto possonocondividere lo stesso riferimentoRectangle box = new Rectangle(5, 10, 20, 30);Rectangle box2 = box;box2.translate(15, 25);
Rectangle box = new Rectangle();
Continua…
![Page 15: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/15.jpg)
15
Riferimenti ad oggetti
• Il comportamento delle variabili varia rispettoal loro tipo.
• In particolare le variabili di tipo primitivo sicomportano in modo diverso rispetto allevariabili di tipo oggetto
• Le differenze si manifestano negli effettidell’istruzione di assegnamento
Variabili di tipo primitivo
Contengono valori del loro tipo
Variabili di tipo oggetto
Contengono riferimenti ad oggetti, non oggetti
![Page 16: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/16.jpg)
16
Assegnamento su tipi primitivi• int luckyNumber = 13;
int luckyNumber2 = luckyNumber;luckyNumber2 = 12;
Due variabili, due valori distinti
Assegnamento su tipi oggetto• Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box2 = box;box2.translate(15, 25);
Continua…
Assegnamento su tipi oggetto
Due variabili, stessoriferimento
![Page 17: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/17.jpg)
17
Classi test
Ovvero: come eseguire il test di una classe
• Definisci una nuova classe• Definisci un metodo main
• All’interno del main costruisci uno o piùoggetti delle classi da testare
• Invoca i metodi su tali oggetti
• Stampa i risultati
File MoveTester.java01: import java.awt.Rectangle;02:03: public class MoveTester04: {05: public static void main(String[] args)06: {07: Rectangle box = new Rectangle(5, 10, 20, 30);08:09: // Sposta il rettangolo10: box.translate(15, 25);11:12: // Stampa nuove info13: System.out.println(“Origine dopo la traslazione:”); 14: System.out.println(box.getX());15: System.out.println(box.getY());16: }17: }
Classi di libreria
• Sempre includere le classi di libreriautilizzate dall’applicazione
classi delle librerie raggruppate in packages
Importiamo le classi specificando i nomi dipackage e di classe
Le classi del package java.lang (ad esempio String e System)sono importateautomaticamente
import java.awt.Rectangle;
![Page 18: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/18.jpg)
18
Sintassi: import
import packageName.ClassName;
Esempio:import java.awt.Rectangle; // importa la classe Rectangle
import packageName.*;
Esempio:import java.util.*; // importa tutte le classi del package
Documentazione sulle API
• API: Application Programming Interface
• Include la descrizione delle classi e dei relativimetodi della (fornitissima!) libreria Java
• http://java.sun.com/j2se/1.5/docs/api/index.html
• http://java.sun.com/j2se/1.6/docs/api/index.html
Documentazione sulle API
![Page 19: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/19.jpg)
19
La API della classe Rectangle
Javadoc Method Summary
Documentazione del metodo translate
![Page 20: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/20.jpg)
20
Elementi diprogrammazione grafica
Contenuti
• Introduzione alle applicazione di graficacontesto graficiforme geometriche elementaricolori“input dialogs” per ottenere input dall’utente
• Frames e applets
Frames• La classe JFrame
• import javax.swing.*;
JFrame frame = new JFrame();frame.setSize(300, 400);frame.setTitle(“Un frame vuoto");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);
![Page 21: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/21.jpg)
21
Frames
File EmptyFrameViewer.java01: import javax.swing.*;02:03: class EmptyFrameViewer04: {05: public static void main(String[] args)06: {07: JFrame frame = new JFrame();08:09: final int FRAME_WIDTH = 300;10: final int FRAME_HEIGHT = 400;11:12: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);13: frame.setTitle(“Un frame vuoto");14: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);15:16: frame.setVisible(true);17: }18: }
Disegno di forme geometriche• JComponent
La classe che definisce contenitorigenerici, al al cui interno includiamoforme geometriche
• Figure geometriche incluse in nuoviJComponentclass ShapeComponent extends JComponent{. . .}
![Page 22: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/22.jpg)
22
Disegno di forme geometriche• paintComponent
il metodo invocato (automaticamente) tutte le volte che il componente per il quale e` definitoviene ridisegnatoè in questo metodo che si produce il disegno
class ShapeComponent extends JComponent{
public void paintComponent(Graphics g){
// Converti in Graphics2DGraphics2D g2 = (Graphics2D) g;. . .
}}
Disegno di forme geometriche
• Graphics classe che permette di manipolare lo stato della componente grafica(posizione/colore corrente)
• Graphics2D classe con metodi per la creazione e il disegno di figure geometriche
• Usa un cast per ottenere un oggetto di tipoGraphics2D dal parametro di tipo Graphics
• package java.awt
Rectangle r = new Rectangle(5, 10, 20, 30);g2.draw(rect);
File ShapeComponent.java01: import java.awt.Graphics;02: import java.awt.Graphics2D;03: import java.awt.Rectangle;04: import javax.swing.JPanel;05: import javax.swing.JComponent;06:07: /**08: Un Component che disegna due rettangoli.09: */10: class ShapeComponent extends JComponent11: { 12: public void paintComponent(Graphics g)13: { 14: // Ottieni un graphics2D15: Graphics2D g2 = (Graphics2D) g;16:
Continua…
![Page 23: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/23.jpg)
23
File ShapeComponent.java
17: // Costruisci un rettangolo e disegna18: Rectangle r = new Rectangle(5, 10, 20, 30);19: g2.draw(r);20:21: // Trasla il rettangolo (15 a dx, 25 in basso) 22: r.translate(15, 25);23:24: // Disegna il rettangolo traslato25: g2.draw(r);26: }27: }
Applicazioni
• ShapeViewer
classe che lancia una finestra all’interno dellaquale vengono raffigurate Ie componentiL’applicazione è costruita interamenteall’interno del metodo main della classeDisegna due rettangoli
Continua…
Applicazione ShapeViewer
![Page 24: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/24.jpg)
24
Il metodo main
1. Costruisci il frame2. Costruisci un oggetto della classe component
3. Aggiunti il component al frame
La chiamata è leggermente più complicata per versioni di Java precedenti alla 5:
4. Rendi visibile il frame
ShapeComponent component = new ShapeComponent();
frame.add(component);
frame.getContentPane().add(component);
File ShapeViewer.java
01: import javax.swing.JFrame;02:03: class ShapeViewer04: {05: public static void main(String[] args)06: {07: JFrame frame = new JFrame();08:09: final int FRAME_WIDTH = 300;10: final int FRAME_HEIGHT = 400;11: 12: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);13: frame.setTitle(“Due rettangoli");14: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);15:
Continua…
File ShapeViewer.java
16: ShapeComponent component = new ShapeComponent();17: frame.add(component);18:19: frame.setVisible(true);20: }21: }
![Page 25: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/25.jpg)
25
Applets
• Applets sono applicazioni eseguiteall’interno di un browser
• L’implementazione di un Applet utilizza ilpattern seguente: public class MyApplet extends JApplet{
public void paint(Graphics g){
// Ottieni un contesto graficoGraphics2D g2 = (Graphics2D) g;// Istruzioni per il disegno. . .
}}
Applets
• La struttura è molto simile a quella di un JComponent, con due differenze: 1. Estendiamo JApplet, invece di
JComponent
2. IL codice del disegno è parte del metodopaint, invece che del metodopaintComponent
• Per eseguire un applet, dobbiamo creare un file HTML ed inserire il codice che lancial’applet mediante la tag applet
Applets
• Un file HTML può avere diversi applets, ciascuno dei quali introdotto da unacorrispondente tag (di tipo applet)
• Un applet può essere lanciato mediantel’appletviewer, o all’interno di un browser in cui Java sia stato abilitato.
appletviewer RectangleApplet.html
![Page 26: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/26.jpg)
26
File ShapeApplet.java
01: import java.awt.Graphics;02: import java.awt.Graphics2D;03: import java.awt.Rectangle;04: import javax.swing.JApplet;05:06: /**07: Un applet che disegna due rettangoli.08: */09: public class ShapeApplet extends JApplet10: { 11: public void paint(Graphics g)12: { 13: // Ottieni un contesto grafico14: Graphics2D g2 = (Graphics2D) g;
Continua…
File ShapeApplet.java
17: // Costruisci un rettangolo e disegna18: Rectangle r = new Rectangle(5, 10, 20, 30);19: g2.draw(r);20:21: // Trasla il rettangolo (15 a dx, 25 in basso) 22: r.translate(15, 25);23:24: // Disegna il rettangolo traslato25: g2.draw(r);26: }27: }
File ShapeAppletViewer.html
<html> <head>
<title>Due rettangoli</title> </head> <body>
<p>Here’s my first applet:</p> <applet code="RectangleApplet.class" width="300" height="400"></applet>
</body></html>
![Page 27: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/27.jpg)
27
Applets
Forme Geometriche
• Rectangle, Ellipse2D.Double,Line2D.Double fornite dal package java.awt
• Alcune di queste classi, e.g. Line2D.Double, sono interne. Per il momento ignoriamo questoaspetto, ma notiamo la dichiarazione import
• Per disegnare una forma dobbiamo costruirla e disegnarlaEllipse2D.Double e = new Ellipse2D.Double(x, y, width, height);g2.draw(e);
import java.awt.geom.Ellipse2D; // no .Double
Una ellisse e la sua bounding box
![Page 28: Introduzione - dsi.unive.itmp/Slides/01intro.pdf · 4 Versioni di JavaTM 1.6 2006 Aggiornamento delle Librerie 1.5 2005 Generics, auto-boxing, for loops 1.4 2002 Asserzioni 1.3 2000](https://reader034.vdocuments.site/reader034/viewer/2022042305/5ed055923a066a18461b5f76/html5/thumbnails/28.jpg)
28
Linee
• Due modi per disegnare una linea:
oppure,
Line2D.Double segmento = new Line2D.Double(x1, y1, x2, y2);
Point2D.Double from = new Point2D.Double(x1, y1);Point2D.Double to = new Point2D.Double(x2, y2);Line2D.Double segmento = new Line2D.Double(from, to);
Stringhe
g2.drawString("Message", 50, 100);
Colori
• Colori standard Color.BLUE, Color.RED, …
• Nuovi colori: formato rgb settando i valori dellecomponenti red, green, blue tra 0.0F e 1.0F
• setColor setta il colore del Graphic Contexts
• Usa il colore con i metodi draw e fill
g2.setColor(magenta);
g2.fill(rectangle); // riempito con il colore corrente
Color magenta = new Color(1.0F,0.0F,1.0F), // F = float