Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Ese 2 (del 31 Marzo 2004)
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 z; public int y; public static void set (int i) {z=i+1;} public Up metodo (int i) { set(i); Up p1=new Up(); p1.y=y+i+1; p1.z=z; \\ (1) return p1;} {y=z;} public class Down extends Up { public int x; { set(i); Down p1=new Down(); p1.y=y+i; p1.x=z+y; \\ (2) {x = 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) }}
3
Ambiente delle classi 0
Nome classe Classe ereditata Variabili e metodi static Variabili e metodi non static Princ Object main --- Down x y Descrmet2 metodo DescrDow Down DescrUp Up 3 m3 Up Up z Descrset set Descrmet1 metodo DescrUp Up y 1 2 m1 m2 Object Object
4
Ambiente delle classi 0
Descrset = < i, {z=i +1;}, Up> Descrmet1 = <i, {set(i); Up p1=new Up(); p1.y=y+i+1; p1.z=z;return p1;}, Up> DescrUp = <-, {y=z;}, Up> Descrmet2 = <i, {set(i); Down p1=new Down(); p1.y=y+i; p1.x=z+y; return p1}, Down> Overriding del metodo metodo DescrDown = <-, {y=z; x=2}, Up> Ereditarieta' sul costruttore
5
Stato iniziale: <0 , s0 , x0 >
r0 : Ambiente delle classi x0 : Heap vuota s0 : Contiene il record di attivazione di main Princ Pila dei Frames vuota
6
Prima Istruzione del main: Up p1 = new Up()
< Up p1 = new Up();,0 , s0 , x0 > com < 0 , s1 , x1 > (3) Creazione di un oggetto: l1 m2' Up Copia del frame e dell'ambiente dei metodi di istanza da Up. y Valutazione del costruttore (come metodo di istanza) : {y=z;} x1
7
Princ m2' m2' = instantiate (m2,l1) !
Il valore ritornato e’ assegnato alla variabile p1 nel frame al top della pila nel record di attivazione corrente x1 l1 Princ p1 s1 m2' Up y Istanziato per l1: m2' = instantiate (m2,l1) ! Oggetto creato
8
Seconda Istruzione del main: Up p2 = p1.metodo(2)
< Up p2 = p1.metodo(2); , 0 , s1 , x1 > com < 1 , s2 , x2 > < metodo, l1, 0 , s1 , x1 > fmetm2'(metodo) m2' (metodo) = < i, C1, l1 > /// Princ l1 2 i s1 ' Push del Record di attivazione per valutare C1
9
Stato nel punto (1): < 1 , s2', x2 >
C1 = {set(i); Up p1=new Up(); p1.y=y+i+1; p1.z=z;return p1;} l2 m2'' Up 3 y l1 m2' x2 /// Princ l1 2 i l2 p1 s2' set(i) modifica l’ambiente delle classi (vedi dopo) in l2 y ha valore 3 all’inizio (y=z) l’assegnamento modifica y di l2 non si modifica oltre la var. statica z
10
Valutazione di set(i): z=i+1
Object Up Down Princ --- main 3 z Descrset set Descrmet1 metodo DescrUp y 1 2 m1 m2 x Descrmet2 3 m3 1
11
Stato nel punto (4) < 1 , s2 , x2 >
< Up p2 = p1.metodo(2); , 0 , s1 , x1 > com < 1 , s2 , x2 > x2 l2 m2'' Up 3 y l1 m2' Princ l1 p1 s2 l2 p2 Istanziato per l2: m2'' = instantiate (m2,l2) !
12
Terza Istruzione del main: Up p3 = new Down()
< Up p3 = new Down(); , 1 , s2 , x2 > com < 1 , s3 , x3 > (5) Istanziato per l3: m3' = instantiate (m3,l3) ! x3 l2 m2'' Up 3 y l1 m2' l3 m3' Down 2 x Costruttore y=z e x=2 s3 Object Dichiarazione. l1 p1 l2 p2 l3 p3
13
Quarta Istruzione del main: Up p4 = p3.metodo(5)
< Up p4 = p3.metodo(5) , 1 , s3 , x3 > com < 2 , s4 , x4 > < metodo, l3, 1 , s3 , x3 > fmet m3' (metodo) m3'' (metodo) = < i, C2, l3 > C2 = {set(i); Down p1=new Down(); p1.y=y+i; p1.x=z+y; return p1;} /// Princ l3 5 i s3 ' Push del Record di attivazione per valutare C2
14
Valutazione di set(i): z=i+1
Object Up Down Princ --- main 6 z Descrset set Descrmet1 metodo DescrUp y 1 2 m1 m2 x Descrmet2 3 m3 2
15
Stato nel punto (2): < 2 , s4', x4>
C2 = {set(i); Down p1=new Down(); p1.y=y+i; p1.x=z+y; return p1;} x4 ////// l2 l1 l4 m3'' Down y 9 x l3 /// Princ l3 5 i l4 p1 s4' 8 p1.y=y+i; p1.x=z+y (y di this (l3) vale 3!)
16
Object m3'' < 2 , s4 , x4 > Stato finale (6) x4 ////// l2 l1 l4
Down y 9 x l3 s4 Object Dichiarazione. l1 p1 l2 p2 l3 p3 l4 p4 8 instantiate
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.