OBIETTIVI DELLA LEZIONE
Un programma è un insieme di istruzioni che spiegano ad un computer come effettuare una certa operazione. Pressapoco come una ricetta per preparare una torta.
A differenza della ricetta per la torta, che ciascuno può suggerire all'amico nel modo che vuole, i programmi per computer devono essere scritti in un "linguaggio di programmazione", caratterizzato da un vocabolario di parole molto limitato e da una sintassi estremamente precisa che non lascia spazio ad ambiguità. Ci sono moltissimi linguaggi di programmazione: Fortran, Basic, Pascal, Modula 2 e 3, C, C++, Algol, Cobol, ..., Java.
Dal punto di vista del programmatore, il programma ideale sarebbe una cosa del genere:
Hei computer, per cortesia, scrivi "Hello World!" sul monitor. Grazie.
Il computer, dal canto suo, preferirebbe una cosa del genere:
0101 1101 0010 0100 1101 1001 1110 1011 0001 0100 1110 0100 1101 1001 1101 1011 0100 1101 1001 1110 1011 0001 0100 1110 0110 0101 0101 1000 1101 0110 ...
Ogni linguaggio di programmazione è un compromesso, più vicino all'uomo (C, Java) o alla macchina (Assembler). Vediamo, ad esempio, alcuni programmi COMPLETI e pronti per essere "compilati".
PROGRAM HELLOWORLD C Le prime sei colonne sono vuote WRITE(UNIT=*,FMT=*) 'Hello World!' END
#include <stdio.h> int main() { printf("Hello World!\n"); }
class Helloworld { public static void main(String args[]) { System.out.println("Hello World!"); } }
Per scrivere un programma sequenziale che risolva un problema ripercorriamo ogni volta a ritroso questa breve storia:
#include <stdio.h> int main() { int x = 1; int i; i=x+3; printf("Il risultato di i=x+3 e' %d" , i); }
i=x+3;diventa qualcosa del tipo (Microsoft Assembler):
mov eax, [x] add eax, 3 mov [i], eax
eax
è un registro del processore; [x]
è il contenuto della cella di memoria di indirizzo x
.
C:\somma Il risultato di i=x+3 e' 4 C:\
Sun (la ditta che lo ha sviluppato e ne detiene la proprieta del marchio) definisce Java:
A simple, object-oriented, network-savvy, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic language. [http://java.sun.com/docs/overviews/java/java-overview-1.html]
Chiaro, no?
Java non è solo un linguaggio di programmazione, ma una piattaforma basata su tre componenti fondamentali (li vedremo meglio dopo):
All'inizio degli anni '90, l'introduzione dei microprocessori in tutti i prodotti di
largo consumo apri un mercato nuovo per le aziende informatiche. In particolare,
Sun avvio un progetto chiamato "Green" che doveva intuire i nuovi trend e sviluppare
prototipi per anticipare il mercato.
Nasce così "Oak", un linguaggio di programmazione multipiattaforma che Sun cerca di
lanciare nel mercato dei set-top box televisivi per permettere l'interazione
dell'utente con la televisione via cavo. La scelta si rivelò un fallimento.
Nel frattempo, nel 1993 venne rilasciata la prima versione di NCSA Mosaic e il modo
di intendere internet, fino ad allora accessibile solo attraverso protocolli quali
telnet e gopher, cominciò rapidamente a cambiare. Sun aveva trovato il mercato
in cui inserire il suo nuovo prodotto, ribattezzato per l'occasione Java. In onore
della macchina del caffè davanti alla quale gli sviluppatori si incontravano assai
spesso visto i tempi assai stretti dello sviluppo.
L'accoppiata Netscape+Java si rivela da subito vincente: la rete può finalmente
servire anche per transazioni complesse alla portata dell'utente finale. Java grazie
alla indipendenza da una singola piattaforma è di fatto adatto ad applicazioni distribuite su
diverse piattaforme hardware.
Java è abbastanza recente. Basti pensare che fu presentato al
pubblico la prima volta il 23 Maggio 1995 ...
[http://java.sun.com/features/1998/05/birthday.html]
Consideriamo il nostro primo programma:
class Pax { public static void main(String[] args) { System.out.println("Pax in terra hominibus bonae voluntatis."); } }
Il file che lo contiene DEVE chiamarsi con il nome della classe contenuta nel file e avere estensione ".java". In pratica il file deve avere lo stesso nome che compare dopo la parola class nel file. Le classi hanno per convenzione un nome che inizia con una maiuscola; attenzione alle maiuscole quando salvate il file! Non serve un editor particolare, basta che sia un editor di testo: NO MSWord!
Il nostro obiettivo è eseguirlo. Per prima cosa dobbiamo compilarlo ed ottenere il bytecode eseguibile dalla JVM. Per compilarlo ci serve un compilatore Java. Sun lo fornisce gratuitamente con il "Java Software Developement Kit" o JDK: per farlo a casa scaricate ed istallate il file: JDK 5.0 Update 8.
Dalla riga di comando, digitiamo:
C:\javac Pax.java C:\
Il compilatore Javac ha prodotto il file Pax.class che contiene il bytecode per la JVM. Per eseguirlo dobbiamo invocare la JVM e chiederle di interpretare il file Pax.class:
C:\java Pax Pax in terra hominibus bonae voluntatis. C:\
Il programma è stato eseguito correttamente e ha stampato come richiesto una frase. Notate che non è stata specificata l'estensione .class del file. La JVM si aspetta che i files abbiano questa estensione. Rivediamo in uno schema i passi tipici del ciclo di sviluppo di un programma Java (cioè quello che abbiamo appena fatto).
Per oggi ci accontentiamo di familiarizzare con il linguaggio che dalla prossima lezione affronteremo in dettaglio. Vediamo un secondo esempio:
class Fibonacci { public static void main(String[] args) { int questo=1, precedente=1, prossimo; System.out.println(precedente); System.out.println(questo); while((prossimo=questo+precedente) < 100) { System.out.println(prossimo); precedente=questo; questo=prossimo; } } }
Un buon editor di testo gratuito è SciTE. E' installato nei laboratori e ve ne consiglio caldamente l'uso. Lo useremo anche per scrivere file HTML e PHP. Esiste anche per piattaforma Linux; in seguito vengono date istruzioni per la piattaforma Microsoft.
Procedura passo-passo
JAVA_SDK_DIRECTORY="C:\Programmi\Java\jdk1.5.0_08"in modo che contenga il percorso base della Java SDK sulla vostra macchina (cioè dove avete installato la JDK Java).
Se avete seguito le indicazioni dovreste avere abilitato l'help contestuale e premendo F1 vicino ad una parola chiave Java, PHP o HTML dovrebbe aprisi una pagina di help.
Un buon ambiente di sviluppo integrato freeware (che utilizzeremo in alcuni esercizi) è Eclipse che potete scaricare al sito http://download.eclipse.org/eclipse/downloads/ [vedi esercizio 4 del laboratorio per dettagli di installazione]. Per avere informazioni sulle caratteristiche dei metodi da utilizzare potete fare riferimento al seguente help in linea, http://java.sun.com/j2se/1.5.0/docs/api/. Vedremo durante un esercizio come utilizzare l’help contestuale.
JBuilder è un IDE (Integrated Developer Environment), cioè un ambiente di sviluppo molto più sofisticato di un semplice editor di testo. Può essere scaricato da http://www.borland.com/downloads/download_jbuilder.html (la versione Foundation è freeware ed è quella che utilizzeremo). E' un ottimo ambiente di sviluppo e sarà utilissimo quando impareremo a fare il debug di una applicazione.
BlueJ è un IDE sviluppato specificamente per corsi introduttivi di programmazione ad oggetti tramite Java. Il libro di testo suggerito, lo utilizza in alcuni casi. Lo potete trovare sul sito http://www.bluej.org/
Gel è un IDE (Integrated Developer Environment), cioè un ambiente di sviluppo più sofisticato di un semplice editor di testo. Può essere scaricato da http://www.gexperts.com/. E' un buon ambiente di sviluppo; purtroppo il progetto è in un momento di stand-by.
Un quarto ambiente di sviluppo freeware molto apprezzato è JCreator. Nella versione free manca però la possibilità di effettuare il debug. Lo potete trovare sul sito http://www.jcreator.com/
titano\miaDir\ \lez1e2\Fibonacci.java ... \lez3e4\(tutti i file della lezione 2) ....ma anche su un supporto personale (dischetto, chiavetta USB, posta elettronica..).
Esercizio 1
Per scrivere un programma non serve molto. Usando NOTEPAD, creare il file Helloworld.java copiando il programma sopra riportato, compilarlo da riga di comando ed eseguirlo. Suggerimento: per aprire la console cliccare Start->Esegui e digitare cmd.exe.
Esercizio 2
Aprire il file Helloworld.java con SciTE. Compilarlo premendo CTRL+F7. Eseguirlo premendo F5. Comodo, no?
Togliete ora il punto e virgola dalla 3 riga. Compilate il file dopo averlo salvato. Il compilatore protesta perchè trova un errore nel codice. Errori nei programmi sono piuttosto comuni e dovremo imparare a localizzarli e risolverli.
Cliccando sull'errore nella finestra di output (quella che si è aperta in basso) vi verrà evidenziata la riga di codice contenente l'errore. Correggetelo e ricompilate.
Esercizio 3
Utilizzando SciTE, create il file Lune.java copiando il seguente codice:
import java.io.*; class Lune { public static void main(String[] args) throws IOException { InputStreamReader flussoTesto = new InputStreamReader(System.in); BufferedReader bufferTastiera = new BufferedReader(flussoTesto); String lineaLetta; System.out.print("Quanti anni hai? "); lineaLetta = bufferTastiera.readLine(); int anni = Integer.parseInt(lineaLetta); System.out.print("In che mese sei nato (numero)? "); lineaLetta = bufferTastiera.readLine(); short mesi = Short.parseShort(lineaLetta); short numeroLune = (short)(12*anni + mesi); System.out.println("Durante la tua vita, hai visto " + numeroLune + " lune."); } }
Compilatelo premendo CTRL+F7 ed eseguirlo premendo F5. Per inserire l'input, selezionate la finestra di output di SciTE cliccandoci dentro.
Esercizio 4: Utilizziamo Eclipse
Eclipse è un IDE (Integrated Developer Environment) non un semplice editor di testo. Permette uno sviluppo facilitato di progetti complessi, ma in compenso richiede la creazione anche per una semplice operazione di un “progetto”. Per prima cosa va installato. Selezionate sul sito http://www.eclipse.org/downloads/index_project.php il progetto “JDT - Java Development Tools” e scaricate la versione più aggiornata nelle pagine successive. Eclipse non ha un installer, dovete semplicemente estrarre i files dall’archivio che avete scaricato nella cartella di vostra preferenza (ad esempio, c:\windows\programmi su Windows). Create quindi un collegamento all’eseguibile eclipse.exe in modo da averlo sempre a portata di mano. Una volta lanciato Eclipse, vi chiederà dove salvare le impostazioni ed i progetti che svilupperete. Scegliete una cartella di vostro gradimento.
Per prima cosa dobbiamo creare un progetto. Dal menù "File", scegliamo "New”, quindi “project”. Nella finestra che si apre selezioniamo “Java Project” e premiamo il tasto “Next”; quindi diamo un nome al progetto (Fibonacci) e infine “Finish”. Se il workbench del progetto non si apre automaticamente, ciccate sulla freccia (“Go to workbench”).
Creiamo ora un file all’interno del progetto. Selezioniamo “File”, “New”, “File”, quindi selezioniamo il progetto (Fibonacci), indichiamo il nome del file (“Fibonacci.java”) e infine premiamo “Finish”. Inserite il codice del secondo esempio visto a lezione.
Eclipse compila per voi il codice e vi informa di eventuali errori senza che voi dobbiate fare nulla. Lanciate ora l’esecuzione scegliendo dal menù “Run”, “Run as”, “Java Application”. Nella console in basso dovreste ottenete l’elenco dei numeri di Fibonacci minori di 100.
Inserite ora volontariamente un errore. Ad esempio, togliamo il punto e virgola alla fine della riga 10. Dopo aver salvato il file, Eclipse vi informa di un errore su quella linea con un pallino rosso a fianco. Se andate con il mouse sul pallino vi compare l’errore che il compilatore ha rilevato.
Durante lo sviluppo sarà utile avere un help contestuale a disposizione. Andando semplicemente con il mouse su di un metodo o un oggetto potete avere informazioni riassuntive immediate. Altrimenti, dopo essere andati con il cursore sul metodo o oggetto, premete shift+F2 per aprire un browser con l’help Javadoc completo.
Esercizio 5 (facoltativo)
Questo esercizio è FACOLTATIVO. Svolgilo SOLO se hai ultimato gli esercizi precedenti, che sono necessari per l'esame finale. Lo scopo dell'esercizio è quello di famigliarizzare con tipi diversi di IDE.
Utilizzando Gel, aprite il file Java Fibonacci.java creato nell'esercizio precedente. Compilate il file dal menù "Build" o premete CTRL+F9. Eseguitelo dal menù "Build".
©2006 Roberto Sassi