La call by value è il metodo che riceve una copia del
valore passato come parametro ed ogni modifica al
parametro che avviene all’interno del metodo non
influisce sulla variabile originale (utilizzato da Java e dai
tipi primitivi).
La call by reference è il metodo che riceve l’indirizzo
della variabile, la quale permette di modificare il valore
della variabile originale.
• Tipi primitivi, quando si passano a un metodo, il
valore viene copiato e qualsiasi modifica al
parametro all’interno del metodo non influisce sulla
variabile originale;
• Riferimenti ad oggetti, viene copiato il riferimento
dell’oggetto (non l’oggetto stesso). Si può
comunque modificare lo stato dell’oggetto a cui il
riferimento punta.
GETTER E SETTER
Un metodo mutatore (setter) è un metodo che consente
di cambiare lo stato dell’oggetto sul quale è invocato.
Un metodo accessore (getter) è un metodo che non
cambia l’oggetto sul quale è invocato.
THIS
La keyword this viene utilizzata in un oggetto per fare
riferimento all’istanza corrente della classe.
I principali utilizzi di this:
• Risoluzione di ambiguità, quando i nomi degli
attributi (di istanza) e dei parametri (dei metodi)
coincidono viene utilizzato per distinguere
l’attributo dal parametro;
• Chiamare altri metodi, può essere utilizzato per
invocare un metodo;
• Chiamare un costruttore da un altro, può essere
utilizzato per chiamare un altro costruttore (della
stessa classe).
Chiamata ad un altro costruttore
Quando la prima istruzione di un costruttore è this() il
costruttore sta chiamando un altro costruttore della
stessa classe. Questa tecnica è utile per riutilizzare
codice comune tra i costruttori.
Metodi parametri impliciti ed espliciti
Quando un metodo viene invocato su un oggetto il
parametro implicito è l’oggetto stesso su cui il metodo
viene eseguito (non è visibile nella dichiarazione del
metodo).
È possibile fare riferimento esplicito al parametro
implicito usando la keyword this.
Parametri espliciti
I parametri espliciti sono i valori passati tra le parentesi
tonde quando si definisce o si invoca un metodo (sono
specificati esplicitamente nella dichiarazione del
metodo). Possono essere zero, uno o più.
Usare this permette di distinguere quando si fa
riferimento agli attributi dell’oggetto e quando si usano
variabili locali nel metodo.
Modificatore di non accesso final
Gli attributi dichiarati come final devono essere
inizializzati quando viene creato l’oggetto della classe e
una volta assegnato un valore a un attributo final non
può più essere modificato (read-only).
È particolarmente utile per i tipi primitivi e per le classi
immutabili (String). Se viene applicato agli oggetti rende
immutabile solo il riferimento all’oggetto ma non gli
attributi dell’oggetto stesso.
Inizializzazione di default degli attributi
Se non viene specificato esplicitamente un valore per
un attributo nel costruttore, Java lo inizializza
automaticamente con un valore di default (che dipende
dal tipo). Tuttavia, fare affidamento sull’inizializzazione
di default non è una buona pratica poiché potrebbe
portare a valori non desiderati.
Differenza tra attributi e variabili locali:
• Gli attributi vengono inizializzati automaticamente;
• Le variabili locali in un metodo non vengono
inizializzate automaticamente (devono essere
assegnate esplicitamente).
L’inizializzazione esplicita può avvenire:
• Nel costruttore, per fornire valori specifici per
ciascuna istanza;
• Fuori dal costruttore, per evitare la ripetizione
dell’inizializzazione.
• Blocchi di inizializzazione, inserendo il codice di
inizializzazione in un blocco di codice.
Blocchi di inizializzazione
Il blocco di inizializzazione viene eseguito ogni volta che
un oggetto viene costruito prima dell’esecuzione del
codice del costruttore.
Ordine di esecuzione alla creazione di un oggetto:
1) Se il costruttore chiama un altro costruttore (this),
quel costruttore viene eseguito per primo;
2) Inizializzazione predefinita degli attributi, tutti gli
attributi vengono inizializzati al loro valore di
default;
3) Esecuzione dei blocchi di inizializzazione,
nell’ordine in cui sono definiti;
4) Esecuzione del costruttore, viene eseguito il corpo
del costruttore.
Attributi e variabili static
Un attributo dichiarato come static è un attributo per il
quale esiste solo una copia per tutta la classe. Mentre
gli attributi di istanza (non-static) sono separati per ogni
istanza della classe.
Si può accedere agli attributi static utilizzando
direttamente il nome della classe senza creare
un’istanza mentre gli attributi di istanza necessitano di
istanze della classe.
Blocchi di inizializzazione statici
Per inizializzare attributi static è buona norma utilizzare
un blocco di inizializzazione statico.
Metodi static
Un metodo static è un metodo che non opera sugli
oggetti della classe e non può accedere direttamente
agli attributi e ai metodi non-static della classe.
-
Programmazione JAVA
-
Programmazione ad oggetti e Java (5)
-
Programmazione - programmazione Java 1
-
Appunti di Programmazione ad oggetti - Java