Esercizio 2
Si mostri l’evoluzione dello stato (ambiente di classi, heap, pila) durante la valutazione delle seguenti dichiarazioni di classe nei punti (1)-(6) durante l’esecuzione del metodo main. public class Up extends Object { public static int x; public int y; public Up met1() { int y=0; y=this.y+3; this.y=x+2; return this; (5) } public void met2() {x=y+y; y=this.y+1;} {x=2;y=x+1;} } public class Down extends Up { public int z; public Up met1() {int y=0; met2(); (6) this.y=y+1; z=y + this.y; return this; } {z=y-1;} } public class Princ extends Object { public static void main() { Up p1 = new Down(); (1) Up p2=p1.met1(); (2) Up p3=new Up(); (3) p1=p3.met1(); (4) } }
Ambiente delle classi 0 Object Up Down Princ Variabili e metodi non staticiVariabili e metodi staticiClasse ereditataNome classe Object Up Object main--- 0x 11 0z 0y Descr met1 met1 Descr Dow Down Descr Up Up 33 22 0y Descr met2 met2 Descr met1 met1 Descr Up Up 22 11 Descr met2 met2
Descr met1 = Descr met2 = Descr Up = Ambiente delle classi 0 Descr met1 = Descr Down = Ereditarieta' sul costruttore Overriding del metodo met1
Stato iniziale: : Ambiente delle classi : Heap vuota : Contiene il record di attivazione di main Princ Pila dei Frames vuota
Prima Istruzione del main: Up p1 = new Down() (1) com Creazione di un oggetto: l1l1 '' Down Copia del frame e dell'ambiente dei metodi di istanza da Down. 3y Valutazione del costruttore (come metodo di istanza) : {x=2;y=x+1;z=y-1;} 2z
Il valore ritornato e’ assegnato alla variabile p1 nel frame al top della pila nel record di attivazione corrente Princ l1l1 p1p1 Istanziato per l 1 : ' = instantiate ( ,l 1 ) ! l1l1 '' Down 3y 2z 11 2x
Seconda Istruzione del main: Up p2 = p1.met1() (2) fmet '(met1) Princ l1l1 ' com 0y ' ' l1l1 '' Down 4y 2z l1l1 p1p1 22 6x Stato nel punto (6):
Stato nel punto (2): Princ l1l1 '' Down 1y 1z l1l1 p1p1 22 6x l1l1 p2p2
Terza Istruzione del main: Up p3 = new Up() (3) com l2l2 '' Up 3y l1l1 Princ l1l1 p1p1 l1l1 p2p2 l2l2 p3p3 '' Down 1y 1z 33 2x
Quarta Istruzione del main: Up p1 = p3.met1() (4) com fmet '' (met1) /// Princ l2l2 ' 6y 33 2x Stato nel punto (5): l2l2 '' Up 4y l1l1 '' Down 1y 1z
Stato nel punto (4) l2l2 '' Up 4y l1l1 Princ l2l2 p1p1 l1l1 p2p2 l2l2 p3p3 '' Down 1y 1z 33 2x