|
Esaminiamo il meccanismo complessivo con cui i metodi vengono
invocati, e come si fa a eseguire i metodi sui campi di una istanza,
tenendo separati i campi di istanze diverse.
  |
I metodi: |
  |
possono essere richiamati solo avendo un oggetto (una
istanza di una classe) |
  |
questa viene costruita invocando un costruttore |
Il meccanismo di uso di un oggetto prevede che non si possa chiamare
un metodo da solo: si deve necessariamente fare riferimento ad esso
sfruttando una istanza di un oggetto. Per ottenere una istanza di un
oggetto che non si ha si può invocare in qualunque momento un
costruttore. Solo dopo aver costruito l'oggetto si possono invocare SU
DI ESSO i metodi. Esempio:
Stack s = new Stack()
s.push(4);
Stack t = new Stack();
t.push(5);
Questo è il completo ciclo di vita di un oggetto: nasce, ovvero viene
costruito. Dopo di che viene assegnato ad una variabile grazie alla
quale si possono invocare i metodi. Se voglio posso creare più
istanze e invocare i metodi separatamente. Se vi ricordate, due
istanze hanno i campi distinti perchè vengono memorizzati in zone di
memoria diverse. Il costruttore usa il this per sapere in quale zona
di memoria si deve agire per inizializzare l'oggetto.
  |
Nei metodi, i riferimenti ai campi hanno sempre un
this implicito |
void push(int x) {
stack[top++]=x;
}
  |
equivale a: |
void push(int x) {
this.stack[this.top++]=x;
}
Un meccanismo pressochè identico esiste per i metodi. Mentre per i
costruttori il this viene passato dal new, che alloca prima la
memoria, per i metodi l'oggetto corrente viene assegnato a this è
quello che viene usato per chiamare il metodo. È come se this fosse
un parametro in più, invisibile, passato però sempre alla chiamata
del metodo. Ecco perchè i due stack sono distinti e il push del primo
non incide sul push del secondo: perchè vengono usati i campi di due
istanze distinte, passate diverse in momenti diversi grazie al
this. Tutte le "variabili libere" vengono cercate nell'oggetto
corrente grazie ad un this prefisso implicito di ogni
chiamata. Consigliamo di verificare la comprensione di questo
meccanismo accuratamente perchè è assolutamente fondamentale.
|