public class Up extends Object { public static int w; public int x;
-
Upload
lavinia-alexander -
Category
Documents
-
view
39 -
download
2
description
Transcript of public class Up extends Object { public static int w; public int x;
PRIMO ESERCIZIO (del 26-5-2004) Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) dopo ciascuna istruzione del main:
public class Up extends Object {
public static int w;
public int x;
public void met1() {w=x+4; x=x+1;}
{x=3;} }
public class Down extends Up {
public Up y;
public void met2() {y=new Down(); y.x=x+1; y.met1();}
public void met1() {x=x+w; w=0;}
{x=w;} }
public class Princ extends Object {
public static void main() {
Up p1 = new Up();
p1.w = p1.x + 1;
p1.met1();
Down p2 = new Down();
p2.met2(); } }
Ambiente delle classi 0
Object
Up
Down
Princ
non static staticClasse ereditataNome classe
Object
Up
Object
main ---
1 2
1
32
w 0 x 0 Up DescrUp
met1 Descrmet1
x 0
y
Up DescrUp
Down DescrDown
met2 Descrmet1
met1 Descr'met1
Descrmet1 = <-, {w=x+4; x=x+1; , Up>
DescrUp = <-, {x=3;}, Up>
Descrmet2 = <-, {y=new Down(); y.x=x+1; y.met1();}, Down>
Descr'met1 = <-, {x=x+w; w=0;}, Down>
DescrDown = <-, {x=3;x=w;}, Down>
Ambiente delle classi 0
Stato iniziale: <0 , , >
: Ambiente delle classi : Heap vuota : Contiene il record di attivazione di main
PrincPila dei Frames vuota!
Prima Istruzione del main: Up p1 = new Up();
< Up p1 = new Up();,0 , , > com < 0 , , >
l1
Princ
l1p1
'
Up
x 3
Seconda Istruzione del main: p1.w = p1.x + 1;
< p1.w = p1.x+1; , 0 , , > com < 1 , , >
Modifica solo l'ambiente delle classi. Frame delle variabili statiche di UP:
1 w 0 1' w 4
Terza Istruzione del main: p1.met1();
< p1.met1(); , 1 , , > com < 2 , , >
Modifica l'ambiente delle classi e l'heap.
' (met1) = < -, {w=x+4; x=x+1}, l1 >
l1 '
Up1' w 4 1'' w 7
x 4
Quarta Istruzione del main: Down p2 = new Down();
< Down p2 = new Down(); , 2 , , > com < 2 , , >
l2
'
Down
l1
'
Up
Princ
l1p1
l2p2
x 7
y
x 4
x=3; x=w;
Quinta Istruzione del main: p2.met2();
< p2.met2(); , 2 , , > com < 3 , , >
' (met2) = < -, {y = new Down(); y.x=x+1; y.met1()} , l2 >
'
'
Down
///
x 7
y l3
l3''
Down
x 8
y
y.x = x+1;
In l2 x vale 7
l2
l1
l3
Quinta Istruzione del main: p2.met2();
< p2.met2(); , 2 , , > com < 3 , , >
' (met2) = < -, {y = new Down(); y.x=x+1; y.met1()} , l2 >
l2 '
Down
///l1
x 7
y l3
l3
''
Down
x 15
y
'' (met1) = < -, {x=x+w; w=0}, l3 >
x = x + w;
8 7
1'' w 7 1''' w 0
Infine viene modificato l'ambientedelle classi: