Corso di Java

Metodi e costruttori I

 

Dopo aver discusso sui tipi fondamentali con cui poter lavorare in Java, riprendiamo la definizione della nostra classe “Automobile”, che adesso ha la seguente struttura:

class Automobile {
    public String marca, modello;
    private final float capacitaSerbatoio, livelloRiserva, consumo;
    private float quantitaBenzina;
    private boolean autoradio, antifurto;
}


Se siete stati attenti, noterete che non era questa la forma in cui avevamo lasciato la nostra classe.
Infatti sono comparse due ulteriori parole chiave, public e private, che sono dette modificatori per il controllo di accesso, il cui compito è – appunto – quello di modificare la definizione delle nostre variabili, al fine di controllarne la modalità con cui è possibile utilizzarle.
In pratica viene usato il modificatore public quando si vuole che l’attributo sia visibile all’esterno della classe, mentre il modificatore private è utilizzato per impedire l’accesso a quell’attributo dall’esterno della classe.

Per accedere ad un attributo di un oggetto occorre utilizzare una sintassi del tipo:

nomeOggetto.nomeAttributo

Supponiamo di definire una classe “Proprietario” in cui dichiariamo un oggetto di tipo “Automobile”, ad es:

class Proprietario {
    Automobile auto;
}


all’interno di tale classe è possibile utilizzare un’istruzione del tipo:

auto.marca = “Ferrari”;

mentre se scrivessimo:

auto.quantitaBenzina = 40.3;

otterremmo un errore in fase di compilazione.
In questo modo è possibile nascondere all’esterno alcuni dettagli, anche se, nei casi pratici, è spesso necessario poter leggere o scrivere queste variabili.
Ad es. nella classe “Proprietario” vorremmo rendere possibile la lettura della quantità di benzina nel serbatoio e dare la possibilità di fare rifornimento.

In entrambi i casi ci occorre poter accedere in qualche modo alla variabile auto.quantitaBenzina.
In questi casi si definiscono dei metodi interni alla classe “Automobile”, che rappresentano l’unico modo che hanno le classi esterne per accedere alle variabili private.
Questa caratteristica di Java è molto potente, perché dà la possibilità a noi programmatori di controllare completamente il modo con cui le altre classi interagiscono con la nostra.
Oltre ai due precedenti, esiste un terzo modificatore per il controllo di accesso, protected, che verrà spiegato in seguito. I modificatori possono essere applicati non solo alle variabili, ma anche alle classi e ai loro metodi.
Un metodo Java ha la seguente struttura:

<modificatore di accesso> <tipo ritornato> <nome del metodo> (<elenco parametri>) { <istruzioni> }

Il modificatore di accesso può essere uno di quelli già visti per le variabili: è dunque possibile anche definire dei metodi interni utilizzabili solo in altri metodi della classe.
Il tipo ritornato può essere uno qualsiasi dei tipi fondamentali o un oggetto Java che costituisce la classe del valore restituito dal metodo; se il metodo non restituisce alcun valore si utilizza la parola chiave void.

L’elenco dei parametri è una serie di dichiarazioni di variabili separate da virgola.
Le istruzioni, ossia le operazioni eseguite dal metodo, sono contenute all’interno di una coppia di parentesi graffe.
Supponiamo di voler scrivere per la nostra classe un metodo che ci consenta di leggere la variabile quantitaBenzina, potremmo scrivere:

public float getQuantitaBenzina() {
    return quantitaBenzina;
}


Questo metodo è pubblico, ritorna un valore di tipo float e non ha parametri formali.
Adesso, se nella classe “Proprietario” utilizziamo l’istruzione:

float benzina = auto.getQuantitaBenzina();

il valore ritornato dalla funzione getQuantitaBenzina() verrà assegnato alla variabile benzina.

Ogni metodo dichiarato in modo da restituire un valore di un certo tipo deve restituire esplicitamente tale valore per mezzo dell’istruzione:

return <valore>;

Nel codice di esempio il nostro metodo non fa altro che restituire il valore della variabile quantitaBenzina al momento dell’invocazione del metodo.
Un metodo per fare rifornimento all’automobile può essere il seguente:

public void aggiungiBenzina(float litri) {
    quantitaBenzina = quantitaBenzina + litri;
}


Anche questo è un metodo pubblico, che non restituisce alcun valore (non ha bisogno dell’istruzione return) e che ha un solo parametro, litri, che indica quanti litri di benzina aggiungere a quella già esistente.

 

Torna all'indice Generale del corso di Corso di Java di Software Planet