La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Metodologie di Programmazione Esercizi sulla semantica di Java.

Presentazioni simili


Presentazione sul tema: "Metodologie di Programmazione Esercizi sulla semantica di Java."— Transcript della presentazione:

1 Metodologie di Programmazione Esercizi sulla semantica di Java

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: public class Up extends Object { public static int x; public int y; public static void set (int i) {x=i;} public Up metodo (Up o) {Up w = new Up(); w.y=y+o.y; return w;} {y=x+1;} } public class Down extends Up { public int z; public Up metodo (Up o) {y=o.y; z=x+z; return o;} {z=3;} } public class Princ extends Object { public static void main() { Up p1 = new Up(); Up p2 = p1.metodo(p1); Up p3 = new Down(); Down.set(5); Down p4 = new Down(); p3 = (Down) p4.metodo(p3); }

3 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 11 22 11 22 0z 0y Descr met2 metodo Descr Dow Down Descr Up Up 33 33

4 Descr set = Descr met1 = Descr Up = Ambiente delle classi  0 Descr met2 = Descr Down = Ereditarieta' sul costruttore Overriding del metodo metodo

5 Stato iniziale:  : Ambiente delle classi  : Heap vuota  : Contiene il record di attivazione di main Princ Pila dei Frames vuota

6 Prima Istruzione del main: Up p1 = new Up();  com  Creazione di un oggetto: l1l1 '' Up Copia del frame e dell'ambiente dei metodi di istanza da Up. 1y Valutazione del costruttore (come metodo di istanza) : {y=x+1;}

7 Il valore ritornato e’ assegnato alla variabile p1 nel frame al top della pila nel record di attivazione corrente  l1l1 Princ l1l1 p1p1  Modifica della pila '' Up 1y Istanziato per l 1 :   ' = instantiate (  ,l 1 ) !

8 Seconda Istruzione del main: Up p2 = p1.metodo(p1);  com Valutazione dell’espressione p1.metodo(p1). Il metodo funzionale e’ simile ai metodi void, ritorna un valore. Dichiarazione: il valore e’ associato alla variabile p2 nel frame al top della pila dei frames nel record di attivazione corrente

9 Valutazione dell’espressione: Ricerca del metodo a partire da l 1 (risultato della valutazione del path)  fmet   '(metodo)   ' (metodo) = C 1 = {Up w = new Up(); w.y=y+o.y; return w;}  com /// Princ l1l1 l1l1 o   ' p1.metodo(p1) Push del Record di attivazione

10 Valutazione del corpo del metodo: C 1 = {Up w = new Up(); w.y=y+o.y; return w;} /// Princ l1l1 l1l1 o l2l2 w '' w.y = y + o.y l2l2 this (l 1 ) parametro (l 1 ) 11 l2l2   '' Up 2y l1l1 '' 1y 

11 Dichiarazione  com  l2l2   '' Up 2y l1l1 '' 1y Princ l1l1 p1p1  l2l2 p2p2 Istanziato per l 2 :   '' = instantiate (  ,l 2 ) !

12 Terza Istruzione del main: Up p3 = new Down();  com Istanziato per l 3 :   ' = instantiate (  ,l 3 ) !  l2l2   '' Up 2y l1l1 '' 1y l3l3 '' Down 1y 3z Creazione nuovo oggetto.  Object Dichiarazione. l1l1 p1p1 l2l2 p2p2 l3l3 p3p3

13 Quarta Istruzione del main: Down.set(5);  com Object Up Down Princ Object Up Object ---main 0x Descr set set Descr met1 metodo Descr Up Up 0y 11 22 11 22 0z 0y Descr met2 metodo Descr met1 Down Descr Up Up 33 33 00 Modifica ambiente delle classi:

14 Quarta Istruzione del main: Down.set(5);  com Object Up Down Princ Object Up Object ---main 5x Descr set set Descr met1 metodo Descr Up Up 0y 11 22 11 22 0z 0y Descr met2 metodo Descr met1 Down Descr Up Up 33 33 11 Modifica ambiente delle classi:

15 Quinta Istruzione del main: Down p4 = new Down();  com Istanziato per l 4 :   '' = instantiate (  ,l 4 ) !  Creazione nuovo oggetto. ////// l2l2 l1l1 l4l4   '' Down 6y 3z ////// l3l3 {y = x + 1;} (in  1 x vale 5) !  Object Dichiarazione. l1l1 p1p1 l2l2 p2p2 l3l3 p3p3 l4l4 p4p4

16 Sesta Istruzione del main: p3 = (Down) p4.metodo(p3);  com Valutazione del metodo funzionale:  fmet   '' (metodo) La ricerca parte da l 4 !   '' (metodo) = C 2 = {y = o.y; z = x + z; return o;} Modifica solo la heap, perche’ il metodo ritorna l3 !!!

17 Valutazione del corpo del metodo  com /// Princ l4l4 l3l3 o   ' Push del Record di attivazione La valutazione di {y = o.y; z = x + z; return o;} modifica l'oggetto in l 4 e ritorna o (l 3 ) non modificato! this (l 4 ) parametro (l 3 )

18  Object Invariato l1l1 p1p1 l2l2 p2p2 l3l3 p3p3 l4l4 p4p4  Modifica di l4 ////// l2l2 l1l1 l4l4   '' Down 1y 8z ////// l3l3 {y = o.y; z=x+z;} (in  1 x vale 5) !


Scaricare ppt "Metodologie di Programmazione Esercizi sulla semantica di Java."

Presentazioni simili


Annunci Google