Usare gli Oggetti Usare gli Oggetti
C. Horstmann C. Horstmann
Fondamenti di programmazione e Java 2 Fondamenti di programmazione e Java 2
3^ edizione Apogeo 3^ edizione Apogeo trad. Nicola Fanizzi trad. Nicola Fanizzi
corso di Programmazione, CdS: Informatica TPS corso di Programmazione, CdS: Informatica TPS Dip. di Informatica, Università degli studi di Bari Dip. di Informatica, Università degli studi di Bari
2 2
Obiettivi Obiettivi
Imparare la nozione di variabile Imparare la nozione di variabile
Capire i concetti di classe e oggetto Capire i concetti di classe e oggetto
Saper invocare i metodi Saper invocare i metodi
Saper scorrere la documentazione delle API Saper scorrere la documentazione delle API
Comprendere la differenza tra gli oggetti e i loro Comprendere la differenza tra gli oggetti e i loro riferimenti
riferimenti
3 3
Tipi e Variabili Tipi e Variabili
Ogni valore ha un tipo Ogni valore ha un tipo
Esempi di dichiarazioni di variabili: Esempi di dichiarazioni di variabili:
Variabili Variabili
Immagazzinano Immagazzinano valorivalori
Possono essere usate in vece degli oggetti che Possono essere usate in vece degli oggetti che immagazzinano
immagazzinano
String greeting = "Hello, World!";
String greeting = "Hello, World!";
PrintStream printer = System.out;
PrintStream printer = System.out;
int luckyNumber = 13;
int luckyNumber = 13;
4 4
Sintassi 2.1:
Sintassi 2.1:
Def. di Variabile Def. di Variabile
nomeTipo nomeVariabile = valore;
nomeTipo nomeVariabile = valore;
oppure oppure
nomeTipo nomeVariabile;
nomeTipo nomeVariabile;
Esempio:
Esempio:
String greeting = "Hello, Dave!"; String greeting = "Hello, Dave!";
Scopo:
Scopo: Definire una nuova variabile di un particolare Definire una nuova variabile di un particolare
tipo e opzionalmente fornire anche un valore iniziale
tipo e opzionalmente fornire anche un valore iniziale
5 5
Identificatori Identificatori
Identificatore: nome di una variabile, metodo o Identificatore: nome di una variabile, metodo o classe
classe
Regole per identificatori in Java: Regole per identificatori in Java:
Composti da lettere cifre e caratteri underscore _Composti da lettere cifre e caratteri underscore _
Non possono iniziare con una cifra Non possono iniziare con una cifra
Non si possono usare altri caratteri come ? o % Non si possono usare altri caratteri come ? o %
Gli spazi non sono permessi negli identificatori Gli spazi non sono permessi negli identificatori
Non si possono utilizzare parole riservate Non si possono utilizzare parole riservate
Sono case sensitiveSono case sensitive
Continua…
Continua…
6 6
Identificatori Identificatori
Per convenzione: Per convenzione: i nomi di variabile cominciano con i nomi di variabile cominciano con una lettera minuscola
una lettera minuscola
Per convenzione: Per convenzione: i nomi di classe cominciano con i nomi di classe cominciano con una maiuscola
una maiuscola
7 7
Operatore di Assegnazione Operatore di Assegnazione
Operatore Operatore = =
Da non usarsi come test di uguaglianza Da non usarsi come test di uguaglianza
Cambia il valore di una variabile Cambia il valore di una variabile
int luckyNumber = 13;
int luckyNumber = 13;
luckyNumber = 12;
luckyNumber = 12;
Figura 1
Figura 1: assegnare un nuovo : assegnare un nuovo valore ad una variabile
valore ad una variabile
8 8
Variabili non Inizializzate Variabili non Inizializzate
Errore: Errore:
Figure 2:
Figure 2: una variabile oggetto non inizializzata una variabile oggetto non inizializzata
int luckyNumber;
int luckyNumber;
System.out.println(luckyNumber);
System.out.println(luckyNumber);
// ERRORE – variabile non inizializzata // ERRORE – variabile non inizializzata
9 9
Sintassi 2.2: Assegnazione Sintassi 2.2: Assegnazione
• nomeVar nomeVar = = valore valore ; ;
•
• Example: Example:
• luckyNumber = 12; luckyNumber = 12;
•
•
Scopo: Scopo: assegnare un nuovo valore ad una variabile assegnare un nuovo valore ad una variabile precedentemente definita
precedentemente definita
10 10
Oggetti e Classi Oggetti e Classi
Oggetto: Oggetto: (astrazione di) (astrazione di) un'entità che si può
un'entità che si può manipolare nei
manipolare nei programmi
programmi
Ogni oggetto appartiene Ogni oggetto appartiene ad una classe.
ad una classe.
Ad esempio, Ad esempio,
System.out System.out
appartiene alla classe appartiene alla classe
PrintStream
PrintStream
Figura 3Figura 3: Rappresentazione : Rappresentazione11 11
Metodi Metodi
Metodo Metodo : sequenza di istruzioni che accede : sequenza di istruzioni che accede
direttamente ai dati relativi (stato) di un oggetto direttamente ai dati relativi (stato) di un oggetto
Si può manipolare un oggetto chiamando i suoi metodiSi può manipolare un oggetto chiamando i suoi metodi
Classe Classe : Insieme di oggetti con lo stesso : Insieme di oggetti con lo stesso comportamento
comportamento
La classe determina i metodi leciti per un oggettoLa classe determina i metodi leciti per un oggetto
Continua Continua……
String greeting = "Hello";
String greeting = "Hello";
greeting.println() // Errore greeting.println() // Errore greeting.length() // OK
greeting.length() // OK
12 12
Metodi Metodi
Interfaccia pubblica Interfaccia pubblica : specifica cosa si può fare : specifica cosa si può fare con gli oggetti della data classe
con gli oggetti della data classe
Si usa la parola chiave Si usa la parola chiave public public
13 13
Rappresentazione di Rappresentazione di
due oggetti String due oggetti String
Figura 4
Figura 4: Rappresentazione di due oggetti : Rappresentazione di due oggetti di tipo String
di tipo String
14 14
Metodi della classe
Metodi della classe String String
length length
Metodo che conta il numero di caratteri della stringa Metodo che conta il numero di caratteri della stringa
Continua…
Continua…
String greeting = "Hello, World!";
String greeting = "Hello, World!";
int n = greeting.length(); // setta n a 13 int n = greeting.length(); // setta n a 13
15 15
Metodi della classe
Metodi della classe String String
toUpperCase toUpperCase : crea un altro oggetto : crea un altro oggetto String String contenente i caratteri della stringa originaria con le contenente i caratteri della stringa originaria con le
lettere minuscole convertire in maiuscole lettere minuscole convertire in maiuscole
Continua…
Continua…
String river = "Mississippi";String river = "Mississippi";
String bigRiver = river.toUpperCase();
String bigRiver = river.toUpperCase();
// sets bigRiver to "MISSISSIPPI"
// sets bigRiver to "MISSISSIPPI"
16 16
Metodi della classe
Metodi della classe String String
Applicando un metodo ad un oggetto assicurarsi che Applicando un metodo ad un oggetto assicurarsi che il metodo sia definito nella classe appropriata
il metodo sia definito nella classe appropriata
System.out.length();
System.out.length();
// Questa chiamata è erronea // Questa chiamata è erronea
17 17
Parametri Impliciti ed Espliciti Parametri Impliciti ed Espliciti
Parametro Parametro (esplicito): Dati passati al metodo (esplicito): Dati passati al metodo
Non tutti i metodi ne hannoNon tutti i metodi ne hanno
Parametro Parametro (implicito): oggetto del quale si invoca un (implicito): oggetto del quale si invoca un metodo
metodo
Continua…
Continua…
System.out.println(
System.out.println(greetinggreeting) )
greeting.length() // non ha parametri espliciti greeting.length() // non ha parametri espliciti
System.out.println(greeting) System.out.println(greeting)
18 18
Parametri Impliciti ed Espliciti Parametri Impliciti ed Espliciti
Figura 5:
Figura 5: passaggio di parametro al metodo passaggio di parametro al metodo printlnprintln
19 19
Valori di Ritorno Valori di Ritorno
●
Valore di ritorno: Un risultato calcolato dal metodo Valore di ritorno: Un risultato calcolato dal metodo ad uso della sezione di codice che lo ha chiamato ad uso della sezione di codice che lo ha chiamato
Continua…
Continua…
int n = greeting.length();
int n = greeting.length();
// return value stored in n // return value stored in n
20 20
Valori di Ritorno Valori di Ritorno
Figura 6
Figura 6: Invocare il metodo length su un oggetto stringa: Invocare il metodo length su un oggetto stringa
21 21
Passare i Valori di Ritorno Passare i Valori di Ritorno
Si può anche usare il valore di ritorno come Si può anche usare il valore di ritorno come parametro nella chiamata di un altro metodo:
parametro nella chiamata di un altro metodo:
Non tutti i metodi ritornano valori. Esempio: Non tutti i metodi ritornano valori. Esempio:
Continua…
Continua…
System.out.println(greeting.length());
System.out.println(greeting.length());
println println
22 22
Passare i Valori di Ritorno Passare i Valori di Ritorno
Figura 7 Figura 7::
Passeaggio del risultato della chiamata di un metodo ad un'altra chiamata Passeaggio del risultato della chiamata di un metodo ad un'altra chiamata
23 23
Una Chiamata più complessa Una Chiamata più complessa
metodo metodo replace replace compie operazioni compie operazioni ricerca-e-sostituisci
ricerca-e-sostituisci
Come mostrato in Figura 8, tale chiamata ha Come mostrato in Figura 8, tale chiamata ha
Un solo parametro implicito: la stringa "Mississippi" Un solo parametro implicito: la stringa "Mississippi"
Due parametri impliciti: le stringhe "issipp" e "our" Due parametri impliciti: le stringhe "issipp" e "our"
Un valore di ritorno: la stringa "Missouri" Un valore di ritorno: la stringa "Missouri"
Continua…
Continua…
river.replace("issipp", "our") river.replace("issipp", "our")
// costruisce una nuova stringa ("Missouri")// costruisce una nuova stringa ("Missouri")
24 24
Una Chiamata più complessa Una Chiamata più complessa
Figura 8
Figura 8: Chiamata del metodo : Chiamata del metodo replacereplace
25 25
Definizione di Metodi Definizione di Metodi
La definizione di un metodo specifica i tipi dei La definizione di un metodo specifica i tipi dei parametri espliciti e del valore di ritorno
parametri espliciti e del valore di ritorno
Tipo del parametro implicito Tipo del parametro implicito
= =
Classe corrente Classe corrente
Non menzionato nella definizione del metodoNon menzionato nella definizione del metodo
26 26
Definizione di Metodi Definizione di Metodi
Esempio: Esempio: Class String Class String definisce definisce
public int length() public int length()
// tipo di ritorno: int // tipo di ritorno: int
// nessun parametro esplicito // nessun parametro esplicito
public String replace(String target, String replacement) public String replace(String target, String replacement) // tipo di ritorno: String;
// tipo di ritorno: String;
// due parametri espliciti di tipo String // due parametri espliciti di tipo String
27 27
Definizione di Metodi Definizione di Metodi
Se il metodo non restituisce alcun valore, Se il metodo non restituisce alcun valore, il tipo di ritorno viene dichiarato come
il tipo di ritorno viene dichiarato come void void
Il nome di un metodo è sovraccaricato ( Il nome di un metodo è sovraccaricato ( overloaded overloaded ) ) se una classe ha più di un metodo con lo stesso
se una classe ha più di un metodo con lo stesso nome (ma diversi tipi/numero di parametri)
nome (ma diversi tipi/numero di parametri)
public void println(String output) public void println(String output)
// nella classe PrintStream // nella classe PrintStream
public void println(String output) public void println(String output)
public void println(int output) public void println(int output)
28 28
Tipi Tipi Numerici Numerici
Interi Interi : : short short , , int int , , long long
EsempiEsempi 1313
Numeri in virgola mobile: Numeri in virgola mobile: float float , , double double
EsempiEsempi:: 1.31.3
0.00013 0.00013
29 29
Tipi Tipi Numerici Numerici
Quando un numero in virgola mobile viene Quando un numero in virgola mobile viene
moltiplicato o diviso per 10, cambia solo la posizione moltiplicato o diviso per 10, cambia solo la posizione
del punto dei decimali; esso "si muove"
del punto dei decimali; esso "si muove"
Rappresentazione collegata alla notazione scientifica Rappresentazione collegata alla notazione scientifica
es.: 1.3 × 10-4 es.: 1.3 × 10-4
I numeri I numeri non non sono oggetti sono oggetti
I tipi numerici sono I tipi numerici sono primitivi primitivi
1.3E-4 // 1.3 × 10-4 scritto in Java 1.3E-4 // 1.3 × 10-4 scritto in Java
30 30
Operatori Aritmetici Operatori Aritmetici
Operatori: Operatori: + - * + - *
Come in matematica Come in matematica l'operatore
l'operatore * * lega più dell'operatore lega più dell'operatore + +
10 + n 10 + n n - 1 n - 1
10 * n // 10 × n 10 * n // 10 × n
x + y * 2 // la somma di x e y * 2 x + y * 2 // la somma di x e y * 2
(x + y) * 2 // moltiplica la somma di x e y con 2 (x + y) * 2 // moltiplica la somma di x e y con 2
31 31
Figure Rettangolari Figure Rettangolari ed Oggetti Rettangolo ed Oggetti Rettangolo
Oggetti di tipo Oggetti di tipo Rectangle Rectangle descrivono figure descrivono figure rettangolari
rettangolari
Figura 9 Figura 9::
Figure rettangolari Figure rettangolari
32 32
Figure Rettangolari Figure Rettangolari ed Oggetti Rettangolo ed Oggetti Rettangolo
Un Un Rectangle Rectangle non è una figura rettangolare non è una figura rettangolare
bensì un oggetto che contiene un insieme di numeri bensì un oggetto che contiene un insieme di numeri
che descrivono un rettangolo
che descrivono un rettangolo
33 33
Costruire Oggetti Costruire Oggetti
Dettaglio: Dettaglio:
1)1) L'operatore L'operatore newnew costruisce un oggetto costruisce un oggetto RectangleRectangle 2)2) Usa parametri per inizializzare i dati dell'oggettoUsa parametri per inizializzare i dati dell'oggetto
(in tal caso:
(in tal caso: 55, , 1010, , 2020, e 30, e 30)) 3)3) Restituisce un oggettoRestituisce un oggetto
di solito l'output dell'operatore
di solito l'output dell'operatore newnew viene viene immagazzinato in una variabile
immagazzinato in una variabile
Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box = new Rectangle(5, 10, 20, 30);
new Rectangle(5, 10, 20, 30) new Rectangle(5, 10, 20, 30)
34 34
Costruire Oggetti Costruire Oggetti
Il processo di creazione di un nuovo oggetto si Il processo di creazione di un nuovo oggetto si chiama costruzione
chiama costruzione
I quattro valori I quattro valori 5 5 , , 10 10 , , 20 20 , e , e 30 30 sono chiamati sono chiamati parametri di costruzione
parametri di costruzione
Alcune classi fanno costruire i loro oggetti in molti Alcune classi fanno costruire i loro oggetti in molti modi:
modi:
new Rectangle() new Rectangle()
// costruisce un rettangolo angolo in alto a sin.
// costruisce un rettangolo angolo in alto a sin.
// nell'origine (0, 0), larghezza 0, e altezza 0 // nell'origine (0, 0), larghezza 0, e altezza 0
35 35
Sintassi 2.3:
Sintassi 2.3: Costruire Oggetti Costruire Oggetti
new new ClassName ClassName ( ( parameters parameters ) ) Esempio
Esempio : :
new Rectangle(5, 10, 20, 30) new Rectangle(5, 10, 20, 30) new Rectangle()
new Rectangle()
Scopo Scopo : :
Costruire un nuovo oggetto inizializzandolo secondo Costruire un nuovo oggetto inizializzandolo secondo
i parametri passati e restituire un riferimento i parametri passati e restituire un riferimento
all'oggetto costruito
all'oggetto costruito
36 36
Metodi d'Accesso e Mutatori Metodi d'Accesso e Mutatori
Metodo d'accesso: Metodo d'accesso:
non cambia lo stato del suo parametro implicito non cambia lo stato del suo parametro implicito
Metodo Mutatore Metodo Mutatore : :
cambia lo stato del parametro implicito cambia lo stato del parametro implicito
double width = box.getWidth();
double width = box.getWidth();
box.translate(15, 25);
box.translate(15, 25);
37 37
Metodi d'Accesso e Mutatori
Metodi d'Accesso e Mutatori
38 38
Implementare un Programma Implementare un Programma
Fornire una nuova classe Fornire una nuova classe
Fornire un metodo Fornire un metodo main main
Nel metodo Nel metodo main main costruire uno o più oggetti costruire uno o più oggetti
Applicare i metodi agli oggetti Applicare i metodi agli oggetti
Mostrare i risultati delle chiamate Mostrare i risultati delle chiamate
39 39
Importare le Librerie Importare le Librerie
Non si dimentichi di includere le librerie del caso: Non si dimentichi di includere le librerie del caso:
Le classi Java possono essere raggruppate in package Le classi Java possono essere raggruppate in package
Importare le classi di libreria specificando il package e il Importare le classi di libreria specificando il package e il nome della classe:
nome della classe:
Non occorre importare classi dal package java.langNon occorre importare classi dal package java.lang come ad esempio
come ad esempio StringString e e SystemSystem
import java.awt.Rectangle;
import java.awt.Rectangle;
40 40
Sintassi 2.4: Importare una Sintassi 2.4: Importare una
Classe da un Package Classe da un Package
import
import packageName packageName . . ClassName ClassName ; ;
Example: Example:
import java.awt.Rectangle; import java.awt.Rectangle;
Purpose Purpose : Importare una classe da un package per : Importare una classe da un package per usarlo in un programma
usarlo in un programma
41 41
File
File MoveTester.java MoveTester.java
01: import java.awt.Rectangle;
01: import java.awt.Rectangle;
02: 02:
03: public class MoveTester 03: public class MoveTester 04: {
04: {
05: public static void main(String[] args) 05: public static void main(String[] args) 06: {
06: {
07: Rectangle box = new Rectangle(5, 10, 20, 30);
07: Rectangle box = new Rectangle(5, 10, 20, 30);
08: 08:
09: // Move the rectangle 09: // Move the rectangle 10: box.translate(15, 25);
10: box.translate(15, 25);
11: 11:
12: // Print information about the moved rectangle 12: // Print information about the moved rectangle 13: System.out.println("After moving, the top-left 13: System.out.println("After moving, the top-left
corner is:"); corner is:");
14: System.out.println(box.getX());
14: System.out.println(box.getX());
15: System.out.println(box.getY());
15: System.out.println(box.getY());
16: } 16: } 17: } 17: }
42 42
Testare Classi in una IDE
Testare Classi in una IDE
43 43
La Documentazione delle API La Documentazione delle API
API: Application Programming Interface API: Application Programming Interface
Elenca le classi e i metodi nella libreria Java Elenca le classi e i metodi nella libreria Java
http://java.sun.com/j2se/1.5/docs/api/index.html http://java.sun.com/j2se/1.5/docs/api/index.html
44 44
L'API Documentation della L'API Documentation della
Libreria Standard di Java
Libreria Standard di Java
45 45
L'API Documentation L'API Documentation per la Classe
per la Classe Rectangle Rectangle
46 46
Sommario dei Metodi con Sommario dei Metodi con
Javadoc
Javadoc
47 47
translate
translate
Documentazione dei Metodi
Documentazione dei Metodi
48 48
Riferimenti a Oggetti Riferimenti a Oggetti
Descrivono la posizione degli oggetti in memoria Descrivono la posizione degli oggetti in memoria
L'operatore L'operatore new new restituisce un riferimento ad un restituisce un riferimento ad un nuovo oggetto
nuovo oggetto
Variabili (riferimenti) oggetto diverse possono riferirsi Variabili (riferimenti) oggetto diverse possono riferirsi allo steso oggetto
allo steso oggetto
Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box2 = box;
Rectangle box2 = box;
box2.translate(15, 25);
box2.translate(15, 25);
Rectangle box = new Rectangle();
Rectangle box = new Rectangle();
49 49
Riferimenti a Oggetti Riferimenti a Oggetti
●
Variabili di tipi primitivi ≠ variabili-oggetto Variabili di tipi primitivi ≠ variabili-oggetto
50 50
Variabili Oggetto
Variabili Oggetto
e Variabili Numeriche
e Variabili Numeriche
51 51
Variabili Oggetto
Variabili Oggetto
e Variabili Numeriche
e Variabili Numeriche
52 52
Variabili Oggetto
Variabili Oggetto
e Variabili Numeriche
e Variabili Numeriche
53 53
Copiare Numeri Copiare Numeri
int luckyNumber = 13;•
int luckyNumber = 13;
int luckyNumber2 = luckyNumber;
int luckyNumber2 = luckyNumber;
luckyNumber2 = 12;
luckyNumber2 = 12;
54 54
Copiare Riferimenti ad Oggetti Copiare Riferimenti ad Oggetti
●Rectangle box = new Rectangle(5, 10, 20, 30);Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box2 = box;
Rectangle box2 = box;
box2.translate(15, 25);
box2.translate(15, 25);