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 Cosa aggiungiamo 4 le gerarchie di classi –ereditarietà ed overriding 4 l’attributo “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

3 3 Semantica statica 4 Trascuriamo tutti gli aspetti legati alla semantica statica 4 Proprietà statiche importanti verranno descritte in modo informale 4 Semantica (semplificata) solo per programmi che supererebbero con successo l’analisi statica

4 4 Lo stato  ambiente delle classi  –contiene le classi dichiarate prima dell’inizio dell’esecuzione  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)  

5 5 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 IdCdesr … …

6 6 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 + costruttore IdFrameMenvFrameMenv

7 7 Il frame  4 è una tabella (estendibile e mutabile) che mantiene associazioni fra –identificatori (di variabili) –valori interi, booleani locazioni (puntatori ad oggetti)  newframe()--  bind( , i, v)-- estende  inserendo l’associazione tra i e v  update( , i, v)-- modifica in  l’associazione per i (che deve esistere)  copy(  )-- costruisce una copia di   defined( , i)-- true se  contiene un’associazione per i   (i)-- applicazione:valore di i in  Idvalori … …

8 8 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 IdMdescr …

9 9 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 corpo del metodopuntatore a oggettonome di classe IdlistbodyLoc/Id

10 10 Operazioni sugli ambienti (metodi e class)   cemptyenv() / memptyenv() un ambiente “vuoto”  cbind(  :Cenv, i:Id, c:Cdescr)/ mbind(  :Menv,i:Id,m:Mdescr) estende  con i e c/m  cdefined( , i)/mdefined( , i) true se  è definita su i  instantiate(  :Menv,l:Loc) crea un nuovo ambiente  diverso da  perché le descrizioni di tutti i metodi hanno l come componente loc  applicazione:  i  i 

11 11 La memoria 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 Loc IdFrameMenv

12 12 Operazioni sulla heap  newheap()  newloc(  )--  genera una nuova locazione in   hbind(  :Heap,l:Loc,o:Odescr)-- estende  con l e o 4 un oggetto viene creato con l’espressione new Id –genera il valore o:Odescr a partire dalla classe Id –l = newloc(  ) –hbind(  :Heap,l:Loc,o:Odescr) –restituisce l

13 13 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) classeoggetto Attuali + Variabili locali IdStack(Frame)

14 14 Operazioni sulle pile (record, frame)  emptystack()  top(  :Stack(x))-- restituisce l’elemento in testa a   pop(  :Stack(x))-- rimuove l’elemento  in testa  push(  :Stack(x),e:x)-- inserisce e in testa  empty((  :Stack(x))-- verifica se  è vuota

15 15 Le strutture dello stato (riepilogo 1) 4 Ambiente delle classi Cenv = Id -> Cdescr Cdescr = Id * Frame * Menv * Frame* Menv –cemptyenv() –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))

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

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

18 18 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

19 19 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

20 20 Cosa si “vede” in questo stato 4 tutti i nomi delle classi –attraverso queste, le variabili ed i metodi statici 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

21 21 Cosa si “vede” in questo stato 4 nomi di variabili (nell’ordine) –stack locale –frame dell’oggetto 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

22 22 Cosa si “vede” in questo stato 4 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 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