Fondamenti di programmazione in Java Lezione III Laboratorio di Informatica Generale Scopo della lezione • Descrivere gli strumenti che utilizzeremo nel resto del corso per sviluppare programmi in java – UltraEdit – Java SDK • Imparare a scrivere un programma, a compilarlo e ad eseguirlo 1.2 Laboratorio di Informatica Generale Editor • Un editor è un’applicazione che fornisce strumenti per redigere, modificare e stampare dei testi • Alcuni editor hanno funzionalità avanzate, legate a specifici tipi di documenti da produrre • Sono esempi di editor Blocco note e Word 1.3 Laboratorio di Informatica Generale UltraEdit • UltraEdit è l’editor che noi utilizzeremo per scrivere i sorgenti dei programmi che studieremo nel corso • Si può scaricare dal sito http://www.ultraedit.com • E’ un programma shareware: è possibile utilizzarlo per un periodo limitato di tempo 1.4 Laboratorio di Informatica Generale UltraEdit 1.5 Laboratorio di Informatica Generale UltraEdit Barra dei menù Barra delle icone Tab dei file aperti Vista ad albero Area di lavoro 1.6 Laboratorio di Informatica Generale UltraEdit • E’ comodo per un programmatore perché – Permette di lavorare con più file contemporaneamente, passando da uno all’altro agendo semplicemente sul tab dei file aperti – Riconosce la sintassi di un sorgente scritto in Java e ne colora il testo corrispondente in modo specifico • Sono funzionalità implementate da molti editor 1.7 Laboratorio di Informatica Generale Java • 1991-1994 Sun lancia il progetto Stealth (poi rinominato Oak e poi ancora Java) • 1995 Sun presenta ufficialmente Java e HotJava; Netscape acquisisce la licenza di Java per il suo browser; Sun e Netscape annunciano Javascript; Microsoft annuncia di voler incorporare Java nel suo browser 1.8 Laboratorio di Informatica Generale Versioni di Java • Java 2 Standard Edition (J2SE) • Java 2 Micro Edition (J2ME) • Java 2 Enterprise Edition (J2EE) 1.9 Laboratorio di Informatica Generale Interpreti inizio editor sorgente debug interprete errori? no fine si 1.10 Laboratorio di Informatica Generale Interpreti Class HelloWorld { public static void main { System.out.println(“Hello”); } } esegui istruzione sorgente altre istruzioni? codifica istruzione no fine no si si prossima istruzione si controllo sintattico interprete errori? no errori? controllo semantico 1.11 Laboratorio di Informatica Generale Compilatori inizio editor 1 sorgente oggetto 2 4 3 eseguibile debug linker compilatore errori? no 1 si errori? no 2 3 loader si 4 errori? no si fine 1.12 Laboratorio di Informatica Generale Compilatori Class HelloWorld { public static void main { System.out.println(“Hello”); } } sorgente controllo sintattico no errori? si controllo semantico compilatore no errori? si fine 011001010110101001 101010110010101101 010100101010110101 010101011001010110 eseguibile 1.13 Laboratorio di Informatica Generale Virtual machine inizio editor 1 sorgente bytecode compilatore VM errori? no 1 si errori? no 2 debug si 2 fine 1.14 Laboratorio di Informatica Generale Virtual machine controllo sintattico compilatore sorgente Class HelloWorld { public static void main { System.out.println(“Hello”); } } no errori? controllo semantico si errori? si fine 011001010110101001 101010110010101101 010100101010110101 010101011001010110 bytecode altre istruzioni? esegui istruzione no si prossima istruzione codifica istruzione Java VM 1.15 Laboratorio di Informatica Generale Java SDK • Il Java Software Development Kit si può scaricare dal sito ufficiale della Sun http://java.sun.com, seguendo il link J2SE 1.4 SDK nell’area Top Downloads – selezionando la voce Download in corrispondenza del nostro sistema operativo (riga) e della colonna SDK 1.16 Laboratorio di Informatica Generale SDK? • SDK è una sigla che significa Software Development Kit • Indica un insieme di strumenti che permettono di scrivere, compilare ed eseguire un programma in Java • Chiunque vuole poter programmare in Java deve installare questi strumenti (o altri analoghi) 1.17 Laboratorio di Informatica Generale JRE? • JRE è una sigla che significa Java Runtime Environment • Indica un insieme di strumenti che permettono di eseguire un programma scritto in Java • Chiunque vuole poter eseguire un programma scritto in Java deve installare questi strumenti (o altri analoghi) 1.18 Laboratorio di Informatica Generale Istruzioni per il download • Dopo aver selezionato il link corrispondente al Java SDK del nostro sistema operativo è necessario – (leggere ed) accettare la licenza – scaricare sull’elaboratore un file piuttosto grosso (37Mb circa per Windows) – eseguirlo e seguire le istruzioni 1.19 Laboratorio di Informatica Generale Prima di cominciare… • Nello scrivere i nostri programmi ci atterremo alle seguenti regole – Tutti i file relativi a un programma risiederanno in una directory con lo stesso nome di quest’ultimo (all’interno della directory c:\java) – Il nome di un programma sarà scritto in caratteri minuscoli, a eccezione delle iniziali delle parole 1.20 Laboratorio di Informatica Generale HelloWorld.java /* Questo è il nostro primo programma scritto in java */ class HelloWorld { public static void main(String args[]) { System.out.println(“Hello, world!”); } } // Analizziamolo! 1.21 Laboratorio di Informatica Generale Compiliamolo! C:\java>cd HelloWorld C:\java\HelloWorld>dir Volume in drive C is Server Volume Serial Number is E0E9-242C Directory of C:\java\HelloWorld 14/10/2002 14/10/2002 14/10/2002 23.59 <DIR> 23.59 <DIR> 22.23 112 1 File(s) 112 2 Dir(s) 10.619.133.952 . .. HelloWorld.java bytes bytes free C:\java\HelloWorld>javac HelloWorld.java 1.22 Laboratorio di Informatica Generale Cosa è successo? C:\java\HelloWorld>dir Volume in drive C is Server Volume Serial Number is E0E9-242C Directory of C:\java\HelloWorld 14/10/2002 14/10/2002 14/10/2002 14/10/2002 23.59 <DIR> 23.59 <DIR> 23.59 427 22.23 112 2 File(s) 539 2 Dir(s) 10.619.133.952 . .. HelloWorld.class HelloWorld.java bytes bytes free C:\java\HelloWorld> 1.23 Laboratorio di Informatica Generale Eseguiamolo! C:\java\HelloWorld>java HelloWorld Hello, world! C:\java\HelloWorld > • L’unica (apparente) azione eseguita dal programma è quella di stampare il messaggio “Hello, world!” a video, andando a capo 1.24 Laboratorio di Informatica Generale Analizziamo il programma /* Questo è il nostro primo programma scritto in java */ class HelloWorld { public static void main(String args[]) { System.out.println(“Hello, world!”); } } // Analizziamolo! • Il testo racchiuso tra /* e */ rappresenta un commento e viene ignorato 1.25 Laboratorio di Informatica Generale Analizziamo il programma /* Questo è il nostro primo programma scritto in java */ class HelloWorld { public static void main(String args[]) { System.out.println(“Hello, world!”); } } // Analizziamolo! • Ciò che segue // rappresenta un commento e viene ignorato (fino al termine della riga) 1.26 Laboratorio di Informatica Generale Commenti • La presenza di commenti nel codice non ne modifica il comportamento … • … ma ne aumenta notevolmente la leggibilità • E’ quindi utile inserire commenti per chiarire i punti fondamentali di un programma 1.27 Laboratorio di Informatica Generale Commenti • Potremmo modificare il programma in /* Questo è il nostro primo programma scritto in java */ class HelloWorld { public static void main(String args[]) { System.out.println(“Hello, world!”); // Output del programma } } // Analizziamolo! • e l’esecuzione non varierebbe 1.28 Laboratorio di Informatica Generale Analizziamo il programma • Commenti a parte, il programma è delimitato dalla parola chiave class seguita dal nome del programma e da una coppia di parentesi graffe class HelloWorld { public static void main(String args[]) { System.out.println(“Hello, world!”); } } 1.29 Laboratorio di Informatica Generale Analizziamo il programma • In generale le parentesi graffe delimitano blocchi di codice • Diversi blocchi di codice seguono una diversa indentazione class HelloWorld { public static void main(String args[]) { System.out.println(“Hello, world!”); } } 1.30 Laboratorio di Informatica Generale Il blocco main() public static void main(String args[]) { System.out.println(“Hello, world!”); } • Rappresenta il blocco di istruzioni che viene eseguito quando si lancia il programma • Per ora non ci interesseremo delle parole chiave che precedono e seguono main 1.31 Laboratorio di Informatica Generale Output System.out.println(“Hello, world!”); • Quando viene eseguita l’istruzione System.out.println, il messaggio specificato entro i doppi apici viene stampato sullo schermo, seguito da un carattere di “a capo” • Il comando System.out.print ha lo stesso comportamento, ma non va a capo 1.32 Laboratorio di Informatica Generale Librerie • Java mette a disposizione una serie di insiemi di comandi e di oggetti deputati a risolvere particolari compiti • Oggetti con funzionalità simili o collegate sono raggruppati in un insieme che viene chiamato libreria • Alcune librerie possono far parte di altre librerie 1.33 Laboratorio di Informatica Generale Librerie • Per poter utilizzare una libreria è generalmente necessario includerla nel programma – import java.util.* include nel programma tutti i comandi della libreria – import java.util.Date include nel programma solamente l’oggetto Date • Alcune librerie, come java.lang, non necessitano di essere incluse 1.34 Laboratorio di Informatica Generale HelloDate.java /* HelloDate stampa la data corrente */ import java.util.*; public class HelloDate { public static void main(String args[]) { System.out.print("Sono le "); System.out.println(new Date()); } } 1.35 Laboratorio di Informatica Generale Eseguiamolo! C:\java\HelloDate>javac HelloDate.java C:\java\HelloDate>java HelloDate Sono le Wed Oct 16 14:47:11 CEST 2002 C:\java\HelloDate> 1.36 Laboratorio di Informatica Generale AreaRettangolo.java /* AreaRettangolo calcola l’area di un rettangolo */ public class AreaRettangolo { public static void main(String args[]) { int base=3; int altezza=4; System.out.print(“L’area è “); System.out.println(base*altezza); } } 1.37 Laboratorio di Informatica Generale Dati e variabili • In questo caso il programma deve fare riferimento a dei dati numerici che deve pertanto memorizzare • Per potersi riferire a questi dati il programma alloca due aree di memoria a cui assegna nomi univoci (base, altezza) • Chiamiamo tale aree variabili, e chiamiamo dati i valori in esso contenuti 1.38 Laboratorio di Informatica Generale Interattività • Un programma come AreaRettangolo sarebbe più utile se, invece di assegnare valori fissati a base e altezza, permettesse all’utente di specificarli a ogni esecuzione • Per fare questo è necessario introdurre dei comandi che permettano di ricevere l’input dalla tastiera 1.39 Laboratorio di Informatica Generale AreaRettangoloInterattivo.java /* AreaRettangoloInterattivo calcola l’area di un rettangolo */ public class AreaRettangoloInterattivo { public static void main(String args[]) { int base=new SavitchIn().readLineInt(); int altezza=new SavitchIn().readLineInt(); System.out.print("L’area è "); System.out.println(base*altezza); } } 1.40 Laboratorio di Informatica Generale SavitchIn.readLineInt()? • Possiamo pensare a SavitchIn.readLineInt() come a un comando che – attende che l’utente immetta un valore numerico – fornisce al programma tale valore • E’ la controparte di System.out.println() 1.41 Laboratorio di Informatica Generale SavitchIn.readLineInt() • Il comando readLineInt() fa parte dell’oggetto SavitchIn, che non è un oggetto distribuito con Java • Per poterlo eseguire all’interno dei nostri programmi dobbiamo inserire il file SavitchIn.class nella stessa directory dove risiedono i nostri sorgenti • Scaricate SavitchIn.class dal sito della didattica webcentrica 1.42 Laboratorio di Informatica Generale Eseguiamolo C:\java\AreaRettangoloInterattivo>javac AreaRettangoloInterattivo.java C:\java\AreaRettangoloInterattivo>java AreaRettangoloInterattivo 3 7 L’area è 21 1.43 Laboratorio di Informatica Generale Abbellimenti • In questo caso l’esecuzione del programma parte senza dare alcuna indicazione del fatto che il codice attende un’azione dell’utente (l’immissione di base e altezza) • E’ opportuno segnalare questo fatto all’utente tramite degli output opportuni 1.44 Laboratorio di Informatica Generale AreaRettangoloInterattivo.java public class AreaRettangoloInterattivo { public static void main(String args[]) { System.out.print("Inserisci la base "); int base=new SavitchIn().readLineInt(); System.out.println(); System.out.print("Inserisci l'altezza "); int altezza=new SavitchIn().readLineInt(); System.out.println(); System.out.print("L’area è "); System.out.println(base*altezza); } } 1.45 Laboratorio di Informatica Generale Esercizi • Implementate HelloWorld • Riscrivete HelloWorld modificando – il messaggio che viene stampato – aggiungendo altri messaggi – sostituendo println con print e vedendo come viene modificata l’esecuzione del programma (attenti agli spazi!) • Implementate HelloDate • Implementate AreaRettangolo 1.46 Laboratorio di Informatica Generale Esercizi • Implementate le due versioni di AreaRettangoloInterattivo • Cosa succede se durante l’esecuzione di AreaRettangoloInterattivo l’utente immette dei valori che non sono numerici? E se immette dei valori non interi? • Scrivete un programma che accetta in input l’area e la base di un rettangolo e ne calcola l’altezza 1.47 Laboratorio di Informatica Generale Esercizi • Che succede se nel programma precedente immettiamo 0 come valore per la base? • Provate a inserire deliberatamente degli errori in alcuni dei programmi che abbiamo scritto, e verificate come cambia il comportamento del compilatore 1.48