  |
Variabile e Istanza |
Vediamo in pratica come questa cosa viene realizzata.
Abbiamo una classe derivata, nel nostro caso il pesce rosso.quando una classe è
derivata da una da una classe base, mantiene a tutti gli effetti le
caratteristiche della classe base. Di conseguenza, è possibile assegnare a
variabili che hanno il tipo della classe base, istanza che sono in realtà classi
derivate.
Pesce p =
new PesceRosso()
Possiamo vedere un esempio che è in Java una cosa comunissima. Creo un pesce
rosso, ma lo assegno ad una variabili del tipo pesce. Questo è del tutto lecito:
infatti il pesce rosso è a tutti gli effetti ancora un pesce, e pertanto può
essere assegnata a variabili di tipo pesce.
  |
Chiamata |
p.nuota()
Abbiamo però un caso particolare che dobbiamo capire bene: cosa succede quando
viene chiamato il metodo nuota() attraverso questa variabile. Notare bene che la
variabile è di un tipo, ma punta ad un oggetto che di un altro tipo. Abbiamo il
metodo nuota() sia nella classe Pesce, che un metodo nuota() nella classe
PesceRosso. Quale dei due viene invocato?
  |
Chiama la nuota di PesceRosso |
La risposta sta nel polimorfismo: abbiamo detto che un oggetto risponde di
autonomia alle richieste che gli vengono fatte, di modo che a richieste
generiche, corrispondono comportamenti specifici. In realtà, questo è un
meccanismo per riutilizzare più possibile codice esistente, avendo possibilità,
quando il codice esistente non è esattamente come serve, di modificarlo,
cambiando qualcuno dei metodi. Nel ostro caso particolare, il risultato
dell'invocazione del metodo nuota() usando p causa la chiamata del metodo nuota
di PesceRosso. In generale, gli oggetti si comportano in base a ciò che sono
(ovvero l'oggetto effettivo che è stato stanziato), non in base ciò che sembrano
(la variabile con il quale vengono invocati). Fare attenzione che questo
comportamento non è scontato, e non è nemmeno semplice da realizzare: si ottiene
infatti tramite il mantenimento di puntatore a funzioni,che possono venire
rimpiazzato nel corso dell'esecuzione. Ma non approfondiremo per il momento più
di tanto l'argomento, rimandando alle slide specifiche che incontreremo via
via.
|