Esercizio 2
Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe e l'esecuzione del metodo main (nei punti (1)--(6) public class Up extends Object { public static int x; public int y; public static void set (int i) {x=i+1;} public Up metodo (int i) { set(i); Up p1=new Up(); p1.y=y+i; p1.x=x; \\ (1) return p1;} {y=x;} public class Down extends Up { public int z; public Up metodo (int i) { set(i); Down p1=new Down(); p1.y=y-i; p1.z=x+y; \\ (2) return p1;} {z = 2;} } public class Princ extends Object { public static void main () { Up p1 = new Up (); \\ (3) Up p2 = p1.metodo(2); \\ (4) Up p3= new Down(); \\ (5) Up p4= p3.metodo(5); \\ (6)}
Ambiente delle classi 0 Object Up Down Princ Variabili e metodi non staticVariabili e metodi staticClasse ereditataNome classe Object Up Object main--- 0x Descr set set Descr met1 metodo Descr Up Up 0y z 0y Descr met2 metodo Descr Dow Down Descr Up Up 3 3
Descr set = Descr met1 = Descr Up = Ambiente delle classi 0 Descr met2 = <i, { set(i); Down p1=new Down(); p1.y=y-i; p1.z=x+y; return p1;} }, Down> Descr Down = Ereditarieta' sul costruttore Overriding del metodo metodo
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 Up() (3) com Creazione di un oggetto: l1l1 ' Up Copia del frame e dell'ambiente dei metodi di istanza da Up. 0y Valutazione del costruttore (come metodo di istanza) : {y=x;}
Il valore ritornato e assegnato alla variabile p1 nel frame al top della pila nel record di attivazione corrente l1l1 Princ l1l1 p1p1 ' Up 0y Istanziato per l 1 : ' = instantiate (,l 1 ) !
Seconda Istruzione del main: Up p2 = p1.metodo(2) fmet '(metodo) ' (metodo) = /// Princ l1l1 2i ' Push del Record di attivazione com
Stato nel punto (1): C 1 = { set(i); Up p1=new Up(); p1.y=y+i+1; p1.x=x;return p1 ;} /// Princ l1l1 2i l2l2 p1 ' l2l2 '' Up 2y l1l1 ' 0y
Valutazione di set(i) Object Up Down Princ Object Up Object ---main 3x Descr set set Descr met1 metodo Descr Up Up 0y z 0y Descr met2 metodo Descr met1 Down Descr Up Up 3 3 1
Stato nel punto (4) com l2l2 '' Up 2y l1l1 ' 0y Princ l1l1 p1p1 l2l2 p2p2 Istanziato per l 2 : '' = instantiate (,l 2 ) !
Terza Istruzione del main: Up p3 = new Down() (5) com Istanziato per l 3 : ' = instantiate (,l 3 ) ! l2l2 '' Up 2y l1l1 ' 0y l3l3 ' Down 3y 2z Creazione nuovo oggetto. Object Dichiarazione. l1l1 p1p1 l2l2 p2p2 l3l3 p3p3
Quarta Istruzione del main: Up p4 = p3.metodo(5) com fmet ' (metodo) '' (metodo) = C 2 = { set(i); Down p1=new Down(); p1.y=y-i; p1.z=x+y; return p1 ;}
Valutazione di set(i) Object Up Down Princ Object Up Object ---main 6x Descr set set Descr met1 metodo Descr Up Up 0y z 0y Descr met2 metodo Descr met1 Down Descr Up Up 3 3 2
Stato nel punto (2): C 2 = { set(i); Down p1=new Down(); p1.y=y-i; p1.z=x+y; return p1 ;} /// Princ l3l3 5i ' ////// l2l2 l1l1 l4l4 '' Down y 9z ////// l3l3 -2 instantiate…
Stato finale (6) ////// l2l2 l1l1 l4l4 '' Down y 9z ////// l3l3 -2 Object Dichiarazione. l1l1 p1p1 l2l2 p2p2 l3l3 p3p3 l4l4 p4p4 instantiate