Abbiamo accennato più volte ad uno speciale metodo che può essere
contenuto nelle classi Java, noto col nome di costruttore:
oggi vedremo cosè, a cosa serve e come sfruttarlo al meglio
per i nostri scopi.
Innanzitutto occorre sapere che il costruttore è un metodo che viene
richiamato automaticamente da Java su un oggetto, quando questo
viene creato, e non può essere invocato direttamente come un metodo
normale.
Nella scorsa lezione abbiamo visto che lultima cosa che fa
loperatore new, quando si crea una nuova istanza di una classe,
è proprio quella di richiamare il costruttore della classe; tuttavia
non è obbligatorio che ogni classe definisca metodi costruttori:
se questi sono assenti, listruzione new su quella classe va
comunque a buon fine e loggetto viene generato.
Limportanza dei metodi costruttori consiste nel fatto che,
tramite essi, è possibile impostare i valori iniziali degli attributi,
richiamare determinati metodi in funzione di tali valori, richiamare
metodi di altri oggetti e impostare le proprietà iniziali delloggetto.
Le differenze principali tra costruttori e metodi normali sono due:
i costruttori hanno sempre lo stesso nome della classe;
i costruttori non restituiscono mai un valore.
Per definire un costruttore occorre semplicemente indicare il
nome della classe e la lista degli eventuali argomenti; ad es. nel
caso della classe Automobile potremmo così definirlo:
Automobile(String mrc, String
mdl, float capSerb, float livRis, float cns,
float qBenz, boolean ar, boolean af) {
marca = mrc;
modello = mdl;
capacitaSerbatoio = capSerb;
livelloRiserva = livRis;
consumo = cns;
quantitaBenzina = qBenz;
autoradio = ar;
antifurto = af;
}
Questo costruttore ha otto argomenti, che rappresentano rispettivamente:
la marca dellautomobile, il modello, la capacità del serbatoio,
il livello della riserva, il consumo, la quantità di benzina nel
serbatoio, la presenza dellautoradio e la presenza dellantifurto.
Con questo costruttore, per istanziare un oggetto di tipo Automobile
occorre utilizzare la seguente istruzione:
Automobile auto = new Automobile(Fiat, 500,
40, 5, 17, 30, true, false);
Con essa viene creato un oggetto di tipo Automobile di marca Fiat,
modello 500, con serbatoio da 40 litri, livello di riserva da 5
litri, in grado di percorrere 17 km con un litro, avente 30 litri
di benzina nel serbatoio, dotata di autoradio, ma sprovvista di
antifurto.
Notiamo che nel corpo del costruttore vengono effettuati degli assegnamenti
agli attributi capacitaSerbatoio, livelloRiserva e consumo, che
sono stati dichiarati final, cioè come valori costanti (v.
lez. 6): il costruttore è infatti lunico luogo in cui ciò
è possibile; al di fuori di esso ogni assegnamento di questo tipo
produrrà, in fase di compilazione, lerrore Can't assign
a second value to a blank final variable seguito dal nome
della costante che si è cercato di modificare.
Non solo: linizializzazione di valori costanti è obbligatoria.
Infatti se si omette di inizializzare il valore di una variabile
la compilazione del codice sorgente va a buon fine, mentre il compilatore
produrrà un errore per ogni variabile final non inizializzata.
Se ad es. dimenticassimo
di inizializzare il valore di capacitaSerbatoio, otterremmo lerrore:
Blank final variable 'capacitaSerbatoio'
may not have been initialized. It must be assigned a value in an initializer,
or in every constructor
In ogni caso, è opportuno che il programmatore si occupi di inizializzare
opportunamente TUTTI gli attributi della classe, al fine di evitare
comportamenti erronei degli oggetti.
Per ogni classe Java è possibile specificare più di un costruttore,
purché ognuno di essi abbia una serie di argomenti diversa per numero
e tipo.
In realtà Java permette, più in generale, di definire metodi con lo
stesso nome, ma diversi per segnatura.
Per segnatura di un metodo si intende il numero degli argomenti e
il tipo di dati o gli oggetti di ciascun argomento.
Ad es. potremmo stabilire dei valori di default per alcune variabili,
che consentano di utilizzare un costruttore più compatto.
Vedremo come sfruttare questa opportunità nella prossima puntata.
Torna all'indice Generale del corso di Corso di Java di Software Planet