Programmazione ad Oggetti AA 2011– 2012. Contenuti del corso Modulo A Tecniche di programmazione Docente: Prof. Michele Bugliesi Modulo B Tecniche di.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Unit à E4 Applet. Obiettivi Saper progettare e realizzare Applet Java allinterno di pagine HTML Comprendere le interazioni tra il browser e lapplet Saper.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Applet Java.
Università di camerino
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
Massa Laura Mela Enrica
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Semantica Operazionale di un frammento di Java: lo stato
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
Fondamenti di Informatica
S.I.S.S.I.S. Catania 2002/03 LE APPLET JAVA Prof. D. Cantone Amuso Raffaele.
Elementi di programmazione grafica
Elementi di programmazione grafica
Interfacce. Interfacce come strumento di progetto Scelta delle classi di un progetto Criteri di coesione e accoppiamento Interfacce e riuso di codice.
Programmazione ad Eventi
Applet Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Introduzione al linguaggio Java
Grafico di funzione Disegna la Matematica.
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.
Esercizi di grafica ….
Più movimento alle classi
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 dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Oggetti e dati primitivi
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
CAPITOLO 1 JAVA: UN TUFFO NEL LINGUAGGIO E NELL'AMBIENTE.
Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base.
Classi e Oggetti.
Contenuti del corso Programmazione ad Oggetti Oggetti, polimorfismo, ereditarieta Metodologie di progetto Astrazione ed incapsulamento ( encapsulation)
Programmazione con Interfacce
Capitolo 2 Utilizzare oggetti
Capitolo 3 Realizzare classi
Elaborazione di Franco Grivet Chin
Java base IV: Java e la programmazione O.O.
Argomenti della lezione
Programmazione in Java
Java Contardi Carlo A.S. 2008/09.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Java come linguaggio di programmazione
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Introduzione. Introduzione Un’applet Java: Una applet ("applicazioncina") è una applicazione non autonoma, ma pensata per far parte di una pagina Internet.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Programmazione ad oggetti
Introduzione a Javascript
Interfacce grafiche Capitolo 27 marzo 2004 Interfacce grafiche.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Timer Animazioni.
Capitolo 12 Thread Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Programmazione ad Oggetti AA 2011– 2012

Contenuti del corso Modulo A Tecniche di programmazione Docente: Prof. Michele Bugliesi Modulo B Tecniche di progetto Docente: Prof. Alessandro Roncato

1.Introduzione: tipi di dato, oggetti, classi e metodi 2.Progetto e implementazione di classi meccanismi di encapsulation 3.Interfacce ed ereditarietà polimorfismo 4.Programmazione parametrica strutture dati e classi collezione 5.Programmazione ad eventi Contenuti del corso – Modulo A

1.Design patterns 2.Casi di studio di progettazione 3.Esemi di implementazione Contenuti del corso – Modulo B

Libri di testo Java Concepts. Cay Horstmann. Wiley & Sons Disponibile anche in Italiano: Concetti di Informatica e Fondamenti di Java APOGEO Applying UML and patterns. Craig Larman. Pearson Education. Disponibile anche in Italiano

Slides del corso Disponibili on line Utili per prendere appunti a lezione NON sono un libro di testo NON sono sufficienti per preparare lesame

Valutazione Esame scritto (50%) Copre lintero programma (mod A + mod B) Progetto (30%) Individuale, in Java Dalla specifica funzionale allimplementazione Esercitazioni a casa (20%) Individuali

Il corso on-line Informazioni e news sulla pagina web

Java TM Lambiente di programmazione

Java TM Alto livello No puntatori, no gestione esplicita della memoria (free/malloc) Espressivo Facilmente estendibile con nuovi tipi di dato, ricca collezione di tipi nelle librerie Portabile: bytecode eseguibile su JVM Robusto controllo dei tipi forte, analisi di sicurezza

Java TM – nato per la rete

Versioni di Java TM VersioneAnnoNovità Prima versione Classi interne Swing e Collections Nuovo compilatore Asserzioni Generics, auto-boxing, for loops Aggiornamento delle Librerie Aggiornamenti Linguaggio, Librerie, VM

La piattaforma Java TM

Compilazione ed Esecuzione A.javaA.class BytecodeSorgente

Una vecchia conoscenza... 1: public class HelloWorld 2: { 3: public static void main(String[] args) 4: { 5: // Scrivi in output un saluto 6: 7: System.out.println("Hello, World!"); 8: } 9: }

Il cuore del programma Una chiamata di metodo

Compilazione ed esecuzione Compilazione javac HelloWorld.java Se ha successo crea il file HelloWorld.class Esecuzione java HelloWorld.class Output Hello World!

JVM – Java Virtual Machine Una macchina astratta: esegue codice intermedio (bytecode) specifica (istruzioni, registri, heap,…) indipendente dallarchitettura 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 classi necessarie al programma (anche quelle delle librerie usate) BYTECODE VERIFIER Controlla lintegrità degli accessi in memoria, verifica laderenza alla specifica della JVM, … SECURITY MANAGER verifica la sicurezza delle classi caricate a run time, controlla gli accessi ai file, … JVM Security Manager Bytecode Verifier Class Loader Interpreter

JAVA IL LINGUAGGIO

Tipi e variabili Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo: Il tipo determina quali sono le operazioni legali sui valori (e le variabili) Variabili di un tipo possono solo assumere valori di quel tipo String greeting = "Hello, World!"; PrintStream printer = System.out; int luckyNumber = 13;

Controllo dei tipi forte Il compilatore controlla che il programma rispetti strettamente tutte le regole controlla luso dei cast I programmi che superano i controlli del compilatore non causano errori nelle operazioni sui dati

Oggetti e classi OGGETTI Le strutture dati complesse di un programma in C: structs, unions e arrays In Java: oggetti (arrays inclusi) Generalizzazione delle struct di C campi: struttura dellggetto metodi: operazioni sui campi CLASSI Descrivono la struttura dei campi Definiscono limplementazione dei metodi Sono i tipi degli oggetti

Oggetti e classi Ogni oggetto appartiene ad una classe. un oggetto di classe PrintStream

Due oggetti di tipo String Ogni oggetto ha una copia privata dei suoi campi Tutti gli oggetti di una classe condividono lo stesso codice dei metodi campo

Oggetti di classe Rectangle Classe definita nella libreria java.awt Descrive la struttura di un rettangolo posizionato sul piano cartesiano (x,y) = posizione origine: angolo in alto a sinistra campi privati delloggetto

Costruttori Il costrutto new invoca il costruttore, per allocare nuovo oggetto di tipo Rectangle Il nome del costruttore coincide con il nome della classe Usa i parametri ( 5, 10, 20, e 30 ) per inizializzare i dati delloggetto Restituisce un riferimento alloggetto Rectangle box = new Rectangle(5, 10, 20, 30); new Rectangle(5, 10, 20, 30)

Costruttori Una classe può fornire più di un costruttore Overloading Diverse modalità di creazione di oggetti Rectangle box2 = new Rectangle() // costruisce un rettangolo con origine (0,0) // larghezza 0, e altezza zero 0 Rectangle box1 = new Rectangle(5, 10, 20, 30)

Sintassi: new Costruisce un nuovo oggetto, inizializza lo stato con i parametri, e restituisce un riferimento alloggetto costruito. new ClassName(parameters) Esempi: new Rectangle(5, 10, 20, 30) new Rectangle()

Metodi Realizzano le operazioni supportate dagli oggetti Definiti dalla classe Classe definisce limplementazione Descrive la firma visibile allesterno Invocazione Deve indicare loggetto target Continua… oggetto.metodo(argomenti)

Metodi della classe PrintStream

Metodi della classe String toUpperCase: crea un altro oggetto di tipo String che contiene i caratteri della stringa originaria, ma convertiti in maiuscolo Continua… String fiume = "Mississippi"; String fiumeInUpperCase = fiume.toUpperCase(); // fiumeInUpperCase = "MISSISSIPPI"

Metodi della classe String length(): conta il numero di caratteri della stringa String greeting = new String("Hello, World!); int n = greeting.length(); // n = 13 (new String(pippo)).toUpperCase() OggettoMetodo Oggetto Metodo

Domande Quale è la sequenza di istruzioni per calcolare la lunghezza della stringa Arcobaleno ? Quale è la sequenza di istruzioni per stampare la versione uppercase della stringa "Hello, World!" ? È legale la seguente sequenza di istruzioni? Perché o perché no? String fiume = "Mississippi"; fiume.println();

Risposte Non è legale: la variabile fiume ha tipo String e la classe String non definisce il metodo println() new String(Arcobaleno).length() System.out.println(Hello World.toUpperCase());

Controllo di tipi forte La classe di un oggetto definisce quali metodi si possono invocare sugli oggetti della classe Il compilatore controlla che le invocazioni rispettino la dichiarazione della classe System.out.length(); // ERRORE DI TIPO (COMPILE-TIME)

Controllo di tipi forte La classe di un oggetto definisce quali metodi si possono invocare sugli oggetti della classe I metodi di un oggetto sono lunico modo per agire sui campi delloggetto Rectangle box = new Rectangle(5,10,20,20). System.out.println(box.width); // ERRORE DI TIPO

Metodi della classe Rectangle getWidth(): restituisce il valore che corrisponde alla base del rettangolo Continua… Rectangle box = new Rectangle(5,10,20,20). System.out.println(box.width); // ERRORE DI TIPO System.out.println(box.getWidth()); // OK

Metodi della classe Rectangle Translate(): modifica loggetto su cui viene invocato, traslando di x a destra, e di y verso il basso Mutators : metodi con side effects per modificare i valori dei campi Continua… box.translate(x, y);

Metodi e side-effects box.translate(15, 25);

Oggetti e riferimenti Un riferimento è una astrazione del puntatore ad un oggetto La creazione di un oggetto con new restituice un riferimento al nuovo oggetto Diverse variabili di tipo oggetto possono condividere lo stesso riferimento Rectangle box = new Rectangle(5, 10, 20, 30); Rectangle box2 = box; Rectangle box = new Rectangle(); Continua…

Assegnamento Il comportamento delloperazione di assegnamento varia a seconda del tipo della variabile (e quindi del valore) coinvolto. Lassegnamento su variabili di tipo primitivo ha un effetto diverso dallassegnamento su variabili di tipo oggetto

Variabili di tipo primitivo Contengono valori del loro tipo

Variabili di tipo oggetto Contengono riferimenti ad oggetti, non oggetti

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… Due variabili, stesso riferimento

Programmi e classi applicazione Un programma è costituito da più classi Classe applicazione: contiene il main al più una classe applicazione in un programma Il main avvia la computazione costruisce uno o più oggetti delle del programma Invoca i metodi su tali oggetti Stampa i risultati

File RectangleApp.java 01: import java.awt.Rectangle; 02: 03: public class RectangleApp 04: { 05: public static void main(String[] args) 06: { 07: Rectangle box = new Rectangle(5, 10, 20, 30); 08: 09: // Sposta il rettangolo 10: box.translate(15, 25); 11: 12: // Stampa nuove info 13: 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 libreria utilizzate dallapplicazione classi delle librerie raggruppate in packages Importiamo le classi specificando i nomi di package e di classe Le classi del package java.lang ( ad esempio String e System) sono importate automaticamente import java.awt.Rectangle;

Import in Java ~ #include in C import packageName.ClassName; Esempio: import java.awt.Rectangle; // importa la classe Rectangle import packageName.*; Esempio: import java.util.*; // importa tutte le classi del package Classi di libreria

Librerie – Documentazione API: Application Programming Interface Include la descrizione delle classi e dei relativi metodi della (fornitissima!) libreria Java

Documentazione sulle API

La API della classe Rectangle

Javadoc Method Summary

Documentazione del metodo translate

Domande Quali sono gli errori nei seguenti frammenti di codice? Rectangle r = (5,10,15,20) Double w = Rectangle().getwidth(); Rectangle r; r.translate(5,10);

Risposte Manca il costruttore Manca new r non è inizializzato

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un giocatore, ogni giocatore una scheda Ci vengono già fornite le classi necessarie Banco Giocatore

Banco Costruttore: Banco() crea una nuova istanza della classe Metodi: int estraiNumero() restituisce un numero nellintervallo [1..90] (ad ogni chiamata genera un numero diverso)

Giocatore Costruttore Giocatore(String nome) crea un giocatore, con il nome indicato ed una sola scheda Metodi: void controllaNumero(int x) controlla se il numero è contenuto nella sua scheda; se si lo marca

Giocatore Metodi: boolean tombola() restituisce true quando tutti i numeri della sua scheda sono marcati Integer[] verifica() restituisce un array che contiene i numeri della sua scheda Integer è un tipo reference isomorfo al tipo int

Tombola La classe applicazione che realizza il gioco: crea un banco ed un giocatore esegue un ciclo in cui ad ogni iterazione in banco estrae un numero, il giocatore lo controlla e controlla se ha completato la sua scheda il ciclo termina non appena il giocatore completa la sua scheda Alluscita dal ciclo stampa i numeri della scheda del giocatore

Tombola public class Tombola { public static void main(String[] args) { Banco b = new Banco(); Giocatore g = new Giocatore(Mario); while (true) { int x = b.estraiNumero(); System.out.println(Numero estratto = + x); g.controllaNumero(x); if (g.tombola()) break; } Integer[] scheda = g.verifica(); for (int i = 0; i < scheda.length; i++) System.out.println(scheda[i]) }

NOTE Nessuna informazione data sulla struttura interna degli oggetti in gioco Conosciamo i metodi che essi forniscono notare bene: conosciamo la specifica dei metodi, non come sono implementati E tutto quello che serve per programmare lapplicazione La chiave del concetto di encapsulation

Oggetti / Encapsulation Oggetti esportano la specifica dei propri metodi interfaccia pubblica che definisce linterazione tra oggetti e codice cliente mascherano la propria struttura interna (i campi) e limplementazione dei metodi Codice cliente indipendente dallimplementazione degli oggetti

Esercizio Create una versione della tombola in cui possono giocare più giocatori Il gioco termina non appena uno dei giocatori completa la sua scheda

Metodi e argomenti Argomenti = dati in input per i metodi Non tutti i metodi hanno argomenti Tutti i metodi hanno un argomento implicito: loggetto su cui il metodo viene invocato Continua… box.translate(10,15) box.getwidth() // no parametri espliciti box.getwidth();

Elementi di programmazione grafica

Introduzione alle applicazione grafiche contesto grafici forme geometriche elementari colori input dialogs per ottenere input dallutente Frames e applets

Frames La classe JFrame import javax.swing.*; JFrame frame = new JFrame(); frame.setSize(300, 400); frame.setTitle(An Empty Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);

Frames

File EmptyFrameViewer.java 01: import javax.swing.*; 02: 03: class EmptyFrameViewer 04: { 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: }

Domande 1.Come dobbiamo modificare EmptyFrameViewer per ottenere un frame quadrato con titolo "Hello, World!" ? 2.Come scriviamo un programma che lancia due frames?

Risposte 1.Modifca EmptyFrameViewer come segue: 2.Costruisci due oggetti JFrame definendone la dimensione e poi invoca setVisible(true) su ciascuno frame.setSize(300, 300); frame.setTitle("Hello, World!");

Disegno di forme geometriche JComponent La classe che definisce contenitori generici, al cui interno includiamo forme geometriche Possiamo definire nuovi JComponent class ShapeComponent extends JComponent {... }

Disegno di forme geometriche paintComponent metodo che produce il disegno invocato (automaticamente) tutte le volte che il componente per il quale è definito viene ridisegnato

Disegno di forme geometriche paintComponent(Graphics g) g contesto grafico Graphics classe che permette di manipolare lo stato del contesto grafico class ShapeComponent extends JComponent { public void paintComponent(Graphics g) { // Converti in Graphics2D Graphics2D g2 = (Graphics2D) g;... } }

Disegno di forme geometriche Graphics2D estende Graphics con metodi per il rendering in due dimensioni Ad esempio: package java.awt // g2: Graphics Rectangle rect = new Rectangle(5, 10, 20, 30); g2.draw(rect);

File ShapeComponent.java 01: 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 JComponent 11: { 12: public void paintComponent(Graphics g) 13: { 14: // Ottieni un graphics2D 15: Graphics2D g2 = (Graphics2D) g; 16: Continua…

File ShapeComponent.java 17: // Costruisci un rettangolo e disegna 18: 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 traslato 25: g2.draw(r); 26: } 27: }

Applicazioni ShapeViewer classe che lancia una finestra allinterno della quale vengono raffigurate Ie componenti Lapplicazione è costruita interamente allinterno del metodo main della classe Disegna due rettangoli Continua…

Applicazione ShapeViewer

Il metodo main 1.Costruisci il frame 2.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 ShapeViewer 04: { 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(Two Rectangles"); 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: }

Domanda 3.Che succede se sostituiamo la chiamata g2.draw(box) con g.draw(box) ?

Risposta 3.Il compilatore segnala un errore g : Graphics non ha un metodo draw

Applets Applets sono applicazioni eseguite allinterno di un browser Limplementazione di una Applet utilizza il pattern seguente: public class MyApplet extends JApplet { public void paint(Graphics g) { // Ottieni un contesto grafico Graphics2D g2 = (Graphics2D) g; // Istruzioni per il disegno... } }

Applets Struttura molto simile a quella di un JComponent, con due differenze: 1.Estende JApplet, invece di JComponent 2.codice del disegno incluso nel metodo paint, invece che nel metodo paintComponent

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 JApplet 10: { 11: public void paint(Graphics g) 12: { 13: // Ottieni un contesto grafico 14: Graphics2D g2 = (Graphics2D) g; Continua…

File ShapeApplet.java 17: // Costruisci un rettangolo e disegna 18: 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 traslato 25: g2.draw(r); 26: } 27: }

Applets Esecuzione creare un file HTML ed inserire il codice che lancia lapplet mediante la tag applet Un file HTML può contenere diverse applets, ciascuno delle quali introdotta da una corrispondente tag (di tipo applet) Una applet può essere lanciata mediante l appletviewer, o allinterno di un browser appletviewer RectangleApplet.html

File RectangleApplet.html Due rettangoli Heres my first applet:

Applets

Forme Geometriche Rectangle, Ellipse2D.Double, Line2D.Double (package java.awt.geom ) Alcune classi, e.g. Line2D.Double, sono interne. Per il momento ignoriamo, ma notiamo la dichiarazione import Per ottenere una forma dobbiamo costruirla e disegnarla Ellipse2D.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

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); Basepoint

Domande 4.Quale è la sequenza di istruzioni per disegnare un cerchio con centro (100, 100) e raggio 25? 5.Quale è una usequenza di istruzioni per disegnare la lettera "V" allorigine (0,0) componendo due segmenti di linea? 6.Quale è la sequenza di istruzioni per disegnare la stringa costituita dalla lettera "V" ?

Risposte 4. Line2D.Double segm1 = new Line2D.Double(0, 0, 10, 30); g2.draw(segm1); Line2D.Double segm2 = new Line2D.Double(10, 30, 20, 0); g2.draw(segm2); g2.draw(new Ellipse2D.Double(75, 75, 50, 50); g2.drawString("V", 0, 30);

Colori Colori standard Color.BLUE, Color.RED, … Nuovi colori: formato rgb settando i valori delle componenti 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

Domanda 7.Quale è la sequenza di istruzioni per disegnare un quadrato giallo su uno sfondo rosso?

Risposta 7.Disegna un quadrato giallo allinterno di un quadrato rosso: g2.setColor(Color.RED); g2.fill(new Rectangle(0, 0, 200, 200)); g2.setColor(Color.YELLOW); g2.fill(new Rectangle(50, 50, 100, 100));