La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Semantica Operazionale di un frammento di Java: lo stato

Presentazioni simili


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

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 Semantica operazionale
modello di esecuzione importanti soprattutto le strutture che compongono lo stato 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 Cosa aggiungiamo le gerarchie di classi
trattiamo l’ereditarietà ed l’overriding l’attributo “static” per variabili e metodi esistono variabili e metodi propri della classe i costruttori metodi che vengono invocati al momento della creazione di una istanza di classe

4 Semantica statica 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 sull’overriding le proprietà statiche importanti verranno descritte in modo informale semantica semplificata solo per programmi che supererebbero con successo l’analisi statica

5 Lo stato pila di attivazioni s heap z ambiente delle classi r
per la valutazione dei metodi simile alla pila dei record di attivazione nei linguaggi tradizionali heap z contiene gli oggetti (istanze di classi) ambiente delle classi r contiene le classi dichiarate prima dell’inizio dell’esecuzione

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

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 istanza variabili statiche metodi istanza metodi statici il costruttore (sequenza di assegnamenti) viene aggiunto ai metodi istanza

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

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

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

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

12 La heap z Odescr = Id * Frame * Menv
z è una funzione da locazioni a descrizioni di istanza (oggetto) z : Heap Heap = Loc -> Odescr cos’è una descrizione di oggetto? Odescr = Id * Frame * Menv classe variabili di istanza metodi di istanza

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

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

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

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

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

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

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

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

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

22 Cosa si “vede” in questo stato
f3 C () (x) d e 3 C f4 x stack heap nomi di variabili (nell’ordine) stack locale frame dell’oggetto a cui appartiene il metodo frames (statici) lungo la catena di sottoclassi puntatori al codice dei metodi

23 Cosa si “vede” in questo stato
f3 C () (x) d e 3 C f4 x stack heap nomi di metodi (nell’ordine) ambiente di metodi dell’oggetto a cui appartiene il metodo lui incluso (ricorsione) ambienti di metodi (statici) lungo la catena di sottoclassi puntatori al codice dei metodi


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

Presentazioni simili


Annunci Google