Nellultima lezione abbiamo visto alcuni metodi della classe
Automobile che ci consentono di accedere in maniera
controllata ad alcuni attributi privati.
Laccesso ad una variabile può essere in lettura o in scrittura,
a seconda che si voglia conoscerne il valore o assegnargliene uno.
Una convenzione indicata da Sun è quella di creare, per una variabile
nomeVariabile di tipo tipoVariabile, dei metodi di lettura aventi
la seguente struttura:
public tipoVariabile getNomeVariabile()
{
return nomeVariabile;
}
e metodi di scrittura del tipo:
public void setNomeVariabile(tipoVariabile
valore) {
nomeVariabile = valore;
}
Supponiamo di voler definire due metodi, rispettivamente per leggere
e scrivere la variabile autoradio della nostra classe Automobile.
In accordo con tale convenzione, potremo scrivere:
public boolean getAutoradio()
{
return autoradio;
}
e:
public void setAutoradio(boolean tf) {
autoradio = tf;
}
Analogamente potremmo operare per la variabile antifurto.
Per le costanti non possiamo definire un metodo di scrittura, perché
ogni operazione di assegnamento al di fuori del metodo costruttore
verrebbe rilevata come errore in fase di compilazione.
Nel nostro caso, aggiungiamo alla classe Automobile
i seguenti metodi:
public float getCapacitaSerbatoio() {
return capacitaSerbatoio;
}
public float getLivelloRiserva()
{
return livelloRiserva;
}
Ovviamente è possibile definire metodi di lettura e scrittura anche
per gli attributi non privati; ad es., potremmo definire un metodo
che ci restituisca una stringa contenente la marca e il modello
dellautomobile, il cui corpo sarà:
public String getMarcaModello()
{
return marca + "
" + modello;
}
In questo metodo abbiamo utilizzato la concatenazione di tre stringhe
per ottenerne una; la seconda stringa (costituita solo da uno spazio)
è necessaria perché altrimenti concateneremmo le variabili marca
e modello attaccando luna allaltra senza alcuno spazio
in mezzo.
Loperazione di concatenazione di stringhe può essere effettuata
per mezzo delloperatore +, il cui risultato è ununica
stringa contenente tutte le stringhe collegate da tale operatore.
Una possibilità interessante offerta da Java è quella di concatenare
un tipo primitivo con una stringa.
Se ad es. volessimo utilizzare in una stringa il valore di una variabile
booleana, potremmo scrivere:
boolean tf = true;
String s = Il valore di tf è: + tf;
In questo esempio la variabile s contiene la stringa Il valore
di tf è: true.
Allo stesso modo potremmo utilizzare nel metodo getMarcaModello()
il carattere spazio ( ), invece di una stringa composta
da un solo spazio ( ).
Finora sappiamo come definire una classe, come dichiarare i suoi
attributi e i suoi metodi, ma non abbiamo ancora visto in che modo
possiamo creare oggetti a partire da una data classe.
La dichiarazione di un oggetto appartenente alla classe è semplice,
ed è uguale alla dichiarazione di una qualsiasi altra variabile,
ad es. con listruzione:
Automobile auto;
viene dichiarato un oggetto di tipo Automobile che si chiama auto.
Tuttavia se subito dopo facessimo un qualsivoglia riferimento
ad essa, ad es.:
boolean af = auto.getAntifurto();
ci verrebbe segnalato, in fase di compilazione, un errore di sintassi.
Infatti loggetto auto è stato dichiarato ma non esiste ancora,
e per poterlo creare occorre utilizzare loperatore new.
Per creare un oggetto nomeOggetto appartenente alla classe NomeClasse,
si usa una istruzione del tipo:
nomeOggetto = new NomeClasse();
Così, per creare il nostro oggetto auto, potremo scrivere:
auto = new Automobile();
Le parentesi tonde dopo il nome della classe sono importanti e non
possono essere omesse; il loro contenuto può essere vuoto oppure
consistere di una lista di argomenti, il cui numero e tipo sono
definiti da ogni classe per mezzo di un metodo speciale, detto costruttore.
Quando si invoca loperatore new, Java provvede automaticamente
a:
Creare una nuova istanza della classe indicata;
Allocare la memoria necessaria a contenere quella istanza;
Richiamare il metodo costruttore della classe.
Nella prossima puntata vedremo come dichiarare i costruttori per
le nostre classi.
Torna all'indice Generale del corso di Corso di Java di Software Planet