Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoAzzurra Vitali Modificato 11 anni fa
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;} }
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.