DOMANDA [JAVA] Dubbio nell’uso di this

Pubblicità
Ricorda questo: l'oggetto è un'istanza di una classe.
La classe è quella che scrivi, che è il tuo contenitore composto da membri (variabili e metodi). Quando crei un oggetto viene allocata la memoria e ti viene restituito un riferimento a quell'oggetto in memoria. Questo è quello che usi quando fai "d.getNome()", ad esempio.

this è l'istanza corrente della classe. La usi solo in quella classe perché è appunto un riferimento all'istanza corrente.

Di fatto l'oggetto è la classe in memoria.

Si, lo scope del this è la classe, ma è l'istanza corrente della classe (l'oggetto).

Ps. a fine pausa pranzo dovrei riuscire a farti qualche esempio e integrare quanto intendo
 
Quando descrivi una classe, definisci solo come il compilatore interpretera' gli oggetti che in seguito dichiarerai come istanze di quella classe. Quindi nel codice della classe non c'e' nessun riferimento a oggetti ben specifici, per esempio quando definisci un campo come private int mCode; niente viene allocato in memoria, significa semplicemente che un intero chiamato mCode potra' essere chiamato all'interno dello scope in cui e' definito, ma solo DOPO che un oggetto e' stato costruito. La classe non e' nulla, solo la definizione di come funzioneranno gli oggetti di tale classe (OK, non e' del tutto vero, esistono classi 'globali' che sono immediatamente allocate in memoria e NON possono essere costruite, ma lasciamo perdere i dettagli che poi dipendono dal linguaggio)
Facciamo un esempio:
Java:
Class Disco
{
    private double mRaggio;
    public Disco(double raggio)
    {
        mRaggio=raggio;
    }
    public double GetArea()
    {
        return mRaggio * mRaggio * 3.14;
    }
}
Abbastanza banale. Guarda il codice del metodo GetArea: al suo interno usa la variabile mRaggio, che e' un membro priovato della classe inizializzato nel costruttore. A cosa si riferisce mRaggio in tale metodo? Ricorda, questa e' solo una definizione. Al momento non esiste nessun oggetto di tipo Disco, la variabile mRaggio non esiste, non e' allocata. E' solo quando ne creiamo una che il codice ha senso, in quanto mRaggio rappresenta una variabile allocata nella memoria dell'oggetto appena creato:
Java:
Disco d = new Disco(3);
double area = d.GetArea();
In altre parole, quando il codice gira, nel metodo GetArea() viene usato come mRaggio la locazione in memoria relativa all'oggetto in questione (in questo caso 'd'). Questo viene anche rappresentato all'interno della classe come this.mRaggio; anche se in questo caso non ce ne e' bisogno in quanto non esiste ambiguita'.

Piu' in generale, anche i tipi di dati intrinsichi non allocano nulla. Il tipo 'int' definisce solo come gli oggetti di tale tipo vengono manipolati, ma per se' non alloca nessuna memoria. 'int' non "rappresenta" una variabile. E' solo quando definisci una variabile di quel tipo che hai in effetti un "oggetto" di quel tipo (o quella classe, infatti in alcuni linguaggi di programmazione TUTTO e' definito come una classe). Ricorda, il codice che scrivi per definire una classe va bene per TUTTI gli oggetti di quella classe. Scrivendo 'this' implicitamente dice "sto parlando dell'oggetto su cui sto lavorando adesso".

Tutto questo sembra un inutile sofismo o esercizio in teorica, ma e' in effetti alla base della programmazione (per ogni linguaggio OOP). Se si capisce quello, tutto poi diventa piu' facile. Per esempio si capira' poi cosa significhi parlare di classe, membri e metodi di tipo static.
 
Pubblicità
Pubblicità
Indietro
Top