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.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Tipi di dato astratti Lista, Pila, Coda, Albero.
Recupero debito quarto anno Primo incontro
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Programmazione object oriented in C++
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
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.
29 febbraio 2008 Progettare tipi di dato astratti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
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
Verification of object-oriented programs with invariants by M. Barnett, R. DeLine, M. Fähndrich, K.R.M. Leino, W. Schulte Bordignon Claudio Zampieron Elisa.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Programmazione Corso di laurea in Informatica
Approfondimento delle classi
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
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
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.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
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.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Matrici: un’implementazione parametrica in C++
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
CORSO DI PROGRAMMAZIONE II Lezione 22
Programmazione ad oggetti
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.
Programmazione in Java
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
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.
1 Un esempio con iteratore: le liste ordinate di interi.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
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 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

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

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Che cos’è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti Linguaggi di programmazione come Pascal, C, C++ o Java consentono all’utente di definirne di nuovi Cos’è un tipo?

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Insieme di valori + operatori + 0, 1, 2, …, n, … Interi true, false Booleani not  I tipi di dato sono modelli matematici

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 I numeri razionali Le rappresentazioni più usate sono quella decimale (imprecisa), oppure le frazioni

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Specifica: la sintassi Consiste nel definire nuovi identificatori: nome del tipo definito: Es. Ratio nomi e tipi degli operatori Es. NewRatio: void  Ratio Assign: Int, Int  Ratio Sum: Ratio, Ratio  Ratio Invert: Ratio  Ratio LessOrEqual: Ratio, Ratio  Bool

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Specifica: la semantica Consiste nel definire il significato/ comportamento degli operatori Equazionalmente: LessOrEqual(Assign(a, b), Assign(c, d)) = (ad  bc) Bene per le proprietà del campo dei razionali, ma problematico per esprimere side effects

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Specifica: la semantica Consiste nel definire il significato/ comportamento degli operatori Con pre e post-condizioni NewRatio(): Post: produce la frazione 0/1 Assign(n, m):Post: ritorna n/m Sum(r, s):Post: ritorna r + s …

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Il significato dell’astrazione Quanto fa 2/3 + r ? Sum(Assign(2,3), r) Il razionale r è maggiore o eguale a 0 ? LessOrEqual(Assign(0,1), r) Utente

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Il significato dell’astrazione Vorrei sapere se le frazioni sono ridotte ai minimi termini Questi sono affari privati Posso conoscere il denumeratore di r? La specifica non prevede questo operatore Utente

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Il significato dell’astrazione Utente L’utente interagisce con i valori di tipo Ratio solo attraverso gli operatori: non può né deve conoscere i dettagli della loro realizzazione

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Il significato dell’astrazione Implementazione dell’ADT barriera operatore Programma applicativo Accesso diretto ai dati ADT = Abstract Data Type

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Che cos’è una struttura dati? modo sistematico di rappresentare ed organizzare dati Struttura dati = afkzqdiw vettore 251  9 lista numero intero rappr. in binario

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Primitive di accesso Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati: afkzqdiw base = indirizzo del primo elemento V[i] = valore all’indirizzo base + i  dim(valore) V

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Primitive di accesso Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati: 51  9 L = Puntatore al primo el. p p.next p.info 2 Cons(2, L)

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Primitive di accesso Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati: not

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Invarianti di struttura Una proprietà di una struttura dati che deve essere mantenuta dopo qualunque accesso alla struttura è un invariante di struttura 251  9 lista I puntatori di una lista devono concatenare tra loro tutti i singoli elementi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Invarianti di struttura Una proprietà di una struttura dati che deve essere mantenuta dopo qualunque accesso alla struttura è un invariante di struttura numeratore denumeratore denumeratore  0 Se così abbiamo deciso, possiamo chiedere che num. e den. siano primi tra loro

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 I numeri razionali: realizzazione numeratore denumeratore Struttura dati: un record typedef struct ratio { int num, den; } Ratio; Ratio Sum (Ratio a, Ratio b) {Ratio c; c.num = a.num*b.den + b.num*a.den; c.den = a.den*b.den; return c; }

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Una rivoluzione copernicana Universo centrato sulle funzioni: i nomi dei dati sono passati alle funzioni che così vi accedono Universo centrato sulle funzioni: i nomi dei dati sono passati alle funzioni che così vi accedono Universo centrato sui dati: i nomi delle funzioni sono passati ai dati, che li interpretano e usano per modificare sé stessi Universo centrato sui dati: i nomi delle funzioni sono passati ai dati, che li interpretano e usano per modificare sé stessi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Oggetti Un oggetto consiste di: una collezione di dati nascosti (stato) un insieme M di metodi pubblici in grado di manipolare lo stato e di comunicare all’esterno informazioni sullo stato Un oggetto consiste di: una collezione di dati nascosti (stato) un insieme M di metodi pubblici in grado di manipolare lo stato e di comunicare all’esterno informazioni sullo stato Programmazione orientata agli oggetti: le unità di base di un programma sono gli oggetti l’esecuzione di un programma consiste nell’inviare messaggi agli oggetti, i quali attivano in risposta i loro metodi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Oggetti: esempio value0 get(codice di get) set(codice di set) riferimento oggetto mycell.set(0); … mycell.get() = 0 …

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Una realizzazione più efficiente value0 1 get(codice di get) set(codice di set) Il processo che identifica i metodi che appartengono ad un oggetto realizzato in questo modo prende il nome di method lookup.

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Classi Una classe è una descrizione (un prototipo) di una collezione di oggetti, consistente in: 1.un elenco di campi e dei loro tipi (che realizzano lo stato) 2.un elenco di metodi, incluse le loro definizioni (corpo) Una classe è una descrizione (un prototipo) di una collezione di oggetti, consistente in: 1.un elenco di campi e dei loro tipi (che realizzano lo stato) 2.un elenco di metodi, incluse le loro definizioni (corpo)

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Classi: esempio class cell is var value: Integer := 0; method get(): Integer is return this.value; method set(n: Integer) is this.value := n; this è un riferimento all’oggetto che esegue il metodo

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Istanziazione In un linguaggio “class based” gli oggetti sono istanze di classi var myCell: TypeOf(cell) := new cell; In alcuni linguaggi (C++, Java) il tipo di una classe coincide con la classe stessa L’operatore new è un allocatore (in C++ è una evoluzione di malloc )

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Dichiarazione e definizione class nome della classe { private: lista di variabili e metodi privati public: lista di variabili e metodi pubblici }; Una classe si dichiara utilizzando la sintassi: Per definire un metodo si usa invece la sintassi: tipo del valore nome della classe :: nome del metodo ( lista argomenti ) { corpo del metodo } operatore di risoluzione

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Esempio: numeri complessi class Complex { private: float real, imag; public: void assign_real(float); void assign_imag(float); float get_real(); float get_imag(); Complex add(Complex); Complex multitly(Complex); // ecc. }; void Complex::assign_real(float re) {real = re;} float Complex::get_real() {return real;}

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Oggetti Gli oggetti sono istanze delle classi; condividono i metodi e le variabili della classe (precedute dal qualificatore static ), mentre posseggono propri campi per le variabili oggetto. Es. Complex a, b, c; // crea tre oggetti della classe Una volta definiti, gli oggetti possono invocare metodi per notificare o modificare il proprio stato: a.assign_real(7.2); float x = a.get_real() ; // x vale 7.2 Inoltre un oggetto può essere definito attraverso un’assegnamento: a = b.add(c); // significa a = b + c;

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Il puntatore this Un metodo appartenente ad una classe può accedere direttamente ai campi privati; per sottolineare che questi campi sono quelli dell’oggetto cui appartiene il metodo si usa il puntatore this (in altri linguaggi self ): Es. Un modo più esplicito di scrivere il metodo assign_real della classe Complex è void Complex::assign_real(float re) {this->real = re;} Dalla stessa sintassi usata risulta che il tipo di this in un metodo appartenente alla classe X ha tipo X* (puntatore a oggetti di tipo/classe X ).

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Funzioni inline Quando il corpo di un metodo si riduce ad un’assegnazione ovvero a ritornare il valore di una variabile di campo privato, allora può essere inserito direttamente nella dichiarazione della classe (il metodo allora si dice inline): class Complex { private: float real, imag; public: void assign_real(float re) {real = re;} void assign_imag(float im) {imag = im;} float get_real() {return real;} float get_imag() {return imag;} Complex add(Complex); Complex multitly(Complex); // ecc. }; Nota: le funzioni inline possono essere precedute dalla parola inline. inline functions

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Costruttori Ciascuna classe dispone di uno o più costruttori. Un costruttore è un metodo con lo stesso nome della classe, il cui compito è di allocare gli oggetti della classe, eventualmente inizializzandone i campi. class Complex { private: float real, imag; public: Complex(float re=0, float im=0) {real=re,imag=im;} // ecc. }; Complex a; // a.real = 0.0, a.imag = 0.0 Complex b(7.3); // b.real = 7.3, b.imag = 0.0 Complex c(7.3,5.1); // c.real = 7.3, c.imag = 5.1 valori di default

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Razionali in C++ class Ratio { public: Ratio (int n=0, int d=0); void Assign (int n, int d); Ratio Sum (Ratio r); bool LessOrEqual (Ratio r); void print (); private: int num, den; }; Interfaccia: corrisponde alla specifica sintattica

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Razionali in C++ Ratio::Ratio(int n, int d) { num = n; den = d; } void Ratio::Assign (int n, int d) { num = n, den = d; } costruttore :: operatore di risoluzione

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Razionali in C++ Ratio Ratio::Sum (Ratio r) { Ratio q (num*r.den+den*r.num,den*r.den); return q; } Si usa come: Ratio a (2, 3); Ratio b (5, 4); Ratio c = a.Sum(b); // c = a + b;