1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Costruttori e Distruttori
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
Algoritmi e Programmazione
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Semantica Operazionale di un frammento di Java: lo stato
Generalità Linguaggio e Macchina Astratta
Query OQL e XQUERY a confronto
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Derivazione tra classi
Approfondimento delle classi
nome: sequenza di caratteri usata per denotare un oggetto
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
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.
Ereditarietà e Polimorfismo
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Sintassi base e struttura di un programma
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Script 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.
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.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
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 :
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.
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)
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.
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.
Progetto Parte II OCAML.
 classdecl  c  com ,   classdecl  c >  com  classdecl ,   classdecl (prog) Il programma.
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 |
Ex.1 - Astrazioni su Dati Si abbia il tipo di dato stack di interi, IntStack, specificato sotto: public class IntStack { \\ OVERVIEW: uno Stack è una collezione.
1 Tipi di dato modificabili §a livello semantico, riconduciamo la modificabilità alla nozione di variabile l lo stato “modificabile” corrispondente sarà.
Ese 2 (del 31 Marzo 2004).
Esercizio 2.
Transcript della presentazione:

1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono comparire solo all’interno dei metodi 4 consideriamo solo alcuni dei casi di espressioni –quelli che riguardano oggetti

2 Espressioni Expr := new Id | (creazione di istanza) Path Id (accesso al valore di una variabile) Path := Path id. | (si parte da Path) this. | (si parte dall’oggetto corrente) (cammino vuoto) 4 Ambigua? No

3 La relazione di transizione per le espressioni Expr := new Id | (creazione di istanza) Path Id (accesso al valore di una variabile) Expr * Cenv * Heap * Astack  expr Val * Heap

4 Creazione di oggetti Expr * Cenv * Heap * Astack  expr Val * Heap  (a) = (_,_,_, ,  ) l = newloc(  )  ’ = instantiate( , l)  ’ = copy(  )  ’’ = hbind( , l, (a,  ’,  ’))  ’(a) = (_, b, _)  ’= push( , (l, push(emptystack(), newframe())))  com ________________________________________________  expr

5 Creazione di oggetti: commenti  (a) = (_,_,_, ,  ) l = newloc(  )  ’ = instantiate( , l)  ’ = copy(  )  ’’ = hbind( , l, (a,  ’,  ’))  ’(a) = (_, b, _)  ’= push( , (l, push(emptystack(), newframe())))  com ________________________________________________  expr 4 l’oggetto contiene –il nome della classe –una copia del frame delle variabili di istanza –una specializzazione sull’oggetto dell’ambiente di metodi di istanza 4 il costruttore viene eseguito come una invocazione di metodo –non facciamo vedere i possibili effetti “nascosti” sui frames di variabili statiche (modifica di  da parte di  com )

6 Risoluzione di nomi (semplici) 4 il riferimento ad un identificatore (non qualificato) 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 Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val

7 Risoluzione di nomi (nella classe) Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val  (c) = (c1, , _, _, _) defined( , i) _____________________________________________  naming  (i)  (c) = (c1, , _, _, _) not defined( , i)  naming v _____________________________________________  naming v

8 Risoluzione di nomi (nell’oggetto) Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val  (l) = (c, , _) defined( , i) _____________________________________________  naming  (i)  (l) = (c, , _) not defined( , i)  naming v _____________________________________________  naming v

9 Risoluzione di nomi (nel metodo) Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val top(  ) = (x,  )  = top(  ) defined( , i) _____________________________________________  naming  (i) top(  ) = (x,  )  = top(  ) not defined( , i)  ’ = push(pop(  ), (x, pop(  )))  naming v _____________________________________________  naming v top(  ) = (x,  ) empty(  )  naming v _____________________________________________  naming v

10 Qualificazione dei nomi (paths) Path := Path id. | (si parte da Path) this. | (si parte dall’oggetto corrente) (cammino vuoto) 4 la semantica di un path determina il punto di partenza di una operazione di naming Path * (Ide | Loc | met) * Cenv * Heap * Astack  path (Ide | Loc | met)

11 Qualificazione dei nomi Path * (Ide | Loc | met) * Cenv * Heap * Astack  path (Ide | Loc | met)  path p’  naming o’ _________________________________________________  path o’ top(  ) = (o, _) ____________________________  path o  path x

12 Come trovare il valore di un nome Expr := Path Id Expr * Cenv * Heap * Astack  expr Val * Heap  path p’  naming v ___________________________________________________  expr 4 i controlli statici garantiscono che il nome (nel frame opportuno) abbia già ricevuto un valore (inizializzazione o assegnamento) prima dell’uso

13 I comandi 4 un blocco (corpo di un metodo) è una sequenza di dichiarazioni e comandi (che possono anche essere blocchi nidificati) 4 la composizione sequenziale viene trattata in modo standard –nel costrutto c;cl valutiamo cl nello stato risultante dalla valutazione di c 4 trattiamo anche le dichiarazioni di variabili (locali al metodo) come comandi 4 vediamo solo alcuni casi di comandi –condizionali e loops hanno la semantica vista nel primo corso Com * Cenv * Heap * Astack  com Heap * Astack * Cenv

14 Sintassi dei comandi Com := {Com} | (blocco annidato) Path Id = Expr | (assegnamento) Type Id = Expr | (dichiarazione) Path Id (Expr_list) | (invocazione di metodo) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv

15 Semantica dei blocchi Com := {Com} (blocco annidato) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv top(  ) = (x,  )  ’=push(pop(  ), (x, push( , newframe())))  com top(  ’’) = (x,  ’) ________________________________________________  com

16 Semantica delle dichiarazioni Com := Type Id = Expr (dichiarazione) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv top(  ) = (x,  )  = top(  )  expr  ’= bind( , i, v)  ’=push(pop(  ), (x,push(pop(  ),  ’))) _________________________________________  com  la bind “modifica”  dentro 