La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Semantica Operazionale di un frammento di Java: lo stato estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica.

Presentazioni simili


Presentazione sul tema: "1 Semantica Operazionale di un frammento di Java: lo stato estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica."— Transcript della presentazione:

1 1 Semantica Operazionale di un frammento di Java: lo stato estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica Operazionale, appunti di Fondamenti di Programmazione

2 2 Semantica operazionale 4 modello di esecuzione –importanti soprattutto le strutture che compongono lo stato 4 simile alle strutture a run-time della JVM, che esegue il byte-code prodotto dal compilatore –con alcune semplificazioni legate alle ottimizzazioni effettuate dal compilatore

3 3 Cosa aggiungiamo 4 le gerarchie di classi –trattiamo lereditarietà ed loverriding 4 lattributo static per variabili e metodi –esistono variabili e metodi propri della classe 4 i costruttori –metodi che vengono invocati al momento della creazione di una istanza di classe

4 4 Semantica statica 4 nella formalizzazione trascuriamo tutti gli aspetti legati alla semantica statica –in particolare, quelli che darebbero origine a messaggi di errore durante la compilazione –tipi, visibilità dei nomi, vincoli sulloverriding 4 le proprietà statiche importanti verranno descritte in modo informale 4 semantica semplificata solo per programmi che supererebbero con successo lanalisi statica

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

6 6 Ambiente delle classi è una funzione da identificatori di classe a descrizioni di classe – : Cenv –Cenv = Id -> Cdescr 4 cosè una descrizione di classe? 4 vediamo prima la sintassi (semplificata) che usiamo per le dichiarazioni di classe

7 7 Dichiarazione di classe: sintassi Class_decl := class Id extends Id { Static_var_decl_list Static_meth_decl_list Inst_var_decl_list Inst_meth_decl_list Costruttore } Cdescr = Id * Frame * Menv * Frame * Menv superclasse variabili statiche metodi statici variabili istanza metodi istanza il costruttore (sequenza di assegnamenti) viene aggiunto ai metodi istanza

8 8 Il frame 4 è una tabella (estendibile e mutabile) che mantiene associazioni fra –identificatori (di variabili) –valori interi, booleani locazioni (puntatori ad oggetti) un frame :Frame viene creato vuoto (newframe()) loperazione bind(, i, v) estende inserendo lassociazione tra i e v loperazione update(, i, v) modifica in lassociazione per i (che deve esistere) loperazione defined(, i) dice se contiene unassociazione per i 4 per ottenere il valore di una variabile, si applica il frame allId

9 9 Ambiente di metodi è una funzione da identificatori di metodo a descrizioni di metodo – : Menv –Menv = Id -> Mdescr 4 cosè una descrizione di metodo? 4 vediamo prima la sintassi (semplificata) che usiamo per le dichiarazioni di metodo

10 10 Dichiarazione di metodo: sintassi Method_decl := Id (Idlist) Blocco –ignoriamo i tipi –quando il metodo verrà invocato, dovrà sapere la classe o loggetto a cui appartiene Mdescr = Idlist * Blocco * ( Loc | Id ) parametri formali corpo del metodo puntatore a oggetto nome di classe

11 11 Operazioni sugli ambienti di metodi e di classi cbind(( :Cenv), (i:Id), (c:Cdescr)) estende associando ad i il valore c cdefined( :Cenv, i:Id) dice se è definita per i mbind(( :Menv), (i:Id), (m:Mdescr)) estende associando ad i il valore m mdefined( :Menv, i:Id) dice se è definita per i instantiate(( :Menv), (l:Loc)) crea un nuovo ambiente diverso da perché tutte le descrizioni di metodi contengono loggetto l

12 12 La heap è una funzione da locazioni a descrizioni di istanza (oggetto) – : Heap –Heap = Loc -> Odescr 4 cosè una descrizione di oggetto? Odescr = Id * Frame * Menv classevariabili di istanzametodi di istanza

13 13 Operazioni sullo heap 4 newheap() genera una heap vuota newloc( ) genera una nuova locazione in hbind(( :Heap), (l:Loc), (o:Odescr)) estende associando ad l il valore o 4 un oggetto viene creato con lespressione new Id –genera il valore o:Odescr a partire dalla classe Id –l = newloc( ) –hbind(( :Heap), (l:Loc), (o:Odescr)) –restituisce l

14 14 La pila di attivazioni è una pila di records di attivazione di metodi – : Astack –Astack = Stack (Record) 4 il record di attivazione –oggetto o classe a cui il metodo appartiene –pila di frames (blocchi annidati) Record = ( Id | Loc ) * Stack(Frame) classeoggettovariabili locali

15 15 Operazioni sulle pile (record, frame) emptystack() genera una pila vuota top(( :Stack(x)) restituisce lelemento di tipo x in testa a pop(( :Stack(x)) modifica eliminando lelemento in testa push(( :Stack(x),(e:x)) modifica inserendo lelemento e in testa empty(( :Stack(x)) verifica se è vuota

16 16 Le strutture dello stato (riepilogo 1) 4 Ambiente delle classi Cenv = Id -> Cdescr Cdescr = Id * Frame * Menv * Frame* Menv –cbind(( :Cenv), (i:Id), (c:Cdescr)) –cdefined(( :Cenv),(i:Id)) 4 Heap Heap = Loc -> Odescr Odescr = Id * Frame * Menv –newheap() –newloc (( :Heap)) –hbind(( :Heap), (l:Loc), (o:Odescr))

17 17 Le strutture dello stato (riepilogo 2) 4 Pila delle attivazioni Astack = Stack (Record) Record = ( Id | Loc ) * Stack(Frame) –operazioni delle pile

18 18 Le strutture (ausiliarie) dello stato (riepilogo 3) 4 Ambiente dei metodi Menv = Id -> Mdescr Mdescr = Idlist * Blocco * ( Loc | Id ) –mbind(( :Menv), (i:Id), (m:Mdescr)) –mdefined (( :Menv), (i:Id)) –instantiate(( :Menv), (l: Loc)) 4 Frames Frame = Id -> Val Val = (Bool | Int | Loc) –newframe() –bind(( :Frame), (i:Id), (v:Val)) –update(( :Frame), (i:Id), (v:Val)) –defined(( :Frame), (i:Id))

19 19 Uno stato (1) 4 parte statica (classi) Object A B C A A a b c 23 5 d e ? ? f3 C () ? (x)? ()? f4 f1 f2 (y,z) (w) C C codice blocco f2 codice blocco f3 codice blocco f4 codice blocco f1 codice blocco C puntatore ad oggetto

20 20 Uno stato (2) 4 parte dinamica (pila e heap) –è in esecuzione il metodo f4 di una istanza di C C d e 3 f3 C () (x) () f4 puntatori al codice dei metodi stack x heap

21 21 Cosa si vede in questo stato 4 tutti i nomi delle classi –attraverso queste, le variabili ed i metodi statici C d e 3 f3 C () (x) () f4 puntatori al codice dei metodi stack x heap

22 22 Cosa si vede in questo stato 4 nomi di variabili (nellordine) –stack locale –frame delloggetto a cui appartiene il metodo –frames (statici) lungo la catena di sottoclassi C d e 3 f3 C () (x) () f4 puntatori al codice dei metodi stack x heap

23 23 Cosa si vede in questo stato 4 nomi di metodi (nellordine) –ambiente di metodi delloggetto a cui appartiene il metodo lui incluso (ricorsione) –ambienti di metodi (statici) lungo la catena di sottoclassi C d e 3 f3 C () (x) () f4 puntatori al codice dei metodi stack x heap


Scaricare ppt "1 Semantica Operazionale di un frammento di Java: lo stato estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica."

Presentazioni simili


Annunci Google