Struttura di un programma, variabili.


Java Sun

Earthweb
(ex Gamelan)

Jars

Java Boutique

Java Center

PIP






 JSem: 1.4

   La struttura generale di un'applet (o di un programma) è la seguente:

  • Dichiarazione delle variabili
  • Inizializzazione
  • Corpo del programma
  • Fine del programma

  • Certo alcune applets molto semplici (cf Hello World) non presentano tutte queste fasi.

       Variabili: A priori è intuittivamente chiaro cosa sia una variabile; attenzione però perchè le cose non sono così semplici.
    Una variabile è un spazio di memoria ("una scatola") nel quale si possono registrare dei dati (questi dati sono il valore della variabile). Non confondere la variabile con il suo valore!
    In Java, una variabile può essere sia un tipo primitivo (int, long, float, byte, short, double, char, boolean) sia un oggetto qualsiasi.
    Per dichiarare una variabile bisogna precisarne il tipo (o la classe). Per esempio la dichiarazione:
    n = 10;
    risulterà in un errore di compilazione ("undefined variable or class"); la dichiarazione giusta è:
    int n = 10;
    E' in questo senso che Java, contrariamente a Javascript, è un linguaggio fortemente tipato.
    La dichiarazione:
    int n;
    va bene e dichiara una variabile n di tipo int senza nessun valore assegnato, per default viene assegnato il valore 0 a n. Per dichiarare più variabili si può anche usare la seguente istruzione:
    int n,m,p,q;
    che dichiara le variabili n, m, p, q di tipo int
    . Nello stesso modo si può dichiarare una variabile oggetto:
    String Str;
    dichiara una variabile Str di tipo String (abbiamo già visto che le stringhe sono degli oggetti).

    Attenzione! dichiarare una variabile oggetto NON crea l'oggetto!

    cioè dopo quella dichiarazione l'oggetto Str non esiste. Una variabile oggetto è solo un riferimento all'oggetto (uno spazio di memoria con un puntatore all'oggetto). Se dopo quella dichiarazione provate ad usare quella variabile (senza avere creato l'oggetto) verrà sollevata un'eccezione; facciamo un esempio semplice:

    import java.applet.*;
    import java.awt.*;
    
    public class HWo extends Applet{
    
    String Str;
    
    public void paint(Graphics g){
    	g.drawString(Str, 10, 30);
    	}
    }
    

    Se provate ad eseguire questa applet con l'appletviewer vedrete comparire un lungo messaggio la cui parte rilevante è:
    java.lang.IllegalArgumentException: String pointer is NULL!
    (se usate un browser, per esempio IE, in "visualizza" aprite la console Java e vedrete un messaggio analogo).
    Infatti il valore di default di una variabile oggetto è null, come già detto la variabile non è l'oggetto ma una referenza, un puntatore e questo puntatore non può essere null (lo stesso fenomeno è la causa di una NullPointerException).
    Invece il seguente codice:
    import java.applet.*;
    import java.awt.*;
    
    public class HWo extends Applet{
    
    String Str = new String();
    
    public void paint(Graphics g){
    	g.drawString(Str, 10, 30);
    	}
    }
    

    non solleva eccezioni. La differenza tra i due codici è che nel secondo abbiamo creato l'oggetto con l'istruzione new String();. In generale, per creare un oggetto della classe, diciamo, MiaClasse, si usa l'operatore new:
    MiaClasse mioOggetto = new MiaClasse();
    questa istruzione crea un'istanza della classe MiaClasse (un oggetto è un'istanza di una classe), la struttura della dichiarazione è : tipo (primitivo, interfaccia o classe) qui: MiaClasse; nome della variabile, qui: mioOggetto seguito da = e l'operatore new. I tipi primitivi, che non sono oggetti, non hanno bisogno dell'operatore new.
    L'operatore new alloca dinamicamente (cioè in fase di esecuzione) della memoria per un oggetto e restituisce un riferimento ad esso, mentre la dichiarazione:
    String Str;
    dichiara la variabile Str, cioè un riferimento di un oggetto String, ma a questo punto il valore è null, cioè Str non punta a un vero e proprio oggetto. Invece la dichiarazione:
    Str = new String();
    alloca la memoria per un vero e proprio oggetto String e assegna un riferimento ad esso a Str; Str contiene l'indirizzo di memoria dell'oggetto String (cioè dei vari dati che compogono l'oggetto).


       Adesso che abbiamo visto come dichiarare le variabili, diciamo due parole su come usare queste variabili.
    Il corpo di un programma può contenere sottoprogrammi ("subroutines"), in Java questi sottoprogrammi si chiamano "metodi". Per esempio se vogliamo fare la contabilità, in Euro, di una società le cui operazioni sono in Lire, sarà utile avere una subroutine che converte le Lire in Euro. Per definire una subroutine useremo delle variabili (per es. int Lire;), queste variabili servono solo per la subroutine, non per il corpo del programma, perciò vengono chiamate variabili locali. D'altra parte avremo anche delle variabili globali, che servono per il corpo del programma. Il fatto è che una variabile locale non può essere usata in ambito globale; l'ambito nel quale viene dichiarata una variabile ne determina la portata, lo scopo ("scope"). Segue un semplice esempio per illustrare questo fenomeno, torneremo comunque più avanti su questa questione, ma per il momento, teniamo presente che una variabile ha uno scopo, determinato dall'ambito nel quale è stata dichiarata.




     next		content		previous