Corso di Java

Metodi e costruttori II

 

Nell’ultima lezione abbiamo visto alcuni metodi della classe “Automobile” che ci consentono di accedere in maniera controllata ad alcuni attributi privati.
L’accesso 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 dell’automobile, 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 l’una all’altra senza alcuno spazio in mezzo.

L’operazione di concatenazione di stringhe può essere effettuata per mezzo dell’operatore +, il cui risultato è un’unica 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 l’istruzione:

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 l’oggetto auto è stato dichiarato ma non esiste ancora, e per poterlo creare occorre utilizzare l’operatore 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 l’operatore 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