1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
1 Semantica Operazionale di un frammento di Java: lo stato.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
Metodologie di Programmazione = decomposizione basata su astrazioni
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;}
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
Derivazione tra classi
Overriding.
Approfondimento delle classi
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
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.
nome: sequenza di caratteri usata per denotare un oggetto
Java base IV: Java e la programmazione O.O.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Programmazione in Java (8)
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
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Università degli Studi di Napoli Parthenope programmazione III.
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
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 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
OBJECT ORIENTED DATABASE introduzione. OGGETTO Ha due componenti:  stato: valore di alcune variabili (variabili di istanza)  comportamento: insieme.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
estensione (con piccole varianti) di quella in
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,
Metodologie di Programmazione Esercizi sulla semantica di Java.
Esercitazione del 7 marzo 2008 Ereditarieta’. Esercizio: soluzione Implementare la seguente specifica che definisce un tipo di dato Libro.
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)
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.
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.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
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.
La Programmazione ad Oggetti
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
La programmazione ad oggetti
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Transcript della presentazione:

1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica Operazionale, appunti di Fondamenti di Programmazione

2 Regole di transizione 4 diverse relazioni di transizione, in corrispondenza dei diversi tipi di costrutti del linguaggio –espressioni, comandi, dichiarazioni ecc.   kk

3 Dichiarazione di classe extends Class_decl := class Id extends Id {Static_var_decl_listStatic_meth_decl_list Inst_var_decl_list Inst_meth_decl_list Costruttore Costruttore } 4 assunzioni –c’è sempre extends ogni classe estende la classe Object –le dichiarazioni di variabili e metodi statici sono “raggruppate” –esiste sempre il costruttore

4 Semantica informale delle classi 4 variabili e metodi statici appartengono alla classe 4 variabili e metodi di istanza appartengono agli oggetti (istanze della classe) 4 una classe definisce un tipo (nome della classe) –gli oggetti della classe hanno quel tipo 4 relazioni di sottoclasse ed ereditarietà –gerarchia di tipi, realizzata con extends –la radice della gerarchia è la classe predefinita Object

5 Ereditarietà 4 se c down è una sottoclasse (estende) c up –variabili e metodi statici di c up (e delle sue superclassi) sono visibili direttamente da c down –variabili e metodi di istanza di c up (e delle sue superclassi) diventano anhe variabili e metodi di istanza degli oggetti di c down –Tipo degli oggetti di c up è anche tipo degli oggetti di c down 4 a meno di overriding

6 Overriding 4 se c down è una sottoclasse (estende) c up –un metodo di istanza di c up (e delle sue superclassi) può essere ridefinito (stesso nome e tipi) in c down –l’idea è quella di definire un metodo più specializzato, che rimpiazza quello definito in una delle superclassi 4 l’overriding non “dovrebbe” essere possibile per le variabili e per i metodi statici –ma questo non è sempre garantito dal compilatore –comportamenti complessi e poco prevedibili –assumeremo che non si verifichi mai

7 Inizializzazioni 4 Java permette di inizializzare (al valore di una espressione) sia le variabili statiche che quelle di istanza in una dichiarazione –le inizializzazioni delle variabili statiche vengono effettuate la prima volta che si usa una classe –le inizializzazioni delle variabili di istanza vengono effettuate all’atto della creazione di una istanza (oggetto) non avere inizializzazioni 4 per semplicità, decidiamo di non avere inizializzazioni nelle dichiarazioni di variabile all’interno di classi possono essere affidate 4 Le inizializzazioni possono essere affidate al(i) costruttore(i) –eseguito quando si crea un’istanza

8 Il costruttore 4 i costruttori sono usati per la creazione di un oggetto: –Inizializzazione dello stato (variabili di istanza) 4 anche per i costruttori esiste un meccanismo di ereditarietà 4 se c è una classe che ha come superclassi (nell’ordine) le classi c1, c2,…, cn  Object, –all’atto della creazione di una istanza di c –si eseguono (nell’ordine) i costruttori di cn,…,c2,c1,c

9 Dichiarazione di classe Class_decl := class Id extends Id { Static_var_decl_list Static_meth_decl_list Inst_var_decl_list Inst_meth_decl_list Costruttore } Cenv = Id -> Cdescr Cdescr = Id * Frame * Menv * Frame* Menv 4 la relazione di transizione  cdecl Class_decl * Cenv  cdecl Cenv

10 Dichiarazione di classe Cenv = Id -> Cdescr Cdescr = Id * Frame * Menv * Frame* Menv Class_decl * Cenv  cdecl Cenv  (b) = (_,_,_,  b,  b )  b (b) = (_, c b, _)  vdecl   vdecl  a  mdecl   mdecl  a ________________________________________________  cdecl  cdecl cbind( , a, (b, , ,  a, mbind(  a, a, ([], c b c, a)))) cbind( , a, (b, , ,  a, mbind(  a, a, ([], c b c, a))))

11 Dichiarazioni di metodi Method_decl := Id (Idlist) Blocco 4 guardiamo solo la dichiarazione singola –per una lista di dichiarazioni, si ripete a partire dal risultato precedente Menv = Id -> Mdescr Mdescr = Idlist * Blocco * ( Loc | Id ) 4 la relazione di transizione  mdecl Method_decl * Id * Menv  mdecl Menv

12 Dichiarazione di metodo Method_decl := Id (Idlist) Blocco  mdecl mbind( , m, (idlist, blocco, c))  mdecl mbind( , m, (idlist, blocco, c)) 4 come già osservato, l’eventuale overriding è realizzato automaticamente da mbind

13 Dichiarazioni di variabili Var_decl := Type Id;  come già osservato, le dichiarazioni non hanno inizializzazione 4 guardiamo solo la dichiarazione singola –per una lista di dichiarazioni, si ripete a partire dal risultato precedente Frame = Id -> Val Val = (Bool | Int | Loc) 4 la relazione di transizione  vdecl Var_decl * Frame  vdecl Frame

14 Dichiarazione di variabile Frame = Id -> Val Val = (Bool | Int | Loc) Var_decl * Frame  vdecl Frame  vdecl bind( , id, default(t))  vdecl bind( , id, default(t)) 4 come già osservato, non ci deve essere overriding –id non deve essere definito in  4 in realtà un Frame è una struttura modificabile –update modifica l’argomento 4 la funzione default genera un valore di tipo t –0 se t è intero –null se t è il tipo di un oggetto