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