Introduzione e strumenti di lavoro

Giovedì, 25 Settembre 2008

OBIETTIVI DELLA LEZIONE

  1. Capire cosa è un programma e come possa diventare eseguibile su un processore attraverso la compilazione.
  2. Capire cosa sia la piattaforma Java, quali siano gli strumenti per necessari per utilizzarla e dove trovarli in rete.
  3. Scrivere, "compilare" ed eseguire un primo programma.

Cosa è un programma?

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.

Perché è necessario un programma?

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".

Brevissima storia della programmazione

A ritroso ...

Per scrivere un programma sequenziale che risolva un problema ripercorriamo ogni volta a ritroso questa breve storia:

JavaTM?

Sun (la ditta che lo ha sviluppato e ne detiene la proprietà 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):

Un po' di storia ufficiale

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]

La piattaforma Java

Il nostro primo programma Java

Consideriamo il nostro primo programma:

class Pax {
  public static void main(String[] args) {
    System.out.println("Pax in terra hominibus bonae voluntatis.");
  }
}

Un po' di anatomia ...




In pratica ...

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 6 Update 7.

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).


Un secondo programma

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;
    }
  }
}

Strumenti

SciTE (facoltativo ma consigliato)

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

Se avete seguito le indicazioni dovreste avere abilitato l'help contestuale e premendo F1 vicino ad una parola chiave Java, PHP o HTML dovrebbe aprirsi una pagina di help.

Eclipse (consigliato)

Un buon ambiente di sviluppo integrato (IDE, Integrated Developer Environment) 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/javase/6/docs/api/. Vedremo durante un esercizio come utilizzare l'help contestuale.

NetBeans (consigliato)

NetBeans è buon IDE open-source gratuito scritto in Java. Lo sviluppo di NetBeans è sostenuto direttamente da Sun Microsystems, e seppur non diffuso come Eclipse, è un IDE molto utilizzato. Lo potete scaricare direttamente dal sito http://www.netbeans.org/. Nell'esercizio 5 vedremo alcune note sull'installazione e l'utilizzo.

Lab

Raccomandazioni e prassi

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, cliccate 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: Utilizziamo NetBeans

Come abbiamo visto questa mattina, anche NetBeans è un IDE. Grazie all'integrazione di Matisse permette di creare facilmente anche GUI Swing [lo vedremo brevemente alla fine del corso].

Installazione. Sul sito http://download.netbeans.org/netbeans/6.1/final/ selezionate la versione "Java SE" che è sufficiente per il nostro corso.

Per prima cosa dobbiamo creare un progetto. Dal menù "File", scegliamo "New Project", quindi selezioniamo "Java Application" e premiamo il tasto "Next"; quindi diamo un nome al progetto (Fibonacci) e togliamo la spunta alla casella "Create Main Class". Infine selezioniamo "Finish".

Creiamo ora un file all'interno del progetto. Selezioniamo "File", "New File". Nella finestra che si apre selezioniamo il progetto (Fibonacci), indichiamo di voler creare una classe Java ("Java Class") in "File Types" e premiamo "Next". Nella successiva schermata digitiamo il nome della classe (che è anche il nome del file, "Fibonacci.java") e scegliamo "Finish".

Nel file appena creato inseriamo il codice del secondo esempio visto a lezione.

Anche NetBeans 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 Main Project". Nella console in basso dovreste ottenete l'elenco dei numeri di Fibonacci minori di 100.

Similmente a quanto visto nell'esercizio precedente, inserite ora volontariamente un errore. NetBeans vi informa di un errore su quella linea con un pallino rosso a fianco. Cliccando con il mouse sul pallino vi compare l'errore che il compilatore ha rilevato.

Per installare l'help contestuale, dovete per prima cosa scaricare il file della documentazione della gerarchia di classi standard di java, Java SE 6 Documentation. Per comodità vi suggerisco di mettere il file in C:\Programmi\Java. Quindi, in NetBeans, selezionate "Tools->Java Platform" e scegliete la scheda "Javadoc". Premete sul bottone "Add ZIP/Folder" e scegliete il file che avete appena scaricato.

Ora, quando volete consultare l'help dovete andare sull'oggetto o sul metodo e premere "Shift+F1".

©2008 Roberto Sassi