Fondamenti di programmazione in Java Lezione III
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
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
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
UltraEdit 1.5
UltraEdit Barra dei menù Barra delle icone Tab dei file aperti Vista ad albero Area di lavoro 1.6
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
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
Versioni di Java Java 2 Standard Edition (J2SE) Java 2 Micro Edition (J2ME) Java 2 Enterprise Edition (J2EE) 1.9
Interpreti inizio editor sorgente interprete debug si errori? no fine 1.10
Interpreti Class HelloWorld { public static void main { System.out.println( Hello ); sorgente interprete altre istruzioni? si prossima istruzione no controllo sintattico fine si errori? no esegui istruzione si controllo semantico codifica istruzione no errori? 1.11
Compilatori inizio editor sorgente compilatore errori? no si oggetto linker si errori? no 1 2 3 4 1 2 3 4 eseguibile debug loader si errori? no fine 1.12
Compilatori Class HelloWorld { public static void main { System.out.println( Hello ); sorgente controllo sintattico errori? si fine no controllo semantico compilatore 011001010110101001 101010110010101101 010100101010110101 010101011001010110 eseguibile errori? si no 1.13
Virtual machine inizio editor sorgente compilatore errori? no si 1 2 1 2 bytecode VM si errori? no fine debug 1.14
Virtual machine sorgente Class HelloWorld { public static void main { System.out.println( Hello ); controllo sintattico compilatore errori? si fine no controllo semantico bytecode 011001010110101001 101010110010101101 010100101010110101 010101011001010110 altre istruzioni? prossima istruzione si errori? si no esegui istruzione codifica istruzione Java VM 1.15
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
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
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
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
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
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
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 23.59 <DIR>. 14/10/2002 23.59 <DIR>.. 14/10/2002 22.23 112 HelloWorld.java 1 File(s) 112 bytes 2 Dir(s) 10.619.133.952 bytes free C:\java\HelloWorld>javac HelloWorld.java 1.22
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 23.59 <DIR>. 14/10/2002 23.59 <DIR>.. 14/10/2002 23.59 427 HelloWorld.class 14/10/2002 22.23 112 HelloWorld.java 2 File(s) 539 bytes 2 Dir(s) 10.619.133.952 bytes free C:\java\HelloWorld> 1.23
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Eseguiamolo C:\java\AreaRettangoloInterattivo>javac AreaRettangoloInterattivo.java C:\java\AreaRettangoloInterattivo>java AreaRettangoloInterattivo 3 7 L area è 21 1.43
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
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
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
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
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