Semantica Operazionale di un frammento di Java lo
- Slides: 42
Semantica Operazionale di un frammento di Java: lo stato 1
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 2
In particolare ü le classi e gli oggetti ü variabili e metodi statici ü variabili e metodi d’istanza ü la ricerca dei nomi, identificatori di variabile e metodi (complicate non esiste un ambiente globale) 3
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) 4
Lo stato 4 pila di attivazioni s – per la valutazione dei metodi – pila dei record di attivazione dei metodi 4 heap z – contiene gli oggetti (istanze di classi) 4 ambiente delle classi r – contiene le classi dichiarate prima dell’inizio dell’esecuzione 5
Ambiente delle classi r 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 l’esecuzione del programma 6
Ambiente delle classi r 4 r è una funzione da identificatori di classe a descrizioni di classe – r : Cenv – Cenv = Id -> Cdescr 4 cos’è una descrizione di classe? 7
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 d’istanza 8
Descrizione di classe Cdescr = Frame * Menv variabili istanza variabili statiche metodi istanza metodi statici 9
Osservazione 4 Il frame delle variabili statiche e l’ambiente 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 dell’esecuzione del programma 10
Frame 4 è una funzione j 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) 11
Ambiente di metodi m 4 m è una funzione da identificatori di metodo a descrizioni di metodo – m : Menv – Menv = Id -> Mdescr 4 cos’è una descrizione di metodo? 12
Descrizione di metodo 4 deve contenere le informazioni per eseguirlo – lista dei parametri formali – corpo del metodo 13
Dichiarazione di metodo: sintassi Method_decl : = Id (Idlist) Blocco – ignorando i tipi Mdescr = Idlist * Blocco parametri formali corpo del metodo 14
public class A { public static int x; public int y; public static void set (int i) C_set public A metodo 1 (A o) C_1 {y=x+1; } } public class B { public static int x; public int z; public int y; public void metodo 2 (int i) C_2 {z=3; y=z+1; z=5; } } public class Princ { public static void main() C_m} 15
La heap z 4 z è una funzione da locazioni a descrizioni di oggetto – z : Heap – Heap = Loc -> Odescr 4 cos’è una descrizione di oggetto? 16
Descrizione di oggetto 4 deve contenere § il puntatore alla classe di appartenenza § valore delle variabili d’istanza proprie dell’oggetto § le informazioni per eseguire metodi d’istanza e costruttori(le loro descrizioni) 17
Descrizione di oggetti 4 z è una funzione da locazioni a descrizioni di istanza (oggetto) Odescr = Id * Frame * Menv classe variabili di istanza metodi di istanza 18
Al momento della new 4 creo una locazione nuova nello heap 4 nella descrizione dell’oggetto metto – il nome della classe – viene creato del frame delle variabili di istanza (dalla dichiarazione classe – viene creato l’ambiente dei metodi di istanza (dalla dichiarazione classe) 4 Valuto il costruttore come un metodo d’istanza sull’oggetto 19
La pila di attivazioni s 4 s è 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’ l’unico attivo 4 Gli altri sono sospesi 20
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 l’esecuzione 21
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) classe oggetto variabili locali 22
Osservazione 4 il puntatore all’oggetto o alla classe indicano se il metodo e’ d’istanza 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 d’istanza 23
La pila di attivazioni s 4 s è una pila di records di attivazione di metodi – s : Astack – Astack = Stack (Record) 4 il record di attivazione Record = ( Id | Loc ) * Stack(Frame) classe oggetto variabili locali 24
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 25
Ricordiamo che. . . 4 Espressioni per accedere ai nomi del tipo Path. I variabile Path. I(List. P) chiamata di metodo • Path generico (puo’ riferirsi ad un oggetto, una classe, puo’ essere vuoto) 26
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; 27
Path Id ACCESSO AL NOME Id variabile Le regole per l’accesso 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) §L’oggetto a cui appartiene il metodo (se d’istanza) §Dal significato di Path 28
Per valutare Path Id q. Dobbiamo valutare Path a partire dal metodo corrente q. Puo’ indicare § Ide (una classe) • Loc (un oggetto) • metodo corrente (se il path e’ vuoto) indicato da q. Dobbiamo cercare il valore di Id a partire dal risultato indicato dal path 29
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 30
Da una Classe: nell’ordine 4 se il path indica una classe 4 si cerca nelle sue variabili statiche (ambiente delle classi) 4 non sono visibili nomi d’istanza 31
Da un oggetto: nell’ordine 4 Variabili d’istanza (nella descrizione dell’oggetto nella heap) 4 Altrimenti si passa alla classe tramite il puntatatore 32
Dal metodo corrente (path vuoto): nell’ordine ü Stack locale (nel record d’attivazione al top della pila) ü Altrimenti si passa alla classe o all’oggetto 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 d’istanza si ha la visibilita’ dell’oggetto su cui e’ eseguito 33
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 34
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 d’istanza) 4 La ricerca inizia dal risultato della valutazione del path 35
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 l’associazione tra parametro formale e valore del parametro attuale 4 si pusha sulla pila il record che contiene la classe o l’oggetto associato al metodo e la pila di frames 4 si valuta il corpo del metodo 4 Quando termina si elimina il record di attivazione 36
public class A { public static int x; public int y; public static void set (int i){ x=x+i; } public A metodo 1 (A o) {o. y=y+x+1; y=y+1; return o; } {y=x+1; } } 37
public class B { public static int x; public int z; public int y; public void metodo 2 (int i) { int z=this. z; this. z=y+3+z; } {z=3; y=z+1; z=5; } } 38
public class Princ { public static void main(){ A. set(3); A p 1=new A(); A p 2=new A(); p 1=p 1. metodo 1(p 2); B p 3=new B(); B. x=4; p 3. metodo 2(6); } 39
Il naming 4 naming – tutti gli usi di nomi all’interno dei metodi (inclusi quelli usati nei paths) • variabili locali, variabili di istanza, variabili statiche, metodi di istanza, metodi statici sono staticamente controllati per verificarne l’esistenza 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 40
public class A { private static int x; private int y; public static void set (int i){ x=y+i; } public A metodo 1 (A o) {o. y=y+x+1; y=y+1; return o; } {y=x+1; } } 41
public class B { public static int x; public int z; public int y; public void metodo 2 (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; } } 42
- Elegia treccani
- Archiloco
- Frammento fab
- Configurazioni
- Amplificatore operazionale sommatore
- Amplificatore operazionale differenziale
- Sottrattore operazionale
- Ponte resistivo
- Multivibratori monostabili
- Amplificatore differenziale bjt
- Ambiguitate semantica
- Atos de fala
- Significado
- Delimitacion semantica
- Relacao semantica
- Tipos de impersonalidad
- Motores de ideas para investigar
- Semantica componenziale
- Relacao semantica
- Semantica denotazionale
- Perífrasis verbales y locuciones verbales
- Negação do ou...ou
- Credifone processo de formação
- Santiago
- Icono indice simbolo
- Area semantica
- Frame linguistica
- Barreras semánticas
- Un texto que tenga coherencia y cohesión
- Explicitude
- Parafasia semantica
- Oracion topica ejemplo
- Semntico
- Semantica frasale
- Tipos de antonímia
- Manejo de errores semánticos.
- Memoria semantica
- Delimitacion semantica
- Escucha semantica
- Intrebari dihotomice
- Coerência semântica
- Semântica significado
- Competencia enciclopedica