La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Semantica Operazionale di un frammento di Java: lo stato.

Presentazioni simili


Presentazione sul tema: "1 Semantica Operazionale di un frammento di Java: lo stato."— Transcript della presentazione:

1 1 Semantica Operazionale di un frammento di Java: lo stato

2 2 Lo stato ci interessa capire la struttura dello stato per esempio le strutture dati che si usano per descrivere lo stato e le transizioni 4 simile alle strutture a run-time della JVM, che esegue il byte-code prodotto dal compilatore –non vedremo le regole di transizione formali, vedremo quello che e diverso rispetto ai linguaggi imperativi, tipo C

3 3 In particolare le classi e gli oggetti variabili e metodi statici variabili e metodi distanza la ricerca dei nomi, identificatori di variabile e metodi (complicate non esiste un ambiente globale)

4 4 Semplificando 4 nella formalizzazione cercheremo di capire alcuni aspetti legati alla semantica statica –in particolare, quelli che darebbero origine a messaggi di errore durante la compilazione 4 Non consideriamo gli specificatori di accesso (supponiamo che sia tutto public)

5 5 Lo stato pila di attivazioni –per la valutazione dei metodi –pila dei record di attivazione dei metodi heap –contiene gli oggetti (istanze di classi) ambiente delle classi –contiene le classi dichiarate prima dellinizio dellesecuzione

6 6 Ambiente delle classi 4 Quali informazioni dobbiamo memorizzare? 4 le variabili statiche dichiarate nella classe, con il relativo valore 4 i metodi statici dichiarati nella classe 4 sono condivise da tutti gli oggetti della classe 4 il valore delle variabili statiche verra eventualmente modificato durante lesecuzione del programma

7 7 Ambiente delle classi è una funzione da identificatori di classe a descrizioni di classe – : Cenv –Cenv = Id -> Cdescr 4 cosè una descrizione di classe?

8 8 Sintassi Class_decl := class Id { Static_var_decl_list Static_meth_decl_list Inst_var_decl_list Inst_meth_decl_list Costruttore } La sintassi del costruttore (sequenza di assegnamenti), non nome non parametri il costruttore si tratta come un metodo distanza

9 9 Descrizione di classe Cdescr = Frame * Menv variabili statiche metodi statici variabili istanza metodi istanza

10 10 Osservazione 4 Il frame delle variabili statiche e lambiente dei metodi statici appartengono alla classe (per esempio il frame contiene il valore effettivo delle variabili etc..) 4 variabili e metodi statici sono condivisi tra tutti gli oggetti istanza della classe 4 viene creato prima dellesecuzione del programma

11 11 è una funzione che mantiene associazioni fra –identificatori (di variabili) –valori interi, booleani locazioni (puntatori ad oggetti) 4 è una tabella modificabile (il valore associato ad un identificatore puo cambiare) Frame

12 12 Ambiente di metodi è una funzione da identificatori di metodo a descrizioni di metodo – : Menv –Menv = Id -> Mdescr 4 cosè una descrizione di metodo?

13 13 Descrizione di metodo 4 deve contenere le informazioni per eseguirlo – lista dei parametri formali –corpo del metodo

14 14 Dichiarazione di metodo: sintassi Method_decl := Id (Idlist) Blocco –ignorando i tipi Mdescr = Idlist * Blocco parametri formali corpo del metodo

15 15 public class A { public static int x; public int y; public static void set (int i) C_set public A metodo1 (A o) C_1 {y=x+1;} } public class B { public static int x; public int z; public int y; public void metodo2 (int i) C_2 {z=3; y=z+1; z=5;} } public class Princ { public static void main() C_m}

16 16 La heap è una funzione da locazioni a descrizioni di oggetto – : Heap –Heap = Loc -> Odescr 4 cosè una descrizione di oggetto?

17 17 Descrizione di oggetto 4 deve contenere il puntatore alla classe di appartenenza valore delle variabili distanza proprie delloggetto le informazioni per eseguire metodi distanza e costruttori(le loro descrizioni)

18 18 Descrizione di oggetti è una funzione da locazioni a descrizioni di istanza (oggetto) Odescr = Id * Frame * Menv classevariabili di istanzametodi di istanza

19 19 Al momento della new 4 creo una locazione nuova nello heap 4 nella descrizione delloggetto metto –il nome della classe –viene creato del frame delle variabili di istanza (dalla dichiarazione classe –viene creato lambiente dei metodi di istanza (dalla dichiarazione classe) 4 Valuto il costruttore come un metodo distanza sulloggetto

20 20 La pila di attivazioni è una pila di records di attivazione di metodi 4 Last In First Out (LIFO) 4 Ogni record di attivazione descrive uno dei metodi annidati che sono in esecuzione 4 Quello al top e lunico attivo 4 Gli altri sono sospesi

21 21 Attivazione/disattivazione 4 Invocazione di metodo: viene messo al top della pila un corrispondente record di attivazione 4 Terminazione di metodo: viene tolto dal top della pila il corrispondente record di attivazione 4 in modo che il record di attivazione del metodo chiamante (metodo che e stato sospeso) torni al top della pila, ovvero possa riprendere lesecuzione

22 22 Record di attivazione 4 il record di attivazione descrive il metodo in esecuzione –oggetto o classe a cui il metodo appartiene –pila di frames (blocchi annidati) che descrivono sia le variabili locali che le associazioni tra parametri formali ed attuali Record = ( Id | Loc ) * Stack(Frame) classeoggettovariabili locali

23 23 Osservazione 4 il puntatore alloggetto o alla classe indicano se il metodo e distanza o statico rispettivamente –e utilizzato per andare a cercare i nomi in base alle regole di visibilita 4 il puntatore e fondamentale per gestire la semantica differente di metodi statici e metodi distanza

24 24 La pila di attivazioni è una pila di records di attivazione di metodi – : Astack –Astack = Stack (Record) 4 il record di attivazione Record = ( Id | Loc ) * Stack(Frame) classeoggettovariabili locali

25 25 A cosa servono queste informazioni? dobbiamo implemenatre le regole di visibilita e ricerca dei nomi ---nomi di variabili (per modificarle o leggerne il valore –nomi di metodi (per eseguire le chiamte di metodo) dove si cercano? Ambiente delle classi, oggetti, record si attivazione sulla pila? non esiste una informazione globale

26 26 Ricordiamo che... 4 Espressioni per accedere ai nomi del tipo Path.I variabile Path.I(ListP) chiamata di metodo Path generico (puo riferirsi ad un oggetto, una classe, puo essere vuoto)

27 27 Ricerca dei nomi Dobbiamo capire le regole di accesso e ricerca dei nomi la semantica formale di espressioni e comandie poi la solita... esempio, assegnamento o valutazione del valore di una espressione this.x=10; y=this.x+1;

28 28 Path Id ACCESSO AL NOME Id variabile Le regole per laccesso al valore di una variabile sono complicate, la ricerca dipende da il metodo correntemente in esecuzione La classe a cui appartiene il metodo (se statico) Loggetto a cui appartiene il metodo (se distanza) Dal significato di Path

29 29 Per valutare Path Id Dobbiamo valutare Path a partire dal metodo corrente Puo indicare Ide (una classe) Loc (un oggetto) metodo corrente (se il path e vuoto) indicato da Dobbiamo cercare il valore di Id a partire dal risultato indicato dal path

30 30 Risoluzione di nomi di variabile 4 il riferimento ad un identificatore può in generale essere risolto –nella pila di frames sulla testa dello stack delle attivazioni –nei frames delle variabili di istanza di un oggetto –nei frames di variabili statiche di una classe 4 il modo di effettuare la ricerca dipende da dove essa inizia –un metodo (quello correntemente attivo) –un oggetto –una classe

31 31 Da una Classe: nellordine 4 se il path indica una classe 4 si cerca nelle sue variabili statiche (ambiente delle classi) 4 non sono visibili nomi distanza

32 32 Da un oggetto:nellordine 4 Variabili distanza (nella descrizione delloggetto nella heap) 4 Altrimenti si passa alla classe tramite il puntatatore

33 33 Dal metodo corrente (path vuoto): nellordine Stack locale (nel record dattivazione al top della pila) Altrimenti si passa alla classe o alloggetto a cui il metodo appartiene tramite il puntatore nel record di attivazione in questo modo da un metodo statico si ha la visibilita della classe in cui e dichiarato in questo modo da un metodo distanza si ha la visibilita delloggetto su cui e eseguito

34 34 Invocazione di metodi Path Id (Expr_list) 4 Ricercare la descrizione del metodo associata Path Id (simile alla ricerca dei nomi di variabili) 4 Creare il record di attivazione da mettere al top della pila 4 Valutare il corpo del metodo 4 Rimuovere il record di attivazione

35 35 Ricerca dei nomi: metodi 4 Simile alla ricerca dei nomi di variabili 4 Unica differenza: non si cerca nello stack dei frames locali (non ci sono dichiarazioni di metodi annidate) 4 I metodi stanno nelle classi (se statici) o negli oggetti (se distanza) 4 La ricerca inizia dal risultato della valutazione del path

36 36 Invocazione di metodi: commenti 4 dopo avere trovato la descrizione del metodo 4 si valuta il parametro attuale 4 si crea un nuovo stack di frames, il cui unico frame contiene lassociazione tra parametro formale e valore del parametro attuale 4 si pusha sulla pila il record che contiene la classe o loggetto associato al metodo e la pila di frames 4 si valuta il corpo del metodo 4 Quando termina si elimina il record di attivazione

37 37 public class A { public static int x; public int y; public static void set (int i){ x=x+i;} public A metodo1 (A o) {o.y=y+x+1; y=y+1; return o;} {y=x+1;} }

38 38 public class B { public static int x; public int z; public int y; public void metodo2 (int i) { int z=this.z; this.z=y+3+z; } {z=3; y=z+1; z=5;} }

39 39 public class Princ { public static void main(){ A.set(3); A p1=new A(); A p2=new A(); p1=p1.metodo1(p2); B p3=new B(); B.x=4; p3.metodo2(6); }

40 40 Il naming 4 naming –tutti gli usi di nomi allinterno dei metodi (inclusi quelli usati nei paths) variabili locali, variabili di istanza, variabili statiche, metodi di istanza, metodi statici sono staticamente controllati per verificarne lesistenza in accordo con le regole di visibilità quelle che abbiamo implementato nei vari meccanismi di naming 4 le regole di visibilità tengono anche conto degli attributi private, public, protected 4 il meccanismo dei packages (con esportazioni ed importazioni) –serve per raggruppare insiemi di classi introduce ulteriori restrizioni

41 41 public class A { private static int x; private int y; public static void set (int i){ x=y+i;} public A metodo1 (A o) {o.y=y+x+1; y=y+1; return o;} {y=x+1;} }

42 42 public class B { public static int x; public int z; public int y; public void metodo2 (int i) { int z=this.z + A.x; B w=new B(); w.y=z; w.x=3;} {z=3; y=z+1; z=5;} }


Scaricare ppt "1 Semantica Operazionale di un frammento di Java: lo stato."

Presentazioni simili


Annunci Google