Semantica Operazionale di un frammento di Java: lo stato

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Puntatori in C e C++.
Costruttori e Distruttori
Tipi di dato astratti Lista, Pila, Coda, Albero.
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
Generazione di Codice Intermedio
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
eliana minicozzi linguaggi1a.a lezione2
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Unità Didattica 2 I Linguaggi di Programmazione
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Le funzioni a tempo di esecuzione
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Implementazione di (ambiente e) memoria nel linguaggio imperativo.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Classi: class Foo { public int x; public int y; public void swap (boolean z) { if (z) {int temp = x; x = y; y = temp;}; }; } Ambienti per le classi: Cenv.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
estensione (con piccole varianti) di quella in
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
1 Progettazione dettagliata di un Tipo di Dato Astratto: l’ambiente di metodi.
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in FONDAMENTI DI PROGRAMMAZIONE.
Ese 1 (del 31 Marzo 2004). Il compilatore Non esegue il programma, non guarda i valori che possono assumere di volta in volta le variabili, non fa assunzioni.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,
Metodologie di Programmazione Esercizi sulla semantica di Java.
Elementi di semantica denotazionale ed operazionale
Esercizio 2. Si mostri l’evoluzione dello stato (ambiente di classi, heap, pila) durante la valutazione delle seguenti dichiarazioni di classe nei punti.
LIP: 22 Marzo 2005 Eccezioni. Eccezioni-Richiami Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Semantica Operazionale di un frammento di Java: lo stato estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica.
FUNZIONI: IL MODELLO A RUN-TIME 1) creazione di una nuova attivazione (istanza) del servitore 2) allocazione di memoria per i parametri e per le variabili.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Invocazione di metodi Com := Path Id (Expr_list) 4 path trattati come nelle variabili  path p’ 4 Risoluzione del nome: Ide * (Ide | Loc) * Cenv * Heap.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
Ex.1 - Semantica dell’Assegnamento Com := Path Ide = Expr (assegnamento) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv Una soluzione parziale:
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Introduzione a Java. Java Linguaggio Object-Oriented La maggior parte dei dati manipolati dai programmi e’ contenuta in oggetti La principale forma di.
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono.
1 Tipi di dato modificabili §a livello semantico, riconduciamo la modificabilità alla nozione di variabile l lo stato “modificabile” corrispondente sarà.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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