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

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Puntatori in C e C++.
Tipi di dato astratti Lista, Pila, Coda, Albero.
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.
Semantica Operazionale di un frammento di Java: lo stato
Si consideri il seguente programma: class Up extends Object { public static int x; public int y; public static void metodo(Up o) {Up w=o.metodo1(x); o.y=w.y+6;}
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
JAVASCRIPT DIFFERENZA TRA JAVASCRIPT E JAVA TAG LO SCRIPT OGGETTI LE CLASSI FUNZIONE GESTORE DI EVENTI ELEMENTI DEL LINGUAGGI è un vero e proprio linguaggio.
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà
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 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.
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
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: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
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.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
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.
Lo stato  I domini della semantica restano invariati: Ide, Val (Int  { ,  }) Loc (locazioni di memoria), FunctDecl. ma definiamo 2 funzioni: Loc :
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,
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
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.
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.
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 |
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.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Ese 2 (del 31 Marzo 2004).
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Le strutture dello stato (riepilogo 2) 4 Pila delle attivazioni Astack = Stack (Record) Record = ( Id | Loc ) * Stack(Frame) –operazioni delle pile

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