1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a. 2001-2002 - 4° Ciclo Polimorfismo.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Sottoprogrammi: funzioni e procedure
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.
Costruttori e Distruttori
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
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
2 luglio 2006URM2 – ING- OOP0304 OL G. Cantone e A. Lomartire 1 Programmazione Orientata agli Oggetti Processi, task e thread Java (ed esempi) Università
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
Overriding.
Approfondimento delle classi
Selezione (=scelta) con “if-else”
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
1 laboratorio di calcolo II AA 2003/04 quinta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 Ereditarietà Una classe può essere derivata da una classe esistente usando la sintassi: public, protected e private specificano il tipo di accesso ai.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Programmazione modulare nel linguaggio C
Java base IV: Java e la programmazione O.O.
CLASSI ASTRATTE L’ereditarietà porta riflettere sul
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
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.
Elementi di programmazione ad oggetti a. a. 2009/2010
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Programmazione in Java (8)
Ereditarietà e Polimorfismo
Introduzione alla programmazione Object Oriented
void binario(int n); …………………
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Programmazione concorrente
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
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.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Ereditarietà.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Puntatori e Stringhe.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Template.
Fondamenti di Informatica II Ingegneria Informatica 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.
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Alberi.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.
CORSO DI PROGRAMMAZIONE II
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
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.
La Programmazione ad Oggetti
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo

2 Definizione Il polimorfismo è la capacità che hanno oggetti di classi diverse ma correlate per il fatto di derivare da una classe base comune di rispondere ciascuno in maniera diversa ad uno stesso messaggio. Lo stesso messaggio inviato a diversi tipi di oggetti assume quindi diverse forme, da cui il termine polimorfismo. Il polimorfismo si implementa tramite le funzioni virtuali.

3 Polimorfismo Funzioni virtuali Nell’ambito della definizione delle classi base e derivate una funzione virtuale, pur mantenendo la stessa interfaccia, ha implementazioni diverse da classe a classe e deve essere dichiarata virtuale nel seguente modo: virtual Prototipo_Funzione_Virtuale; Le varie implementazioni della funzione virtuale possono essere richiamate con la tecnica del binding (legame) statico, che si realizza nel momento della compilazione del programma, ricorrendo agli oggetti delle corrispondenti classi, ossia operando come segue: …. Nome_Oggetto. Invocazione_Funzione_Virtuale;

4 Polimorfismo Esempio: class Punto { public:Punto (int x=0, int y=0); virtual void print ( ); private:int x, y;}; Punto::Punto (int a, int b) {x=a; y=b;} void Punto::print ( ) {cout<< “\n” << x<<“, “<<y;} class Segmento: public Punto { public:Segmento (int x=0, int y=0, int x1=0, int y1=0); virtual void print ( ); private:int x1, y1}; Segmento::Segmento (int c, int d, int e, int f) :Punto (c, d) { x1=e; y1=f;} void Segmento::print ( ) {cout<<x1<<“, “<<y1<<“\n”;}

5 Polimorfismo int main ( ) { Punto p1(1, 2), p2(3, 4); Segmento s1(5, 6, 7, 8); p1.print ( ); p2.print ( ); s1.print ( ); return 0;} Stampe eseguite: 1, 2 3, 4 7, 8

6 Polimorfismo Richiamo della funzione virtuale di classe base La funzione virtuale di classe base può svolgere delle operazioni che sono comuni a più classi derivate. Può quindi risultare comoda la sua invocazione da parte delle funzioni virtuali delle classi derivate. Poiché queste funzioni si trovano in una situazione di overriding è bene ricordare che, nell’implementazione delle funzioni virtuali derivate, la funzione virtuale di classe base può essere invocata solo facendo ricorso al nome della classe base ed all’operatore binario di risoluzione dello scope, ossia: …...Nome_Classe_Base :: Invocazione_Funzione_Virtuale;

7 Polimorfismo class Punto { public:Punto (int x=0, int y=0); virtual void print ( ); private:int x, y;}; Punto::Punto (int a, int b) {x=a; y=b;} void Punto::print ( ) {cout <<“\n” <<x<<“, “<<y;} class Segmento: public Punto { public:Segmento (int x=0, int y=0, int x1=0, int y1=0); virtual void print ( ); private:int x1, y1}; Segmento::Segmento (int c, int d, int e, int f) :Punto (c, d) { x1=e; y1=f;} void Segmento::print ( ) {Punto::print( ); cout <<“, “ <<x1<<“, “ <<y1<<“\n”;}

8 Polimorfismo int main ( ) { Punto p1(1, 2), p2(3, 4); Segmento s1(5, 6, 7, 8); p1.print ( ); p2.print ( ); s1.print ( ); return 0;} Stampe eseguite: 1, 2 3, 4 5, 6, 7, 8

9 Polimorfismo Binding dinamico (via puntatore) Se ad un puntatore di classe base si assegna un valore di puntatore di un oggetto di una classe derivata, l’invocazione della funzione virtuale eseguita per mezzo del puntatore comporta l’esecuzione della funzione virtuale della classe derivata a cui appartiene l’oggetto. In questo caso il legame tra oggetto e funzione eseguita, viene realizzato in modo dinamico, ossia non al momento della compilazione del programma, ma della sua esecuzione e, quindi, si parla in questo caso di binding dinamico. Questo meccanismo realizza il vero polimorfismo poiché lo stesso messaggio, ossia l’invocazione della funzione virtuale per mezzo di un puntatore di classe base, comporta l’esecuzione di diverse implementazioni a seconda dell’oggetto a cui è inviato.

10 Polimorfismo Esempio (vedi classi Punto e Segmento) int main ( ) { Punto p1(1, 2), p2(3, 4), *punPtr; Segmento s1(5, 6, 7, 8), s2(1, 2, 3, 4); punPtr= &s1; punPtr->print ( ); punPtr= &s2; punPtr->print ( ); return 0;} Stampe eseguite: 5, 6, 7, 8 1, 2, 3, 4

11 Polimorfismo Binding dinamico (via riferimento) Lo stesso comportamento dinamico può essere ottenuto anche con i riferimenti, ossia: Se definiamo un riferimento alla classe base e gli assegniamo un oggetto di una classe derivata, l’invocazione della funzione virtuale eseguita ricorrendo al riferimento di classe base comporta l’esecuzione della funzione virtuale della classe derivata a cui appartiene l’oggetto assegnato al riferimento di classe base.

12 Polimorfismo Esempio (vedi classi Punto e Segmento) int main ( ) { Punto p1(1, 2), p2(3, 4), &punRif; Segmento s1(5, 6, 7, 8), s2(1, 2, 3, 4); punRif= s1; punRif.print ( ); punRif= s2; punRif.print ( ); return 0;} Stampe eseguite: 5, 6, 7, 8 1, 2, 3, 4

13 Polimorfismo Classi base astratte Le classi base astratte sono quelle che contengono una o più funzioni virtuali pure, ossia contenenti l’inizializzazione “=0” nella dichiarazione: virtual Prototipo_Funzione_Virtuale =0; Le funzioni virtuali pure non hanno una implementazione nella classe base, ma in essa definiscono solo, tramite il prototipo, una particolare interfaccia. Per questa ragione una classe base astratta non ammette l’istanziazione di oggetti.

14 Polimorfismo Funzioni derivate concrete Una funzione virtuale pura viene definita quando non ha senso una sua qualsiasi implementazione per la classe base, mentre hanno senso le implementazioni per le classi derivate. Le classi derivate devono contenere la dichiarazione virtual della funzione, ma non l’inizializzazione “=0”. Se una classe derivata non contiene però la sua implementazione della funzione, diventa anch’essa una classe astratta. Le classi derivate che contengono le rispettive implementazioni della funzione dichiarata pura nella classe da cui derivano, vengono dette concrete.

15 Polimorfismo Distruttori virtuali In una classe base con funzioni virtuali è bene definire virtuale anche il distruttore e utilizzare la stessa definizione di virtuale anche per tutti i distruttori delle classi derivate. In questo caso, se un oggetto viene distrutto esplicitamente con l’operatore delete applicato ad un puntatore del tipo della classe base a cui è stato assegnato il valore del puntatore all’oggetto, verrà distrutto l’oggetto corretto (compresa la sua componente di classe base) perché anche in questo caso, malgrado i distruttori abbiano denominazioni diverse, si applica il binding dinamico.