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