Riferimenti ed Oggetti Riferimenti ed Oggetti

Laboratorio di programmazione
Java
Laboratorio di programmazione
Java
Riferimenti e oggetti
Î In Java non si possono definire
variabili di tipo oggetto …
Riferimenti
ed Oggetti
Î … ma solo di tipo riferimento a
oggetto.
Î I riferimenti sono assimilabili ai
tipi base.
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
Java
Università di Roma “La Sapienza”
Java
Allocazione statica
e dinamica
Allocazione statica
e dinamica
Î Allocazione statica:
Î Allocazione dinamica:
9 decisa a tempo di
compilazione
9 decisa a tempo di
esecuzione (comando new)
9 effettuata nell’area di
memoria detta stack
9 effettuata nell’area
di memoria detta heap
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
Java
Università di Roma “La Sapienza”
Java
Persona p1;
p1 = new Persona();
p1.setResidenza(“Roma”);
Esempio
Persona p1;
p1 = new Persona();
p1.setResidenza(“Roma”);
heap
stack
p1 ???
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
1
Laboratorio di programmazione
Laboratorio di programmazione
Java
Java
Persona p1;
p1 = new Persona();
p1.setResidenza(“Roma”);
Persona p1;
p1 = new Persona();
p1.setResidenza(“Roma”);
Persona
heap
heap
stack
stack
p1 ???
nome
…
residenza
…
101
p1 ???
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
Università di Roma “La Sapienza”
Java
Java
Persona p1;
p1 = new Persona();
p1.setResidenza(“Roma”);
Persona p1;
p1 = new Persona();
p1.setResidenza(“Roma”);
Persona
heap
101
Persona
nome
…
nome
residenza
…
residenza “Roma”
heap
stack
…
stack
p1
p1
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
Java
Università di Roma “La Sapienza”
Java
Persona p1;
Persona p2;
p1 = new Persona();
p2 = p1;
p1.setResidenza(“Roma”);
Assegnazione tra
riferimenti
Persona p1;
Persona p2;
p1 = new Persona();
p2 = p1;
p1.setResidenza(“Roma”);
heap
stack
p1 ???
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
p2 ???
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
2
Laboratorio di programmazione
Laboratorio di programmazione
Java
Java
Persona p1;
Persona p2;
p1 = new Persona();
p2 = p1;
p1.setResidenza(“Roma”);
Persona p1;
Persona p2;
p1 = new Persona();
p2 = p1;
p1.setResidenza(“Roma”);
Persona
nome
residenza
heap
Persona
nome
…
…
residenza
heap
stack
…
…
stack
p2 ???
p1
p1
p2
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
Università di Roma “La Sapienza”
Java
Java
Persona p1;
Persona p2;
p1 = new Persona();
p2 = p1;
p1.setResidenza(“Roma”);
Assegnazione
tra tipi predefiniti
Persona
nome
…
“Roma”
residenza
heap
int i1;
int i2;
i1 = 5;
i2 = i1;
i1 = 10;
stack
p1
p2
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
Università di Roma “La Sapienza”
Java
Java
int i1;
int i2;
i1 = 5;
i2 = i1;
i1 = 10;
int i1;
int i2;
i1 = 5;
i2 = i1;
i1 = 10;
heap
heap
stack
stack
i1 ???
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
i2 ???
i1
5
i2 ???
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
3
Laboratorio di programmazione
Laboratorio di programmazione
Java
Java
int i1;
int i2;
i1 = 5;
i2 = i1;
i1 = 10;
int i1;
int i2;
i1 = 5;
i2 = i1;
i1 = 10;
heap
heap
stack
stack
i1
5
i2
5
i1 10
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
i2
5
Università di Roma “La Sapienza”
Java
Java
Deallocazione degli oggetti
Esempio
Î In Java la deallocazione degli
oggetti dall’heap è effettuata in
modo automatico …
Persona p1;
Persona p2;
p1 = new Persona();
p2 = p1;
p1.setResidenza(“Roma”);
p1 = null;
p2 = p1;
Î … quando non sono più presenti
riferimenti all’oggetto stesso …
Î … da un processo asincrono della
JVM: il garbage collector
(null denota il riferimento vuoto)
Prof. Giuseppe De Giacomo
Prof. Giuseppe De Giacomo
Laboratorio di programmazione
Laboratorio di programmazione
Università di Roma “La Sapienza”
Università di Roma “La Sapienza”
Java
Java
…
p1 = null;
p2 = p1;
…
p1 = null;
p2 = p1;
Persona
Persona
nome
…
residenza “Roma”
heap
stack
nome
heap
…
residenza “Roma”
stack
p1
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
p2
p1 null
p2
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
4
Laboratorio di programmazione
Laboratorio di programmazione
Java
Java
…
p1 = null;
p2 = p1;
…
p1 = null;
p2 = p1;
Persona
Persona
nome
heap
…
residenza “Roma”
stack
nome
heap
…
residenza “Roma”
stack
p1 null
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
p2 null
p1 null
p2 null
Prof. Giuseppe De Giacomo
Università di Roma “La Sapienza”
5