1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Costruttori e Distruttori
Tipi di dato astratti Lista, Pila, Coda, Albero.
Recupero debito quarto anno Primo incontro
Estendere i linguaggi: i tipi di dato astratti
Informatica Recupero debito quarto anno Terzo incontro.
Strutture dati lineari
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Semantica Operazionale di un frammento di Java: lo stato
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
Overriding.
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.
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.
Java base IV: Java e la programmazione O.O.
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: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
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”
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
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.
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.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
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.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
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.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
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.
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.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
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 |
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Transcript della presentazione:

1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |

2 Cosa aggiungiamo 4 le gerarchie di classi –trattiamo ereditarietà ed overriding 4 l’attributo “static” per variabili e metodi –esistono variabili e metodi propri della classe, oltre a quelli propri degli oggetti 4 i costruttori (forma semplificata) –metodi che vengono invocati al momento della creazione di una istanza di classe

3 Inoltre 4 Espressioni per accedere ai nomi del tipo Path.I variabile Path.I(ListP) chiamata di metodo Path generico (puo’ riferirsi ad un oggetto, una classe, puo’ essere vuoto) Dobbiamo generalizzare le regole di accesso e ricerca dei nomi

4 Semantica operazionale piu’ orientata all’implementazione –per esempio le strutture dati che si usano per descrivere lo stato e le transizioni 4 simile alle strutture a run-time della JVM, che esegue il byte-code prodotto dal compilatore

5 Se c1 è una sottoclasse di (estende) c2 le variabili e metodi statici di c2 (e delle sue superclassi) sono visibili direttamente da c1 variabili e metodi di istanza di c2 (e delle sue superclassi) diventano anche variabili e metodi di istanza di c1 (a meno di overriding) Semantica informale dell’ereditarieta’

6 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 sull’overriding 4 semantica semplificata solo per programmi che supererebbero con successo l’analisi statica

7 Nota 4 La semantica non e’ completa 4 Tratteremo solo le regole che differiscono da quelle gia’ viste (blocchi, if, while…) 4 Inoltre non consideriamo gli specificatori di accesso (supponiamo che sia tutto public)

8 Lo stato  pila di attivazioni  –per la valutazione dei metodi –pila dei record di attivazione dei metodi  heap  –contiene gli oggetti (istanze di classi)  ambiente delle classi  –contiene le classi dichiarate prima dell’inizio dell’esecuzione

9 Ambiente delle classi  4 Quali informazioni dobbiamo memorizzare? 4 le informazioni per accedere alla superclasse (per implementare le regole di visibilita’ dei nomi) 4 le variabili ed metodi statici (condivise da tutti gli oggetti della classe) 4 le informazioni per creare oggetti istanze della classe (quali variabili e metodi d’istanza)

10 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

11 Sintassi Class_decl := class Id extends Id { Static_var_decl_list Static_meth_decl_list Inst_var_decl_list Inst_meth_decl_list Costruttore } La sintassi del costruttore (sequenza di assegnamenti), non nome non parametri Inoltre assumiamo che ogni classe sia definita come sottoclasse di qualcosa (per default Object)

12 Descrizione di classe Cdescr = Id * Frame * Menv * Frame * Menv superclasse variabili statiche metodi statici variabili istanza metodi istanza E’ una quintupla:

13 Osservazione 4 Il frame delle variabili statiche e l’ambiente dei metodi statici appartengono alla classe (per esempio il frame contiene il valore effettivo delle variabili etc..) 4 variabili e metodi statici sono condivisi tra tutti gli oggetti istanza della classe

14 Osservazione 4 Il frame delle variabili d’istanza e l’ambiente dei metodi d’istanza memorizzati nella classe verranno utilizzati per creare gli oggetti 4 variabili e metodi d’istanza sono propri degli oggetti istanza della classe, vanno mantenuti nella descrizione degli oggetti (come vedremo nello heap)

15  è una funzione  che mantiene associazioni fra –identificatori (di variabili) –valori interi, booleani locazioni (puntatori ad oggetti) 4 è una tabella modificabile (il valore associato ad un identificatore puo’ cambiare) Frame

16 Operazioni su frame 4 newframe() crea un frame vuoto  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 copy(  ) costruisce una copia di   l’operazione defined( , i) dice se  contiene un’associazione per i  per ottenere il valore di una variabile, si applica il frame all’Id,  i 

17 Ambiente di metodi    è una funzione da identificatori di metodo a descrizioni di metodo –  : Menv –Menv = Id -> Mdescr 4 cos’è una descrizione di metodo?

18 Descrizione di metodo 4 deve contenere le informazioni per eseguirlo – lista dei parametri formali –corpo –una informazione per implementare le regole di visibilita’ dei nomi, ovvero per sapere dove andare a cercare gli identificatori

19 In particolare 4 manteniamo un puntatore –alla classe (se metodo statico) –all’oggetto a cui appartiene (se metodo d’istanza), ovvero this 4 Tramite il puntatore potremmo differenziare le regole di ricerca dei nomi nei due casi

20 Dichiarazione di metodo: sintassi Method_decl := Id (Idlist) Blocco –ignoriamo i tipi Mdescr = Idlist * Blocco * ( Loc | Id ) parametri formali corpo del metodo puntatore a oggetto nome di classe

21 Operazioni sugli ambienti di metodi e di class 4 cemptyenv() costruisce un ambiente di classi “vuoto”  cbind((  :Cenv), (i:Id), (c:Cdescr)) estende  associando ad i il valore c  cdefined( , i) dice se  è definita per i 4 memptyenv() costruisce un ambiente di metodi “vuoto”  mbind((  :Menv), (i:Id), (m:Mdescr)) estende  associando ad i il valore m  mdefined( , i) 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

22 Lo heap    è una funzione da locazioni a descrizioni di oggetto –  : Heap –Heap = Loc -> Odescr 4 cos’è una descrizione di oggetto?

23 Descrizione di oggetto 4 deve contenere  il puntatore alla classe di appartenenza  valore delle variabili d’istanza proprie dell’oggetto  le informazioni per eseguire metodi d’istanza e costruttori(le loro descrizioni)

24 Descrizione di oggetti   è una funzione da locazioni a descrizioni di istanza (oggetto) Odescr = Id * Frame * Menv classevariabili di istanzametodi di istanza

25 Osservazione I metodi d’istanza nel modello visto in precedenza erano mantenuti in modo comune a tutti gli oggetti (nella descrizione della classe) erano invocati tramite il puntatore che lega l’oggetto alla classe  La modifica semplifica il problema della ricerca dei nomi dovuto alla coesistenza di variabili e metodi statici e d’istanza I metodi d’istanza stanno gia’ nell’oggetto e possono essere trattati in modo uniforme alle variabili d’istanza Il puntatore alla classe servira’ invece per accedere alle variabili ed ai metodi statici

26 Operazioni sulla 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

27 La pila di attivazioni    è una pila di records di attivazione di metodi 4 Last In First Out (LIFO) 4 Ogni record di attivazione descrive uno dei metodi annidati che sono in esecuzione 4 Quello al top e’ l’unico attivo 4 Gli altri sono sospesi

28 Attivazione/disattivazione 4 Invocazione di metodo: viene messo al top della pila un corrispondente record di attivazione 4 Terminazione di metodo: viene tolto dal top della pila il corrispondente record di attivazione 4 in modo che il record di attivazione del metodo chiamante (metodo che e’ stato sospeso) torni al top della pila, ovvero possa riprendere l’esecuzione

29 Record di attivazione 4 il record di attivazione descrive il metodo in esecuzione –oggetto o classe a cui il metodo appartiene –pila di frames (blocchi annidati) che descrivono sia le variabili locali che le associazioni tra parametri formali ed attuali Record = ( Id | Loc ) * Stack(Frame) classeoggettovariabili locali

30 Osservazione 4 il puntatore all’oggetto o alla classe indicano se il metodo e’ d’istanza o statico rispettivamente –e’ utilizzato per andare a cercare i nomi in base alle regole di visibilita’

31 La pila di attivazioni    è una pila di records di attivazione di metodi –  : Astack –Astack = Stack (Record) 4 il record di attivazione Record = ( Id | Loc ) * Stack(Frame) classeoggettovariabili locali

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

33 Uno stato (1) 4 Ambiente delle 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

34 Osservazioni 4 la classe C e’ sottoclasse di A 4 Il frame delle variabili statiche contiene i valori attuali delle variabili 4 L’ambiente dei metodi statici contiene le descrizioni dei metodi (puntano a C) 4 La parte che descrive variabili e metodi d’istanza (incluso il costruttore) e’ un prototipo (valori ?), servono per creare gli oggetti

35 Uno stato (2) 4 Pila e heap (è in esecuzione il metodo d’istanza f4 di una istanza di C) C d e 3 f3 C () (x) () f4 puntatori al codice dei metodi stack x heap

36 Osservazioni 4 I valori delle variabili d’istanza dell’oggetto stanno nello heap 4 La descrizione dei metodi d’istanza sta nello heap (puntano all’oggetto stesso, quando verranno chiamati manterranno il puntatore) 4 Il costruttore e’ trattato come un metodo d’istanza

37 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

38 Da un oggetto sono direttamente visibili i propri nomi d’istanza (inclusi quelli ereditati) e la classe; tramite questa le variabili statiche sue e delle superclassi I metodi d’istanza hanno la visibilita’ dell’oggetto su cui sono eseguiti (vedi f4) Ricordiamo (visibilita’ dei nomi)

39 4 nomi di variabili (nell’ordine) –stack locale (per esempio x) –frame dell’oggetto a cui appartiene il metodo (per esempio la sua varibile d’istanza d) –frames (statici) della classe C e delle superclassi (per esempio la varibile statica a della classe C) 4 come vi accediamo? –Direttamente dal record di attivazione –Tramite il puntatore dal record all’oggetto nello heap –Tramite il puntatore dall’oggetto alla sua classe e poi la catena di puntatori tra classi Per esempio

40 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

41 Se fosse in esecuzione un metodo statico (per esempio f1della classe C) il suo record di attivazione al top dello stack punterebbe alla classe C In questo caso potremmo vedere  stack locale  frames (statici) della classe C e delle superclassi Metodi statici 4 come vi accediamo? –Direttamente dal record di attivazione –Tramite il puntatore dal record alla sua classe ed la catena di puntatori alle superclassi