ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Classi
OOP
Ereditarietà
Polimorfismo
Chiamata
Classi
Record
Istanze
Costruttori
Campi
this
Allocazione
Più costruttori
this()
Inizializzazioni
Riferimenti
Ordine
Metodi
Invocazione
Overloading
Attenzione
Finalizzazione
Static e Final
Campi statici
Blocco static
Metodi statici
Visibilità
Costanti
Package
import
import *
Classpath
L'interprete
Zip e Jar

<<< Campi >>>
Quando uso un campo mi riferisco alla istanza corrente

Una volta che ho definito una classe, posso creare diverse istanze della classe, e sono tutte diverse. Come dire, una volta che ho progettato una automobile posso realizzarne diverse utilizzando lo stesso progetto. O come dire che una volta creata una forma per i calchi in gesso, di calchi se ne possono realizzare innumerevoli. Tuttavia ogni istanza ha i suoi campi e i suoi metodi. E i metodi fanno riferimento ai campi. Ovviamente si vuole che un metodo faccia riferimento ai campi della particolare istanza. Il problema è: come legare i campi ai metodi? Qualcuno potrebbe pensare a qualche misterioso legame con sistemi nascosti che tengono traccia in maniera complicata di queste informazioni. Niente di tutto questo: l'associazione tra campi e metodi viene fatta invece dall'utilizzatore dell'oggeto. Vediamo come.

Consideriamo una semplice classe
class Num { 
    int n; 
    Num (int num) { 
        n = num; 
    } 
}

La classe più semplice che possiamo immaginare (a parte quella degenere, senza campi, che non fa nulla) è quella con un solo campo, mostrata nel listato precedente. Queste classi sono utili: per esempio la classe Integer di sistema di Java è simile a questa. È quello che si chiama una classe "pacco" (wrapper), non nel senso che rifila un bidone, ma nel senso che impacchetta in un oggetto un tipo primitivo. Nel nostro esempio, la Num ha un campo n, e un costruttore che inizializza il campo ad un valore specificato come parametro del costruttore.

Creiamo due oggetti:

Adesso mettiamo in pratica quello di cui abbiamo appena parlato: istanziamo due oggetti, come nel seguente listato:

Num a = new Num(1); 
Num b = new Num(2);
Abbiamo che la n di a (a.n) vale 1, mentre la n di b (b.n) vale due, e sono separate e distinte.

Il risultato è che creiamo due istanze diverse, ciascuna con un campo n, che ha un valore indipendente dall'altro. Infatti nella prima istanza il campo n vale 1 mentre nella seconda istanza il campo n vale due.

I costruttori (e i metodi) vengono invocati in un determinato "ambiente"

Di conseguenza è facile capire che esiste un meccanismo per distinguere i due oggetti. Dall'esterno è facile da capire: abbiamo la variabile a che punta al primo oggetto e la variabile b che punta al secondo oggetto. Ma bisogna anche rendersi conto che esiste un meccanismo per distinguere i due oggetti dall'interno (ovvero da codice che accede ai campi).

questo ambiente è l'oggetto corrente

In pratica il codice di costruttori e metodi viene invocato in un ambiente: grazie a questo e ambiente si riesce ad accedere all'oggetto corrente.

modificare i campi significa modificare il proprio oggetto lasciando inalterati gli altri

Quando si modificano i campi in realtà si modifica l'ambiente in cui viene invocato oggetto, ed è in questo modo che l'oggetto viene modificato senza che vengano intaccati i campi degli altri oggetti.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com