Upload
alba-gatto
View
217
Download
1
Tags:
Embed Size (px)
Citation preview
Capitolo 4Classi
Lucidi relativi al volume:
Java – Guida alla programmazione James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Preparazione La scena finora ha riguardato esperienze e materiali di base
Sistemi informatici e soluzione dei problemi Variabili Tipi Input e output Espressioni Assegnazioni Oggetti Classi e metodi standard
Pronti per quanto riguarda realmente Java Progettare e implementare oggetti che rappresentano
informazioni e oggetti del mondo fisico
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlProgrammazione orientata agli oggetti Base
Creare e manipolare oggetti con attributi e comportamenti che il programmatore può specificare
Meccanismo Classi
Vantaggi Un tipo di informazione viene progettato e implementato
una volta Riutilizzato come necessario
Non servono nuove analisi o giustificazioni della rappresentazione
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
La prima classe - ColoredRectangle Scopo
Rappresenta un rettangolo colorato in una finestra Introduce le nozioni fondamentali della progettazione e
dell'implementazione di oggetti
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Nozioni di base JFrame
Classe Java principale per rappresentazione una finestra grafica con titolo e bordo.
ConsiderareJFrame w1 = new JFrame("Bigger");JFrame w2 = new JFrame("Smaller");w1.setSize(200, 125);w2.setSize(150, 100);w1.setVisible(true);w2.setVisible(true);
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Nozioni di base Considerare
JFrame w1 = new JFrame("Bigger");JFrame w2 = new JFrame("Smaller");w1.setSize(200, 125);w2.setSize(150, 100);w1.setVisible(true);w2.setVisible(true);
200 pixels 125 pixels
150pixels
100pixels
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlClasse ColoredRectangle - versione iniziale Scopo
Supportare la visualizzazione della finestra quadrata contenente un rettangolo blu La finestra ha una lunghezza del lato pari a 200 pixel Il rettangolo è largo 40 pixel e alto 20 L'angolo superiore sinistro del rettangolo si trova a (80,
90)
Le limitazioni sono temporanee Ricordare che BMI.java precedeva BMICalculator.java Molti concetti da introdurre
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
ColoredRectangle in azione Considerare
ColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();
System.out.println("Enter when ready");System.in.read();
r1.paint(); // disegna la finestra associata a r1r2.paint(); // disegna la finestra associata a r2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
ColoredRectangle in azione Considerare
ColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();
System.out.println("Enter when ready");System.in.read();
r1.paint(); // disegna la finestra associata a r1r2.paint(); // disegna la finestra associata a r2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
ColoredRectangle in azione Considerare
ColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();
System.out.println("Enter when ready");System.in.read();
r1.paint(); // disegna la finestra associata a r1r2.paint(); // disegna la finestra associata a r2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
ColoredRectangle in azione Considerare
ColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();
System.out.println("Enter when ready");System.in.read();
r1.paint(); // disegna la finestra associata a r1r2.paint(); // disegna la finestra associata a r2
r1.paint()The messages instruct the objects to display themselves
r2.paint()
ColoredRectangle object referenced by r1 is being sent a message
ColoredRectangle object referenced by r2 is being sent a message
Il messaggio indica che i due oggetti devono essere visualizzati
All'oggetto ColoredRectangle a cui fa riferimento r2 viene inviato un messaggio
All'oggetto ColoredRectangle a cui fa riferimento r1 viene inviato un messaggio
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Struttura di ColoredRectangle.javaimport javax.swing.*;import java.awt.*;
public class ColoredRectangle {
// variabili istanza per attributi dell'oggettoprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;
// ColoredRectangle(): costruttore predefinitopublic ColoredRectangle() {
// configura gli attributi}
// paint(): mostra il rettangolo nella sua finestrapublic void paint() {
// Rappresenta il disegno}
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Variabili istanza e attributi Campo dati
Termine Java per l'attributo di un oggetto
Variabile istanza Nome simbolico per un campo dati
Solitamente dispone di accesso privato Assiste nel celamento delle informazioni incapsulando
gli attributi dell'oggetto
Inizializzazione predefinita Variabili istanza numeriche inizializzate a 0 Variabili istanza logiche inizializzate su false Variabili istanza oggetto inizializzate a null
public class ColoredRectangle {
// variabili istanza per attributi dell'oggettoprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;
// ColoredRectangle(): costruttore predefinitopublic ColoredRectangle() {
window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);
}
// paint(): mostra il rettangolo nella sua finestrapublic void paint() {
Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);
}}
public class ColoredRectangle {
// variabili istanza per contenere attributi dell'oggettoprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;
// ColoredRectangle(): costruttore predefinitopublic ColoredRectangle() {
window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);
}
// paint(): mostra il rettangolo nella sua finestrapublic void paint() {
Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);
}}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlCostruttore predefinito di ColoredRectangle
public class ColoredRectangle {// instance variables to describe object attributes...
// ColoredRectangle(): default constructorpublic ColoredRectangle() {
...
}...
}
A constructor does not list its return type. A constructoralways returns a reference to a new object of its class
The name of a constructor always matches thename of its classIl nome del costruttore è sempre uguale a quello della classe
Un costruttore non riporta un tipo di restituzione. Un costruttore restituisce sempre un riferimento a un nuovo oggetto della sua classe
public class ColoredRectangle {
// variabili istanza per contenere attributi dell'oggettoprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;
// ColoredRectangle(): costruttore predefinitopublic ColoredRectangle() {
window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);
}
// paint(): mostra il rettangolo nella sua finestrapublic void paint() {
Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);
}}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Costanti di colore Color.BLACK Color.BLUE Color.CYAN Color.DARK_GRAY Color.GRAY Color.GREEN Color.LIGHT_GRAY Color.MAGENTA Color.ORANGE Color.PINK Color.RED Color.WHITE Color.YELLOW
r
The value of aColoredRectangle
variable is areference to a
ColoredRectangleobject
+ paint() : void
ColorRectangle
- width = 40- height = 20- x = 80- y = 90- window =- color =
Color
- color =- ...
+ brighter() : Color+ ...
+ setVisible(boolean status) : void+ ...
JFrame
- width = 200- height = 200- title =- ...
String
- text = "Box Fun"- ...
+ length() : int+ ...
ColoredRectangle r = new ColoredRectangle();
Il valore di una variabile
ColoredRectangle è un riferimento a un
oggetto ColoredRectangle
public class ColoredRectangle {
// variabili istanza per attributi dell'oggettoprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;
// ColoredRectangle(): costruttore predefinitopublic ColoredRectangle() {
window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);
}
// paint(): mostra il rettangolo nella sua finestrapublic void paint() {
Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);
}}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Contesto grafico Grafica
Definita in java.awt.Graphics Rappresenta le informazioni per una richiesta di rendering
Colore Componente Tipo di carattere …
Fornisce metodi Disegno di testo
Disegno di linee Disegno di forme
Rettangoli Ovali Poligoni
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Sistema di coordinate Java
Coordinate (80, 90)
Coordinate (0.0)X-Axis
Y-A
xis
Coordinate (120, 110)
public class ColoredRectangle {
// variabili istanza per attributi dell'oggettoprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;
// ColoredRectangle(): costruttore predefinitopublic ColoredRectangle() {
window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);
}
// paint(): mostra il rettangolo nella sua finestrapublic void paint() {
Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);
}}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Invocazione dei metodi Considerare
r1.paint(); // visualizza la finestra associata a r1
r2.paint(); // visualizza la finestra associata a r2
Osservare Quando viene eseguito un metodo istanza, il sistema
accede e manipola gli attributi dell'oggetto associati all'invocazione
È importante comprendere quale oggetto viene manipolato
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Invocazione dei metodi
public class ColoredRectangle {// instance variables to describe object attributes...
// paint(): display the rectangle in its windowpublic void paint() {
window.setVisible(true);Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);
}...
}
Instance variable window referencesthe J Frame attribute of the objectthat caused the invocation. That is,the invocation r1.paint() causes thewindow attribute of the Colored-Rectangle referenced by r1 to be
accessed. Similarly, the invocationr2.paint() causes the window
attribute of the ColoredRectanglereferenced by r2 to be accessed.
The values of these instancevariables are also from the
ColoredRectangle object thatinvoked method paint().
La variabile d'istanza window fa riferimento all'attributo JFrame
dell'oggetto che ha causato l'invocazione. Ossia, l'invocazione di
r1.paint() consente l'accesso all'attributo window dell'oggetto
ColoredRectangle a cui fa riferimento r1. Analogamente,
l'invocazione di r2.paint() consente l'accesso all'attributo window
dell'oggetto ColoredRectangle a cui fa riferimento r2
I valori di queste variabili d'istanza sono gli stessi
dell'oggetto ColoredRectangle che ha invocato il metodo paint()
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlPerfezionamento di ColoredRectangle Analisi
Un oggetto ColoredRectangle dovrebbe Essere in grado di avere un colore Essere posizionabile ovunque nella sua finestra Non presentare limitazioni su larghezza e altezza Attributi accessibili Attributi aggiornabili
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlPerfezionamento di ColoredRectangle Costruzioni e comportamenti aggiuntivi
Costruzione specifica Costruire la rappresentazione di un rettangolo utilizzando i
valori forniti per i suoi attributi
Funzioni di accesso Fornire i valori degli attributi Singoli metodi per fornire larghezza, altezza, coordinata x,
coordinata y, colore o finestra del rettangolo associato
Funzioni di modifica Gestire le richieste per la modifica degli attributi Garantire che gli oggetti abbiano sempre i valori sensibili Singoli metodi per impostare larghezza, altezza, coordinata x,
coordinata y, colore o finestra del rettangolo associato su un valore dato
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Un metodo di modifica Definizione
// setWidth(): cambia la larghezzapublic void setWidth(int w)
width = w;}
Utilizzo
Col or edRect angl e s = new Col or edRect angl e( ) ;s. set Wi dt h( 80) ;
publ i c voi d set Wi dt h( i nt w) {. . .
}
Initial value of the formal parametercomes from the actual parameter
Changes to the formal parameterdo not affect the actual parameter
Object to be manipulatedis the one referenced by s
Il valore iniziale dei parametri formali deriva dal parametro effettivo
Le modifiche al parametro formale non hanno effetto sul parametro effettivo
L'oggetto da manipolare è quello a cui fa riferimento s
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Valutazione di setWidth()
ColoredRectangle s = new ColoredRectangle();s.setWidth(80);
public class ColoredRectangle {...// setWidth(): width mutatorpublic void setWidth(int w) {
width = w;}
...}
The invocation sends a message to the ColoredRectanglereferenced by s to modify its width attribute. To do so,there is a temporary transfer of flow of control tosetWidth(). The value of the actual parameter is 80
Method setWidth() sets the instance variable width of itsColoredRectangle. For this invocation, width is set to 80and the ColoredRectangle is the one referenced by s
For this invocation of methodsetWidth(), w is initialized to80. The object being referencedwithin the method body is theobject referenced by s
Method setWidth() is completed. Control is transferred back tothe statement that invoked setWidth()
L'invocazione trasmette un messaggio all'oggetto ColoredRectangle a cui fa riferimento s, nel quale è definita la modifica dell'attributo. Per svolgere questa operazione, il flusso di controllo viene temporaneamente trasferito a setWidth(). Il valore del parametro effettivo è 80
Per l'invocazione del metodo setWidth(), w viene inizializzato su 80. L'oggetto a cui si fa riferimento all'interno del corpo del metodo è l'oggetto a cui fa riferimento s
Il metodo setWidth() imposta la variabile d'istanza width del suo oggetto ColoredRectangle. Per questa invocazione, width viene impostata su 80, e l'oggetto ColoredRectangle è quello a cui fa riferimento s
Il metodo setWidth() ha finito. Il controllo viene restituito all'istruzione che aveva richiamato setWidth()
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Dettagli Considerare
ColoredRectangle r = new ColoredRectangle();r.paint(); r.setWidth(80); r.paint();
Qual è la larghezza del rettangolo sullo schermo dopo l'esecuzione della funzione di modifica?
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Altre funzioni di modificapublic void setHeight(int h)
height = h;}
public void setX(int ulx) x = ulx;
}
public void setY(int uly) y = uly;
}
public void setWindow(JFrame f) window = f;
}
public void setColor(Color c)color = c;
}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Utilizzo della funzione di modifica
ColoredRectangle u = new ColoredRectangle();ColoredRectangle v = new ColoredRectangle();u.setHeight(100);u.setColor(Color.PINK);v.setX(25);v.setY(50);JFrame display =
new JFrame("Fun");v.setWindow(display);
Sends a message to v's Colored-Rectangle to modify its windowattribute to display's J Frame
Sends a message tou's ColoredRectangleto modify its heightattribute to 100
Sends a message to u's Colored-Rectangle to modify its colorattribute to pink
Sends a message to v's Colored-Rectangle to modify its x-axisposition to 25
Sends a message to v's Colored-Rectangle to modify its y-axisposition to 50
Trasmette un messaggio all'oggetto ColoredRectangle di u per modificare in 100 l'attributo per l'altezza
Trasmette un messaggio all'oggetto ColoredRectangle di u per modificare in rosa l'attributo per il colore
Trasmette un messaggio all'oggetto ColoredRectangle di v per modificare in 25 l'attributo per la posizione dell'asse x
Trasmette un messaggio all'oggetto ColoredRectangle di v per modificare in 50 l'attributo per la posizione dell'asse y
Trasmette un messaggio all'oggetto ColoredRectangle di v per modificare l'attributo window in modo da visualizzare la finestra JFrame di s
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Funzioni di accesso Proprietà
Non richiede parametri Ogni esecuzione della funzione di accesso produce un
valore di ritorno Il valore di ritorno è il valore dell'invocazione
public int getWidth() {return width;
}
The method return type precedes the name of the method in themethod definition
For method getWidth(), the return value is the value of the widthattribute for the ColoredRectangle associated with the invocation.In invocation t.getWidth(), the return value is the value of theinstance variable width for the ColoredRectangle referenced by t
Il tipo di ritorno del metodo precede il nome del metodo nella definizione
Per il metodo getWidth(), il valore di ritorno è il valore dell'attributo per la larghezza dell'oggetto ColoredRectangle associato con l'invocazione. Nell'invocazione di t.getWidth(), il valore di ritorno è il valore della variabile d'istanza width per l'oggetto ColoredRectangle a cui fa riferimento t
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Utilizzo della funzione di accesso
ColoredRectangle t = new ColoredRectangle();int w = t.getWidth();
public class ColoredRectangle {...// getWidth(): accessorpublic int getWidth() {
return width;}
...}
Invocation sends a message to the ColoredRectanglereferenced by t to return the value of its width. To do so,there is a temporary transfer of flow of control to getWidth()
The return expression evaluates to 40 (the widthattribute of the ColoredRectangle object referenced by t )
Method getWidth() starts executing.For this invocation, the object beingreferenced is the object referenced by t
Method completes by supplying its return value (40) to the invokingstatement. Also, invoking statement regains the flow of control. Fromthere variable w is initialized with the return value of the invocatio
L'invocazione trasmette un messaggio all'oggetto ColoredRectangle a cui fa riferimento t, per restituire il valore del suo attributo width. Per svolgere questa operazione, il flusso di controllo viene temporaneamente trasferito a getWidth()
Il metodo getWidth() comincia l'esecuzione. Per questa invocazione, l'oggetto a cui si fa riferimento all'interno del corpo è l'oggetto a cui fa riferimento t
Il risultato dell'espressione return è 40 (l'attributo per la larghezza dell'oggetto ColoredRectangle a cui fa riferimento t)
Il metodo getWidth() termina fornendo il valore di ritorno (40) all'istruzione che l'aveva invocato. Inoltre, l'istruzione che aveva effettuato l'invocazione riprende il controllo del flusso. A questo punto, la variabile w viene inizializzata con il valore di ritorno dell'invocazione (ossia, w viene inizializzata su 40)
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Costruzione specificapublic ColoredRectangle(int w, int h, int ulx, int uly,
JFrame f, Color c) setWidth(w);setHeight(h);setX(ulx);setY(uly);setWindow(f);setColor(c);
}
Richiede valori per ogni attributoJFrame display = new JFrame("Even more fun");display.setSize(400, 400);ColoredRectangle w = new ColoredRectangle(60, 80,
20, 20, display, Color.YELLOW);
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Costruzione specifica
public ColoredRectangle(int w, int h, int ulx, int uly, JFrame f, Color c)
setWidth(w);setHeight(h);setX(ulx);setY(uly);setWindow(f);setColor(c);
}
Vantaggi dell'utilizzo delle funzioni di modifica Leggibilità Meno soggette a errori Facilitano i perfezionamenti con la localizzazione
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Vedere doppioimport java.io.*;import java.awt.*;
public class SeeingDouble
public static void main(String[] args)throws IOException
ColoredRectangle r = new ColoredRectangle();
System.out.println("Enter when ready");System.in.read();
r.paint();
r.setY(50);r.setColor(Color.RED);r.paint();
}}
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Vedere doppio