Fondamenti di programmazione in Java

Università
della
Svizzera
I taliana
La prima applicazione Java
Università
della
Svizzera
I taliana
Questo è un commento
/* Programma MyFirstApplication
Il programma visualizza una finestra vuota
sullo schermo.
Importo il “package” delle classi
*/
MainWindow
MainWindow
mainWindow;
mainWindow = new MainWindow();
new
MyFirstApplication
usate nel seguito.
import javabook.*;
La prima applicazione Java:
schema di esecuzione
Dichiaro la classe MyFirstApplication
Dichiaro una variabile per contenere il
riferimento ad una istanza della classe
MainWindow
mainWindow.show();
show
main
class MyFirstApplication {
public static void main(String args[]) {
Creo una nuova istanza della classe
MainWindow mainWindow;
mainWindow = new MainWindow(); MainWindow e assegno il riferimento
alla variabile mainWindow
mainWindow.show();
}
Invio il messaggio show all’oggetto il cui
}
mainWindow
mw
Account
MainWindow
show
riferimento è contenuto nella variabile
mainWindow
Metodo principale (main)
Gianpaolo Cugola
Università
della
Svizzera
I taliana
54
Dichiarazione di variabili riferimento
Università
della
Svizzera
I taliana
55
Creazione di oggetti - 1
• Per creare una nuova istanza della classe C si invia il
messaggio new alla classe con la notazione:
new C()
• Variabili riferimento sono dette le variabili usate per
contenere il riferimento ad un oggetto
• Sintassi:
< nome classe> < nome variabile>
• Esempio:
MainWindow mainWindow;
Customer paolo;
• A seguito di una dichiarazione viene riservato spazio
per contenere il riferimento ad un oggetto
mainWindow
Gianpaolo Cugola
– Esempio:
new MainWindow();
new Customer();
• Alcune classi permettono l’uso di parametri nella
creazione di istanze
c1
– Esempio:
new Customer(“Paolo Rossi”);
Account
Customer
name = “”
Customer
new
paolo
“PaoloRossi”
c2
Account
Customer
name = “Paolo Rossi”
Gianpaolo Cugola
Gianpaolo Cugola - Sistemi Informativi in Rete
56
Gianpaolo Cugola
57
Università
della
Svizzera
I taliana
Creazione di oggetti - 2
Università
della
Svizzera
I taliana
• Il messaggio new restituisce il riferimento
all’oggetto appena creato
• Bisogna conservare tale riferimento in una
variabile se si vuole poter inviare messaggi
all’oggetto
Differenze tra dichiarazione di variabili
riferimento e creazione di oggetti
Customer
customer;
customer
=
new
Customer( );
customer
=
new
Customer( );
customer
– Esempio:
Customer paolo;
paolo = new Customer(“PaoloRossi”);
Creato
Creatocon
conlala
prima
new. .
primanew
• Esercizio: Si provi cosa succede aggiungendo
una stringa come parametro della new per la
classe MainWindow
Gianpaolo Cugola
Università
della
Svizzera
I taliana
Customer
58
Invio di messaggi
• Esempio:
mainWindow.show();
• A seguito di un messaggio m l’oggetto ricevente esegue
il codice del metodo m
Gianpaolo Cugola
Gianpaolo Cugola - Sistemi Informativi in Rete
Gianpaolo Cugola
Università
della
Svizzera
I taliana
• Per istruire un oggetto a svolgere un compito gli si invia
un messaggio
• Sintassi:
<nome var>.<nome met.>(<parametri>);
60
Customer
Creato
new. .
Creatocon
conlalaseconda
secondanew
IlIlriferimento
riferimentoalalprimo
primo
oggetto
oggettoCustomer
Customerèèperso.
perso.
Non
Nonc’è
c’èpiù
piùmodo
mododidi
accedere
all’oggetto.
accedere all’oggetto.
L’oggetto
L’oggettoverrà
verràdistrutto
distruttodal
dal
garbage
garbagecollector.
collector.
59
Valore di ritorno dei metodi
• Un metodo può restituire un valore...
• ... il valore può essere conservato in una variabile per
usarlo in futuro
– Esempio:
String name;
Customer pino = new Customer(“Pino Rossi”);
name = pino.getName();
Gianpaolo Cugola
61
Università
della
Svizzera
I taliana
Le componenti di un programma
Java
Università
della
Svizzera
I taliana
Tre tipi di commenti
/*
• Un programma Java è composto da:
This is a comment with
three lines of
Commento
Commentosu
supiù
piùlinee
linee
text.
– Commenti
– Istruzioni di importazione
– Definizione di classi
*/
// This is a comment
// This is another comment
// This is a third comment
Commento
Commentosu
susingola
singola
linea
linea
/**
* This class provides basic clock functions. In addition
* to reading the current time and today’s date, you can
Commento
Commentojavadoc
javadoc
* use this class for stopwatch functions.
*/
Gianpaolo Cugola
Università
della
Svizzera
I taliana
62
Commenti: corrispondenza tra
delimitatori iniziali e finali
Università
della
Svizzera
I taliana
Package e importazione - 1
– Se non diversamente specificato le classi vengono inserite in un
package di default
/*
Comment number 1
• Per riferirsi ad una classe C parte di un package P si usa
la notazione:
P.C
*/
/*
Comment number 2
*/
– Esempio:
javabook.MainWindow mainWindow;
Questo
Questoèèparte
partedel
del
commento.
commento.
• Il package di default non ha nome quindi per riferirsi ad
una classe C che faccia parte del package di default si
usa il solo nome della classe
/*
/*
This is a comment
*/
63
• Le classi Java sono raggruppate in package
/* This is a comment on one line */
/*
Gianpaolo Cugola
– Esempio:
C prova;
Errore:
Errore:non
nonesiste
esisteilil
delimitatore
delimitatoreiniziale.
iniziale.
*/
Gianpaolo Cugola
Gianpaolo Cugola - Sistemi Informativi in Rete
64
Gianpaolo Cugola
65
Università
della
Svizzera
I taliana
Package e importazione - 2
Università
della
Svizzera
I taliana
• L’istruzione di importazione permette di evitare
di dover inserire il nome del package di
appartenenza per le classi usate in un
programma
• Per definire una nuova classe si usa la sintassi:
class <nome classe> {
<Dichiarazione membri classe>
}
– I membri possono essere attributi o metodi
– Sintassi:
import <nome package>.<nomeclasse>
oppure
import <nome package>.*;
– Esempio:
import javabook.MainWindow;
import javabook.*;
import java.awt.image.*;
Gianpaolo Cugola
Università
della
Svizzera
I taliana
Definizione di classi
• Un file sorgente può contenere la definizione di più
classi di cui una sola pubblica
– La classe pubblica (di solito la prima) deve avere lo stesso
nome del file
• Un programma Java contiene la definizione di molte
classi, eventualmente definite in file diversi, di cui una
principale
– La classe principale di un programma è quella che contiene il
metodo main
66
Definizione di metodi - 1
Gianpaolo Cugola
Università
della
Svizzera
I taliana
• I metodi vengono invocati in risposta alla
ricezione di un messaggio
• Tutte le istanze di una classe hanno gli stessi
metodi
Definizione di metodi - 2
Modificatore
Modificatore
static
Tipo
Tiporestituito
restituito
void
Nome
Nome
main
Parametri
Parametri
(
String[ ] args
)
{
MainWindow
• Sintassi:
mainWindow;
mainWindow = new MainWindow();
Corpo
Corpodel
del
metodo
metodo
mainWindow.show( );
<modificatori> <tipo restituito> <nome>( <parametri> ) {
<corpo del metodo>
}
Gianpaolo Cugola - Sistemi Informativi in Rete
Modificatore
Modificatore
public
– Che sono infatti definiti come parte della classe
stessa
Gianpaolo Cugola
67
}
68
Gianpaolo Cugola
69
Università
della
Svizzera
I taliana
Un semplice programma - 1
Università
della
Svizzera
I taliana
• Problema: Dobbiamo scrivere un programma che
mostri il messaggio “I love Java”
• Alternativa 1: Possiamo costruire un oggetto di classe
MainWindow passando un parametro di tipo stringa
nel messaggio new per creare una finestra il cui titolo
coincida con il messaggio da visualizzare
• Alternativa 2: Usare una istanza della classe
MessageBox (parte del package javabook)
– Un MessageBox rappresenta una finestra di dialogo
contenente all’interno un testo scelto dall’utente (simile
all’alert di JavaScript)
– Un MessageBox non esiste mai da solo. H a sempre una
finestra principale come “padre”
– mainWindow = new MainWindow(“Il love Java”);
Gianpaolo Cugola
Università
della
Svizzera
I taliana
Un semplice programma - 2
• Tale finestra principale viene specificata al momento della
creazione di un MessageBox come parametro del messaggio new
• Esempio:
MainWindow mainWindow;
MessageBox mBox;
mainWindow = new MainWindow();
mBox = new MessageBox(mainWindow);
70
Un semplice programma - 3
Gianpaolo Cugola
Università
della
Svizzera
I taliana
71
Un semplice programma - 4
/*
Programma DisplayMessage
Il programma mostra il messaggio "I Love Java“ usando una
istanza della classe MessageBox per mostrare il testo.
*/
import javabook.*;
public class DisplayMessage {
public static void main(String[] args) {
MainWindow mainWindow;
MessageBox mBox;
mainWindow = new MainWindow("Display Message");
mBox = new MessageBox(mainWindow);
mainWindow.show();
mBox.show("I Love Java");
}
}
Gianpaolo Cugola
Gianpaolo Cugola - Sistemi Informativi in Rete
72
Gianpaolo Cugola
73
Università
della
Svizzera
I taliana
Un semplice programma - 5
Università
della
Svizzera
I taliana
isp
lay
M
ess
ag
e”
MainWindow MainWindow
mainWindow;
MessageBox mBox;
mainWindow =
new MainWindow(“Display Message”);
mBox = new MessageBox(mainWindow);
mainWindow.show();
mBox.show(“I love Java”);
new
DisplayMessage
“D
main
show
MessageBox
mainW
indow
new
mainWindow
show
mw
Account
MainWindow
Package javabook:
javabook: La documentazione
• Come fare per sapere quali classi
esistono, quali parametri posso usare per
il messaggio new, quali messaggi posso
inviare ai diversi oggetti,...
• Consultare la documentazione del
package javabook
– Disponibile in formato html a partire dalla
homepage del corso
show
mb
mBox
Account
MessageBox
“I love Java”
show
Gianpaolo Cugola
Università
della
Svizzera
I taliana
74
Esercizio
•
N el package javabook esiste una classe DrawingBoard che si
comporta come la MainWindow ma permette di disegnare
–
1.
2.
Fornisce metodi con i quali disegnare linee, rettangoli, cerchi, ...
Si legga la documentazione del package javabook per
apprendere l’uso della classe DrawingBoard
Si scriva un programma Java che apre una finestra e vi disegna
dentro una “casa”
Gianpaolo Cugola
Gianpaolo Cugola - Sistemi Informativi in Rete
76
Gianpaolo Cugola
75