A partire da questa lezione cominceremo a costruire la nostra prima
applicazione.
Supponiamo di dover lavorare con una classe Automobile,
della quale abbiamo rilevato le seguenti qualità:
- marca
- modello
- capacità del serbatoio
- quantità di benzina nel serbatoio
- livello della riserva
- consumo (numero di Km con un litro)
- presenza dellautoradio
- presenza dellantifurto
Ovviamente queste non sono le uniche qualità di unautomobile,
anzi, non sono nemmeno le prime che ci verrebbero in mente se ci
venisse chiesto di elencarne alcune.
La scelta degli attributi è un passo importante nella progettazione
di classi Java e va fatta tenendo in considerazione lutilizzo
cui è destinata la classe; nel nostro caso creeremo unapplicazione
nella quale non useremo attributi come il colore, la velocità massima,
laccelerazione, etc., per cui ci limiteremo (per ora) a considerare
solo queste.
Ognuna di queste qualità può essere espressa con una variabile,
ossia con un elemento in cui è possibile memorizzare informazioni
di vario tipo durante lesecuzione del programma.
Il contenuto di una variabile può essere modificato (ciò giustifica,
appunto, il nome variabile) allinterno della sua regione di
visibilità, detta scope.
Lo scope di una variabile è quella porzione di codice nella
quale essa è raggiungibile, ossia può essere letta ed eventualmente
modificata.
Questo concetto ci potrà essere più chiaro dopo aver fatto una serie
di premesse.
In Java una variabile può essere:
variabile istanza, utilizzata per definire gli attributi
di un oggetto;
variabile di classe, utilizzata per definire attributi
di unintera classe di oggetti;
variabile locale, utilizzata allinterno di metodi
e blocchi di istruzioni.
Ogni variabile è caratterizzata da un nome e da un tipo, e il suo
valore iniziale può essere assegnato nel momento stesso in cui viene
creata.
Scriviamo il corpo della nostra classe:
class Automobile {
String marca, modello;
float capacitaSerbatoio, livelloRiserva, consumo, quantitaBenzina;
boolean autoradio, antifurto;
}
E possibile assegnare un valore ad una variabile tramite un
segno di uguale (=) interposto tra il nome della variabile (a sinistra)
e il valore da assegnare (a destra), ad es:
marca = Ferrari;
consumo = 5;
autoradio = true;
Quando si definisce una variabile istanza o di classe, viene assegnato
un valore iniziale di default a seconda del tipo di informazione
in essa contenuta: 0 per le variabili numeriche; \0 per
i caratteri; false per i booleani e null per gli oggetti.
Allinterno di una classe è possibile riferirsi a tutti i suoi
attributi, ossia a tutte le sue variabili istanza, mentre le variabili
locali sono accessibili solamente allinterno del blocco in
cui sono definite.
Un blocco è una porzione di istruzioni Java racchiuse tra
parentesi graffe.
Supponiamo che da qualche parte, allinterno della nostra
classe ci sia un blocco di questo tipo:
{
...
float f3 = livelloRiserva;
{
int i = 3;
float f1 = quantitaBenzina;
float f2 = f1 - f3;
int k = j + i + 1;
}
int j = i;
}
...
A parte la banalità del codice, possiamo notare che abbiamo inserito
un blocco allinterno di un altro blocco più grande, e che
dentro il blocco interno sono state dichiarate quattro variabili,
per ognuna delle quali è stata fatta contestualmente unoperazione
di assegnamento.
Le variabili i, k, f1 e f2 sono variabili locali al blocco interno
e sono visibili solo allinterno di esso.
j e f3 sono locali al blocco esterno, per cui non sono visibili
al di fuori di esso, ma è possibile utilizzarli nei blocchi interni:
ciò rende possibile lassegnamento fatto ad f2.
Poiché le variabili istanza (gli attributi) di una classe sono
visibili in tutto il corpo della classe, è possibile assegnare quantitaBenzina
ad f1 e livelloRiserva ad f3.
Il codice di esempio contiene due errori, che è importante rilevare:
Sebbene j sia dichiarato nel blocco esterno, essa non è accessibile
in quello interno, perché quando questo viene eseguito, essa non
è stata ancora dichiarata (cioè non esiste), per cui lassegnamento
fatto a k non è possibile;
Anche lassegnamento fatto a j è un errore che viene rilevato
in fase di compilazione, perché al termine del blocco interno, i
non è più visibile, anzi possiamo dire che in tal punto i non esiste
più.
Ciò vuol dire che lo scope di una variabile ha inizio nel punto
in cui essa è dichiarata e ha termine alla fine del blocco che contiene
la sua dichiarazione.
Notiamo che poiché tutto il corpo di ogni classe è racchiuso entro
parentesi graffe, anche le variabili istanza rientrano in questa
definizione (il blocco che contiene la dichiarazione è la classe
e quindi ogni blocco che la classe contiene può accedere a tali
variabili).
Approfondiremo i modi con cui è possibile utilizzare le variabili
nella prossima puntata.
Torna all'indice Generale del corso di Corso di Java di Software Planet