1 semantica operazionale di un frammento di java: lo stato estensione (con piccole varianti) di...

23
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

Upload: mafalda-greco

Post on 01-May-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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 dell’inizio

dell’esecuzione

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

6

Ambiente delle classi

è una funzione da identificatori di classe a descrizioni di classe – : Cenv

– Cenv = Id -> Cdescr

cos’è una descrizione di classe? vediamo prima la sintassi (semplificata) che

usiamo per le dichiarazioni di classe

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

7

Dichiarazione di classe: sintassi

Class_decl := class Id extends Id {Static_var_decl_listStatic_meth_decl_listInst_var_decl_listInst_meth_decl_listCostruttore }

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

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

8

Il frame

è 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()) l’operazione bind(, i, v) estende inserendo l’associazione tra i e v l’operazione update(, i, v) modifica in l’associazione per i (che deve

esistere) l’operazione defined(, i) dice se contiene un’associazione per i per ottenere il valore di una variabile, si applica il frame all’Id

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

9

Ambiente di metodi

è una funzione da identificatori di metodo a descrizioni di metodo – : Menv

– Menv = Id -> Mdescr

cos’è una descrizione di metodo? vediamo prima la sintassi (semplificata) che

usiamo per le dichiarazioni di metodo

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

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

corpo del metodopuntatore a oggetto

nome di classe

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

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 l’oggetto l

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

12

La heap

è una funzione da locazioni a descrizioni di istanza (oggetto) – : Heap

– Heap = Loc -> Odescr

cos’è una descrizione di oggetto?

Odescr = Id * Frame * Menv

classe variabili di istanza metodi di istanza

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

13

Operazioni sullo heap

newheap() genera una heap vuota newloc()genera una nuova locazione in hbind((:Heap), (l:Loc), (o:Odescr)) estende

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()– hbind((:Heap), (l:Loc), (o:Odescr))

– restituisce l

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

14

La pila di attivazioni

è una pila di records di attivazione di metodi – : 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

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

15

Operazioni sulle pile (record, frame)

emptystack()genera una pila vuota top((:Stack(x)) restituisce l’elemento di tipo x in

testa a pop((:Stack(x)) modifica eliminando

l’elementoin testa push((:Stack(x),(e:x)) modifica inserendo

l’elemento e in testa empty((:Stack(x)) verifica se è vuota

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

16

Le strutture dello stato (riepilogo 1)

Ambiente delle classi

Cenv = Id -> CdescrCdescr = Id * Frame * Menv * Frame* Menv

– cbind((:Cenv), (i:Id), (c:Cdescr))

– cdefined((:Cenv),(i:Id)) HeapHeap = Loc -> Odescr

Odescr = Id * Frame * Menv– newheap()– newloc ((:Heap))– hbind((:Heap), (l:Loc), (o:Odescr))

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

17

Le strutture dello stato (riepilogo 2)

Pila delle attivazioni

Astack = Stack (Record)Record = ( Id | Loc ) * Stack(Frame)

– operazioni delle pile

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

18

Le strutture (ausiliarie) dello stato (riepilogo 3) Ambiente dei metodiMenv = Id -> Mdescr

Mdescr = Idlist * Blocco * ( Loc | Id )– mbind((:Menv), (i:Id), (m:Mdescr))– mdefined ((:Menv), (i:Id))– instantiate((:Menv), (l: Loc))

FramesFrame = Id -> Val

Val = (Bool | Int | Loc)– newframe()– bind((:Frame) , (i:Id), (v:Val))– update((:Frame) , (i:Id), (v:Val))– defined((:Frame), (i:Id))

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

19

Uno stato (1)

parte statica (classi)

Object

A

B

CAA

a

bc

23

5

de

??

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

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

20

Uno stato (2)

parte dinamica (pila e heap)– è in esecuzione il metodo f4 di una istanza di C

C de

3f3

C

()(x)

()f4

puntatori al codice dei metodi

stack

x

heap

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

21

Cosa si “vede” in questo stato

tutti i nomi delle classi– attraverso queste, le variabili ed i metodi statici

C de

3f3

C

()(x)

()f4

puntatori al codice dei metodi

stack

x

heap

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

22

Cosa si “vede” in questo stato

nomi di variabili (nell’ordine)– stack locale– frame dell’oggetto a cui appartiene il metodo– frames (statici) lungo la catena di sottoclassi

C de

3f3

C

()(x)

()f4

puntatori al codice dei metodi

stack

x

heap

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

23

Cosa si “vede” in questo stato

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 de

3f3

C

()(x)

()f4

puntatori al codice dei metodi

stack

x

heap