1 Semantica Operazionale di un frammento di Java: lo stato.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
Costruttori e Distruttori
Tipi di dato astratti Lista, Pila, Coda, Albero.
Strutture dati lineari
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Massa Laura Mela Enrica
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
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.
Frontespizio Economia Monetaria Anno Accademico
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
eliana minicozzi linguaggi1a.a lezione2
Approfondimento delle classi
nome: sequenza di caratteri usata per denotare un oggetto
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.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
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.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
Programmazione ad oggetti
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
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 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.
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.
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.
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.
Ex.1 - Semantica dell’Assegnamento Com := Path Ide = Expr (assegnamento) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv Una soluzione parziale:
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.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

1 Semantica Operazionale di un frammento di Java: lo stato

2 Lo stato ci interessa capire la struttura dello stato 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 –non vedremo le regole di transizione formali, vedremo quello che e diverso rispetto ai linguaggi imperativi, tipo C

3 In particolare le classi e gli oggetti variabili e metodi statici variabili e metodi distanza la ricerca dei nomi, identificatori di variabile e metodi (complicate non esiste un ambiente globale)

4 Semplificando 4 nella formalizzazione cercheremo di capire alcuni aspetti legati alla semantica statica –in particolare, quelli che darebbero origine a messaggi di errore durante la compilazione 4 Non consideriamo gli specificatori di accesso (supponiamo che sia tutto public)

5 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 dellinizio dellesecuzione

6 Ambiente delle classi 4 Quali informazioni dobbiamo memorizzare? 4 le variabili statiche dichiarate nella classe, con il relativo valore 4 i metodi statici dichiarati nella classe 4 sono condivise da tutti gli oggetti della classe 4 il valore delle variabili statiche verra eventualmente modificato durante lesecuzione del programma

7 Ambiente delle classi è una funzione da identificatori di classe a descrizioni di classe – : Cenv –Cenv = Id -> Cdescr 4 cosè una descrizione di classe?

8 Sintassi Class_decl := class 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 il costruttore si tratta come un metodo distanza

9 Descrizione di classe Cdescr = Frame * Menv variabili statiche metodi statici variabili istanza metodi istanza

10 Osservazione 4 Il frame delle variabili statiche e lambiente 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 4 viene creato prima dellesecuzione del programma

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

12 Ambiente di metodi è una funzione da identificatori di metodo a descrizioni di metodo – : Menv –Menv = Id -> Mdescr 4 cosè una descrizione di metodo?

13 Descrizione di metodo 4 deve contenere le informazioni per eseguirlo – lista dei parametri formali –corpo del metodo

14 Dichiarazione di metodo: sintassi Method_decl := Id (Idlist) Blocco –ignorando i tipi Mdescr = Idlist * Blocco parametri formali corpo del metodo

15 public class A { public static int x; public int y; public static void set (int i) C_set public A metodo1 (A o) C_1 {y=x+1;} } public class B { public static int x; public int z; public int y; public void metodo2 (int i) C_2 {z=3; y=z+1; z=5;} } public class Princ { public static void main() C_m}

16 La heap è una funzione da locazioni a descrizioni di oggetto – : Heap –Heap = Loc -> Odescr 4 cosè una descrizione di oggetto?

17 Descrizione di oggetto 4 deve contenere il puntatore alla classe di appartenenza valore delle variabili distanza proprie delloggetto le informazioni per eseguire metodi distanza e costruttori(le loro descrizioni)

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

19 Al momento della new 4 creo una locazione nuova nello heap 4 nella descrizione delloggetto metto –il nome della classe –viene creato del frame delle variabili di istanza (dalla dichiarazione classe –viene creato lambiente dei metodi di istanza (dalla dichiarazione classe) 4 Valuto il costruttore come un metodo distanza sulloggetto

20 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 lunico attivo 4 Gli altri sono sospesi

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

22 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

23 Osservazione 4 il puntatore alloggetto o alla classe indicano se il metodo e distanza o statico rispettivamente –e utilizzato per andare a cercare i nomi in base alle regole di visibilita 4 il puntatore e fondamentale per gestire la semantica differente di metodi statici e metodi distanza

24 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

25 A cosa servono queste informazioni? dobbiamo implemenatre le regole di visibilita e ricerca dei nomi ---nomi di variabili (per modificarle o leggerne il valore –nomi di metodi (per eseguire le chiamte di metodo) dove si cercano? Ambiente delle classi, oggetti, record si attivazione sulla pila? non esiste una informazione globale

26 Ricordiamo che... 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)

27 Ricerca dei nomi Dobbiamo capire le regole di accesso e ricerca dei nomi la semantica formale di espressioni e comandie poi la solita... esempio, assegnamento o valutazione del valore di una espressione this.x=10; y=this.x+1;

28 Path Id ACCESSO AL NOME Id variabile Le regole per laccesso al valore di una variabile sono complicate, la ricerca dipende da il metodo correntemente in esecuzione La classe a cui appartiene il metodo (se statico) Loggetto a cui appartiene il metodo (se distanza) Dal significato di Path

29 Per valutare Path Id Dobbiamo valutare Path a partire dal metodo corrente Puo indicare Ide (una classe) Loc (un oggetto) metodo corrente (se il path e vuoto) indicato da Dobbiamo cercare il valore di Id a partire dal risultato indicato dal path

30 Risoluzione di nomi di variabile 4 il riferimento ad un identificatore può in generale essere risolto –nella pila di frames sulla testa dello stack delle attivazioni –nei frames delle variabili di istanza di un oggetto –nei frames di variabili statiche di una classe 4 il modo di effettuare la ricerca dipende da dove essa inizia –un metodo (quello correntemente attivo) –un oggetto –una classe

31 Da una Classe: nellordine 4 se il path indica una classe 4 si cerca nelle sue variabili statiche (ambiente delle classi) 4 non sono visibili nomi distanza

32 Da un oggetto:nellordine 4 Variabili distanza (nella descrizione delloggetto nella heap) 4 Altrimenti si passa alla classe tramite il puntatatore

33 Dal metodo corrente (path vuoto): nellordine Stack locale (nel record dattivazione al top della pila) Altrimenti si passa alla classe o alloggetto a cui il metodo appartiene tramite il puntatore nel record di attivazione in questo modo da un metodo statico si ha la visibilita della classe in cui e dichiarato in questo modo da un metodo distanza si ha la visibilita delloggetto su cui e eseguito

34 Invocazione di metodi Path Id (Expr_list) 4 Ricercare la descrizione del metodo associata Path Id (simile alla ricerca dei nomi di variabili) 4 Creare il record di attivazione da mettere al top della pila 4 Valutare il corpo del metodo 4 Rimuovere il record di attivazione

35 Ricerca dei nomi: metodi 4 Simile alla ricerca dei nomi di variabili 4 Unica differenza: non si cerca nello stack dei frames locali (non ci sono dichiarazioni di metodi annidate) 4 I metodi stanno nelle classi (se statici) o negli oggetti (se distanza) 4 La ricerca inizia dal risultato della valutazione del path

36 Invocazione di metodi: commenti 4 dopo avere trovato la descrizione del metodo 4 si valuta il parametro attuale 4 si crea un nuovo stack di frames, il cui unico frame contiene lassociazione tra parametro formale e valore del parametro attuale 4 si pusha sulla pila il record che contiene la classe o loggetto associato al metodo e la pila di frames 4 si valuta il corpo del metodo 4 Quando termina si elimina il record di attivazione

37 public class A { public static int x; public int y; public static void set (int i){ x=x+i;} public A metodo1 (A o) {o.y=y+x+1; y=y+1; return o;} {y=x+1;} }

38 public class B { public static int x; public int z; public int y; public void metodo2 (int i) { int z=this.z; this.z=y+3+z; } {z=3; y=z+1; z=5;} }

39 public class Princ { public static void main(){ A.set(3); A p1=new A(); A p2=new A(); p1=p1.metodo1(p2); B p3=new B(); B.x=4; p3.metodo2(6); }

40 Il naming 4 naming –tutti gli usi di nomi allinterno dei metodi (inclusi quelli usati nei paths) variabili locali, variabili di istanza, variabili statiche, metodi di istanza, metodi statici sono staticamente controllati per verificarne lesistenza in accordo con le regole di visibilità quelle che abbiamo implementato nei vari meccanismi di naming 4 le regole di visibilità tengono anche conto degli attributi private, public, protected 4 il meccanismo dei packages (con esportazioni ed importazioni) –serve per raggruppare insiemi di classi introduce ulteriori restrizioni

41 public class A { private static int x; private int y; public static void set (int i){ x=y+i;} public A metodo1 (A o) {o.y=y+x+1; y=y+1; return o;} {y=x+1;} }

42 public class B { public static int x; public int z; public int y; public void metodo2 (int i) { int z=this.z + A.x; B w=new B(); w.y=z; w.x=3;} {z=3; y=z+1; z=5;} }