Interfaccia Pubblica di una classe

Concetti Fondamentali
Usare e costruire oggetti
Gli oggetti sono entità di un programma che si
possono manipolare invocando i metodi
• System.out oggetto della classe PrintStream
• println(String s) metodo della classe
PrintStream
• System.out.println(“Hello, World!”);
invocazione del metodo println sull’oggetto
System.out passando come parametro l’oggetto
String “Hello, World!”
Inte rfa ccia pubblica di una cla s s e
Le AP I di J a va
Lo s pa zio di me moria de lla ma cchina a s tra tta
J a va
Blocchi e s ottoblocchi
Va ria bili di fra me e loro vis ibilità
Importa zioni di cla s s i
Cos truttori
La bora torio di P rogra mma zione - Luca Te s e i
1
La bora torio di P rogra mma zione - Luca Te s e i
Interfaccia Pubblica di una
classe
Application Program Interface
Specifica cosa si può fare con gli oggetti che si
creano da essa
Contiene tutti i campi e i metodi public definiti
all’interno della classe
Rappresenta “il contratto” della classe: cosa si
impegna a fare
È la candidata naturale a “documentazione
della classe”
Le classi standard fornite con la SDK hanno la
documentazione sull’interfaccia pubblica
La bora torio di P rogra mma zione - Luca Te s e i
2
3
A.P.I. E’ la documentazione riguardande le
interfacce pubbliche di tutte le classi (e altro)
fornite con la SDK
Online sul sito della sun (link alle API delle varie
distribuzioni):
http://java.sun.com/reference/api/index.html
Scaricabile anche come .zip per averlo in locale
sempre dal sito http://java.sun.com nella
pagina di download della JDK
La bora torio di P rogra mma zione - Luca Te s e i
4
Esempio: la classe String
Esercizio
L’interfaccia pubblica della classe String
specifica l’esistenza di un metodo di nome
length
int
length()
Returns the length of this string
Restituisce un numero intero (int) che
rappresenta la lunghezza
• System.out.println(“Hello, World!”.length());
Stampa 13, il numero di caratteri nella stringa
La bora torio di P rogra mma zione - Luca Te s e i
5
La bora torio di P rogra mma zione - Luca Te s e i
Creazione di Oggetti
6
L’oggetto creato
• System.out è già creato automaticamente
dalla JVM
• “Hello, World!” come oggetto della classe
String viene creato intrinsecamente visto che
è inserito nel testo del programma
Ma il modo principale per creare oggetti è quello
di usare l’operatore new
new Rectangle(5,10,20,30)
Crea un oggetto della classe Rectangle
La bora torio di P rogra mma zione - Luca Te s e i
Trovare la documentazione della classe
PrintStream
Trovare la documentazione della classe
String
Estendere Hello.java stampando “Hello” un
carattere per volta su righe successive
Stampare poi la lunghezza di “Hello” e
stampare sulla stessa riga tutti i caratteri della
stringa intervallati da due spazi: “H e l l o”
7
Rectangle è una classe inclusa nella SDK.
Nelle API:
Rectangle(int x, int y, int width, int
height)
Cons tructs a ne w Re cta ngle whos e top-le ft corne r
is s pe cifie d a s (x, y) a nd whos e width a nd he ight a re
s pe cifie d by the a rgume nts of the s a me na me .
La bora torio di P rogra mma zione - Luca Te s e i
8
Costruzione
(0,0)
Il processo di creazione di un nuovo oggetto:
Dopo la parola chiave new va inserito
specificato il costruttore per l’oggetto
I costruttori sono metodi speciali che
–
–
Rectangle: il concetto
5
x
10
Hanno come nome lo stesso nome della classe (in
questo caso Rectangle)
Hanno diversi parametri di costruzione
20
Fine s tra
Gra fica
30
Nel nostro caso abbiamo usato il costruttore,
indicato nelle API, che prende 4 interi
y
La bora torio di P rogra mma zione - Luca Te s e i
9
La bora torio di P rogra mma zione - Luca Te s e i
Lo spazio di memoria del
linguaggio Java
Rectangle: l’oggetto
•
He a p
Rectangle
x
5
y
10
width
20
height
30
La bora torio di P rogra mma zione - Luca Te s e i
10
•
Vediamo la gestione della componente
memoria nella macchina astratta del linguaggio
Java
La memoria è idealmente divisa in due sezioni:
1. Lo heap (mucchio) che contiene gli oggetti
2. Lo stack di attivazioni che contiene le variabili del
programma
11
La bora torio di P rogra mma zione - Luca Te s e i
12
Lo Heap
Lo Heap: rappresentazione
rif#2
È uno spazio di memoria gestito
automaticamente dalla macchina astratta
Contiene gli oggetti creati dal programma
Ogni oggetto residente ha un indirizzo, o
riferimento, che lo identifica univocamente e lo
rende raggiungibile dal programma
Gli oggetti non più riferiti da nessuna variabile
vengono “cancellati”: lo spazio che occupano
viene dichiarato libero ed è riutilizzabile
La bora torio di P rogra mma zione - Luca Te s e i
Rectangle
rif#1
5
10
20
30
Rectangle
x
y
width
height
13
25
10
40
30
La bora torio di P rogra mma zione - Luca Te s e i
14
Lo stack di attivazioni
Le variabili dichiarate nei metodi sono
conservate in una zona apposita di memoria
Questa zona è strutturata come una pila (stack)
di “attivazioni”
Un’attivazione consiste di un particolare
contesto di esecuzione (in Java è sempre
l'esecuzione di un qualche metodo)
Il metodo main lanciato con java è
l’attivazione principale e si trova sempre in
fondo alla pila
La bora torio di P rogra mma zione - Luca Te s e i
y
width
height
Lo stack di attivazioni
x
15
Ogni chiamata di metodo crea una nuova
attivazione
All’interno di un metodo posso chiamare altri
metodi e quindi le attivazioni si impilano una
sopra l’altra
Il modo di funzionare della pila fa in modo che
ogni attivazione stia immediatamente sopra a
quella che l'ha creata chiamando un certo
metodo
Togliendo dalla testa si ritrova il chiamante
La bora torio di P rogra mma zione - Luca Te s e i
16
All’interno di una attivazione
Sottoblocchi
Lo spazio di memoria all’interno di una certa
attivazione è anch’esso strutturato come una
pila
Gli elementi della pila sono chiamati frame
Ogni frame contiene delle associazioni fra nomi
di variabili e valori delle stesse
Ogni frame rappresenta un blocco di
esecuzione
Un blocco è tutto il codice tra due { ... }
La bora torio di P rogra mma zione - Luca Te s e i
17
Visibilità
Il frame più in basso nella pila all’interno di una
attivazione corrisponde al blocco principale
dell’attivazione (il blocco del metodo)
All’entrata di un sottoblocco viene creato ed
impilato un altro frame
Sottoblocchi di sottoblocchi di sottoblocchi.....
=> pila di frame
I sottoblocchi gestiscono la visibilità (lo scope)
delle variabili (chiariremo meglio in seguito)
La bora torio di P rogra mma zione - Luca Te s e i
18
Stack delle attivazioni
In ogni momento l’attivazione che si trova in
testa alla pila è quella in esecuzione
Non c’è nessun rapporto né visibilità tra le
variabili dello stack di frame di una attivazione
con quelle di una qualsiasi altra attivazione (sia
sopra che sotto nella pila)
All’interno di ogni attivazione lo stack di frame
gestisce la creazione e la cancellazione delle
variabili di frame (dette anche variabili
automatiche)
La bora torio di P rogra mma zione - Luca Te s e i
19
Attiva zione
in
e s e cuzione
fra me
a ttua le
x
3
y
z
7
rif#n
o1
rif#k
i
j
3
0
La bora torio di P rogra mma zione - Luca Te s e i
fra me
S ta ck
de i
fra me
fra me de l
blocco
principa le
20
Variabili
•
Dichiarazione di variabili
Le variabili che si trovano all’interno dei frame
possono essere di due tipi:
1. Tipo base del linguaggio: int, double, char,...
2. Tipo riferimento o Tipo oggetto
•
•
Le variabili del tipo 1 contengono i valori
caratteristici del tipo (esempio int interi)
Le variabili del tipo 2 contengono riferimenti
ad oggetti che si trovano nello heap
La bora torio di P rogra mma zione - Luca Te s e i
21
Tipo nomeVariabile;
Tipo nomeVariabile = valore_iniziale;
La variabile viene creata nel frame che si trova in testa
alla pila dell’attivazione corrente (quella in testa alla
pila di attivazioni)
La variabile ha come scope (contesto) il blocco in cui è
dichiarata: al di fuori non esiste
I parametri di un metodo, alla chiamata, sono visti
come variabili che vengono create nel frame del blocco
principale ed inizializzate con i valori passati
La bora torio di P rogra mma zione - Luca Te s e i
Variabili
int x = 13;
int y;
Rectangle box;
x
y
box
Variabili
Va lore di de fa ult pe r
va ria bili di tipo ba s e non
inizia lizza te
13
w
null
…........
Va lore di de fa ult pe r
va ria bili rife rime nto non
inizia lizza te
Le variabili di tipo base non inizializzate (valore
w) non possono essere usate fino a quando non
viene assegnato loro un valore
L’operatore = è l’assegnamento:
–
–
–
Fra me
corre nte
–
Attiva zione
corre nte
La bora torio di P rogra mma zione - Luca Te s e i
22
23
x = E;
Valuta l’espressione E
Controlla se il valore v ottenuto è compatibile con il
tipo della variabile x
Se sì, copia v nella variabile x cancellando quello
che conteneva precedentemente
La bora torio di P rogra mma zione - Luca Te s e i
24
Variabili riferimento
Variabili riferimento
Come tipo hanno il nome di una certa classe
Possono contenere un riferimento ad un
oggetto di quella classe (o compatibile,
chiariremo in seguito) che risiede nello heap
Non contengono l’oggetto, ma il riferimento
Il valore lo rappresentiamo o con “rif#n” o con
una freccia che punta all’oggetto nello heap
La bora torio di P rogra mma zione - Luca Te s e i
box = new Rectangle(5,10,20,30);
y = -10 + 2;
S ta ck Attiva zioni
x
x
y
box
…........
y
width
height
La bora torio di P rogra mma zione - Luca Te s e i
5
10
20
30
La bora torio di P rogra mma zione - Luca Te s e i
width
height
5
10
20
30
26
import java.awt.Rectangle;
public class MoveTest {
public static void main(String[] args) {
Rectangle box = new Rectangle(5,10,20,30);
// sposta il rettangolo di un vettore
box.translate(15,25);
// stampa il rettangolo spostato
System.out.println(box);
}
}
Rectangle
x
x
Codice: MoveTest.java
He a p
13
-8
Rectangle
y
…........
25
Rectangle box1 = box;
box1
13
-8
y
box
Variabili riferimento
S ta ck Attiva zioni
He a p
27
Stampa:
java.awt.Rectangle[x=20,y=35,width=20,height=30]
La bora torio di P rogra mma zione - Luca Te s e i
28
Importazione di classi
Importazioni di classi
Le classi fornite con la SDK sono raggruppate
in pacchetti (packages)
Ogni pacchetto contiene classi affini
• java.awt è un pacchetto che contiene classi
utili per disegnare finestre e forme grafiche (awt
= Abstract Windowing Toolkit)
• import importa una certa classe come in
import java.awt.Rectangle;
Oppure un intero pacchetto:
import java.awt.*;
La bora torio di P rogra mma zione - Luca Te s e i
–
–
29
La classe PrintStream ha un metodo
println per stampare anche oggetti:
Stampa:
java.awt.Rectangle[x=5,y=10,width=20,height=30]
La stampa è una descrizione testuale dei valori
dei campi dell’oggetto in questione
In questo esempio l’oggetto viene creato,
stampato e poi, non avendo salvato il suo
riferimento, “cancellato”
La bora torio di P rogra mma zione - Luca Te s e i
Es: String fa parte di java.lang
30
Tanti costruttori
System.out.println(new Rectangle(5,10,20,30));
La importiamo (o importiamo tutto il pacchetto che la
contiente)
Fa parte del pacchetto java.lang o java.io che
viene importato automaticamente
La bora torio di P rogra mma zione - Luca Te s e i
Stampare un oggetto
Qualunque classe che non abbiamo definito,
come classe pubblica, nella stessa cartella in
cui si trova il file sorgente che stiamo scrivendo
risulterà sconosciuta al compilatore
A meno che:
31
La stessa classe può avere più costruttori, a
seconda di quanti modi ci possono essere per
inizializzare i valori dei campi
Ogni costruttore si diversifica in base ai tipi e
alla quantità dei suoi parametri
Per ogni classe esiste un costruttore di default
che non prende nessun parametro ed assegna
alle variabili istanza dell’oggetto valori di default
La bora torio di P rogra mma zione - Luca Te s e i
32
Costruttore di default
Valori di default
Rectangle boxdef = new Rectangle();
Rectangle
boxde f
.......
x
0
y
width
0
height
.......
0
0
.......
La bora torio di P rogra mma zione - Luca Te s e i
33
Per variabili numeriche (int, float, double, byte):
0 o 0.0
Per caratteri (char): carattere nullo a valore numerico
-1
Per variabili riferimento: null
Questi valori di default valgono solo per le variabili
istanza di un oggetto, non per le variabili dei frame
Se le variabili di frame non sono inizializzate il
compilatore genera sempre errore se vengono usate
prima di essere assegnate (per convenzione, valgono
w, i tipi base, e null le variabili riferimento)
La bora torio di P rogra mma zione - Luca Te s e i
Esercizi
Esercizi
Scrivere una classe con un metodo main in cui:
Si crea una variabile di frame s che punta a una
stringa “Ciao Ciao” e una variabile di frame s1
che punta a una stringa “ciao ciao”
Si studi la documentazione della classe
java.lang.StringBuffer
Si scriva un programma in cui
Si stampa il risultato del metodo equals della
classe String chiamato sulla stringa s
passando s1 come parametro
si creano tre oggetti diversi della classe
Rectangle
si crea un nuovo oggetto della classe
StringBuffer inizialmente contentente la
stringa “Rettangoli: \n“
continua...
Si stampa il risultato del metodo
compareToIgnoreCase chiamato come sopra
La bora torio di P rogra mma zione - Luca Te s e i
34
35
La bora torio di P rogra mma zione - Luca Te s e i
36
Esercizi
Esercizi
si usa il metodo append di StringBuffer per
aggiungere allo string buffer che abbiamo
creato la descrizione ottenuta dal primo
rettangolo chiamando su di esso il metodo
toString()
si aggiunge allo string buffer un “a capo”
si aggiungono le descrizioni degli altri due
rettangoli separandole con “a capo”
Consultare il codice allegato nella cartella
rectangles che permette di creare una
finestra grafica e di visualizzare gli oggetti
Rectangle che si creano
Consultare le API delle varie classi del
pacchetto java.awt che vengono usate nel
codice
Provare a modificare il codice disegnando altre
figure geometriche
si stampa sullo schermo la stringa ottenuta
La bora torio di P rogra mma zione - Luca Te s e i
37
La bora torio di P rogra mma zione - Luca Te s e i
Esercizi
38
Esercizi
Consultare il codice allegato nella cartella
applet
Consultare le altre cartelle del codice allegato e
provare a capire come funziona
Per eseguire l'Applet aprire il file .html con
un browser che ha un plugin per Java
Modificare e personalizzare la faccia di alieno
Provare a modificare il codice in modo da
visualizzare altre figure geometriche
La bora torio di P rogra mma zione - Luca Te s e i
39
La bora torio di P rogra mma zione - Luca Te s e i
40