Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Astrazioni Polimorfe e Tipi Generici. 2 Polimorfismo Dal Greco molte forme Una variabile polimorfa può riferirsi a oggetti di classi diverse Un metodo.
Argomenti della lezione
Funzioni Friend Come abbiamo visto non possiamo accedere a membri privati di una classe dall'esterno della classe. Ma a volte abbiamo bisogno di farlo.
Oggetti Java.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
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.
Introduzione al linguaggio C
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Strutture dati elementari
Algoritmi in C++ (1) da completare
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Alberi binari Definizione della struttura dati: struct tree { };
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
Introduzione al linguaggio C++ 5 lezioni
Algoritmi e Strutture Dati IV. Heap e Code di Priorità
Argomenti della lezione
Algoritmi e Strutture Dati
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
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,
1 Ereditarietà Una classe può essere derivata da una classe esistente usando la sintassi: public, protected e private specificano il tipo di accesso ai.
Java Collections.
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.
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.
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
30 ottobre Mergesort F. Bombi 30 ottobre 2002.
Algoritmi e strutture dati
© M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti A.A Collezioni di dati in Java.
Matrici: un’implementazione parametrica in C++
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Nota (rif. alla lezione precedente): Vector vs ArrayList Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma: I metodi.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Schiavone & Scalas 2 In informatica, il termine stack o pila viene usato in diversi contesti per riferirsi a strutture dati le cui modalità d'accesso.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
CORSO DI PROGRAMMAZIONE II Lezione 22
ODMG. L’ODMG L’Object Data Management Group è un consorzio di produttori di ODBMS che ha proposto uno standard per: il modello a oggetti il linguaggio.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 11 Ereditarietà in C++
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.
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. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture Dati.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Gerarchie e polimorfismo: liste. 2 Generalizzare le liste di interi  List 4 lista di oggetti –non modificabile 4 vorremo poi definire un sottotipo.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Lezione X Laboratorio di Programmazione. Struttura di un programma Definizione classe e specifica (parziale) classe.hclasse.cpp main.cpp Specifica metodi.
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.
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.
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 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
Esercizi iteratori. Matrice import java.util.Iterator; public class MatrixIterator implements Iterator { private Matrix matrix; private int currentRow.
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
Transcript della presentazione:

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Funzioni parametriche sul tipo: modelli Vi sono algoritmi che non dipendono dal tipo dei dati che elaborano: void swap (int& m, int& n) {int temp = m; m = n; n = temp; } void swap (string& s, string& t) {string temp = s; s = t; n = temp; } In C++ possiamo parametrizzare sul tipo degli argomenti: template void swap (T& m, T& n) { T temp = m; m = n; n = temp; } modello

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Chiamata di modelli di funzioni Quando occorre chiamare una funzione parametrizzata sul tipo, il C++ consente di lasciare quest’ultimo implicito, deducendolo dal contesto di chiamata: int m = 6; n = 34; swap(n, m); string(s1 = “Mario Rossi”, s2 = “Giovanni Bianchi”); swap(s1, s2); Nota: la dichiarazione significa “per ogni tipo T ” (non necessariamente una classe (es. T = int ); inoltre è possibile parametrizzare su più di un tipo: template

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Overloading di operatori Come per le funzioni, anche gli operatori possono essere sovraccaricati in C++: class Complex { public: Comlex(float re=0, float im=0) {real = re; imag = im;} Complex operator+(const Complex&); private: float real, imag; }; Complex Complex::operator+(const Complez& z) { return Complex(real + z.real; imag + z.imag);} //... Complex A = C + B; // equivale a C.operator+(B)

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Strutture dati parametriche La maggior parte delle strutture dati non elementari è parametrica nel tipo dei dati contenuti: vettori, liste, pile, code, alberi, ecc. Sintassi C++: template class X {... } Come accade per i modelli di funzioni, quelli delle classi generano classi per istanziazione del parametro con un tipo: X x; // x ha classe ottenuta da X // quando T = short X y; // y ha classe ottenuta da X // quando T = string

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Metodi delle strutture parametriche I metodi di una classe parametrica sono in effetti dei modelli: template class X { T square (T x) {return x*x; } }; viene trattato come template T square (T x) {return x*x; } Dunque il modello X genera la classe X equivalente a: class Xshort { short square (short x) {return x*x; } };

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Classe Stack parametrica template class Stack { public: Stack (int s = 100) { size = s; top = -1; data = new T[size]; } ~Stack {delete [] data;} void push (T x) {data[++top] = x;} T pop () {return data[top--];} bool isEmpty () {return top == -1;} bool isFull () {return top == size-1;} private: int size, top; T* data; };

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Elementi della lista: subtyping class ListEl; typedef ListEl *PListEl; class ListEl { friend class List; friend class ListIterator; private: Object info; PListEl next; ListEl (Object obj, PListEl nxt) { info = obj; next = nxt;} };

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Liste parametriche template class ListEl { friend class List ; friend class LisIterator ; private: T info; ListEl * next; ListEl (T x, ListEl * n) { info = x; next = n;} };

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Liste: subtyping class ListEl; typedef ListEl *PListEl; class List : public Collection { friend class ListIterator; public: void insert (PObject obj); // inserimento in testa void insert (int index, PObject obj); // overloading: inserimento con indice bool empty (void) { return first == NULL;} PIterator iterator (void); //... protected: PListEl first; };

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Liste parametriche template class List { friend class LisIterator ; public: void insert (T x); // inserimento in testa void insert (int index, T x); // overloading: inserimento con indice bool empty (void) { return first == NULL;} ListIterator * iterator (void); //... protected: ListEl * first; };

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Iteratori sulle liste: subtyping class ListIterator; typedef ListIterator *PListIterator; class ListIterator : public Iterator { public: bool hasNext (void); Object next (void); void reinit() {current = mylist->first;} ListIterator (PList l) { mylist = l; current = l->first;} private: PList mylist; PListEl current; };

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Iteratori su liste parametriche template class ListIterator { public: bool hasNext (void); T next (void); void reinit() {current = mylist->first;} ListIterator (const List l) { mylist = l; current = l->first;} private: const List * mylist; ListEl * current; };