Introduzione e strumenti di lavoro

Venerdì, 24 Settembre 2004

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

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.");
  }
}

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

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 aprisi una pagina di help.

JBuilder (necessario)

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 (facoltativo)

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 (obsoleto)

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.

JCreator (facoltativo)

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/

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 JBuilder

JBuilder è un IDE più sofisticata. Per prima cosa dobbiamo creare un progetto. Dal menù "File", scegliamo "New Project...". Diamo un nome al progetto ("Fibonacci") e scegliamo una directory dove salvarlo (ricordatevi in quale directory avete creato il progetto!). Quindi scegliamo "Next" due volte e quindi "Finish".

Ora dobbiamo creare un file vuoto: dal menù "File" scegliamo "New File...". Chiamiamo il file "Fibonacci.java" (attenti alla maiuscola iniziale) e premiamo "OK". Inserite il codice del secondo esempio visto a lezione.

JBuilder ci permette di compilare contemporaneamente tutti i files contenuti in un progetto, e ciò è molto comodo per progetti di dimensioni significative. Dal menù "Project", scegliete "Make Project Fibonacci.jpx" o premete CTRL+F9.

Anche eseguire la prima volta il progetto non è immediato. Dal menù "Run" scegliamo "Run Project" o premiamo F9. Ci si aprirà una finestra che ci chiede quale sia la classe da eseguire. Questo perché in grandi progetti le classi possono essere centinaia. Vicino al campo "Main class" premiamo il bottone con i tre punti "...", quindi apriamo la pagina "Browse" e selezioniamo la nostra classe "Fibonacci". Premendo "OK" due volte il programma viene eseguito e il risultato viene mostrato nella console sotto.

Quanta fatica! Ora però basta premere CTRL+F9 per compilare il progetto e F9 per eseguirlo. La fatica viene ripagata subito se abbiamo più di un file nel progetto!

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

©2005 Roberto Sassi