1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza 159 - tel. (06 5517) 7281 www.fis.uniroma3.it/~orestano.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
/ fax
Recupero debito quarto anno Secondo 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.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Semantica Operazionale di un frammento di Java: lo stato.
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Frontespizio Economia Monetaria Anno Accademico
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
DISEGNO TECNICO INDUSTRIALE
Programmazione Procedurale in Linguaggio C++
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Informatica (Basi di Dati)
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
eliana minicozzi linguaggi1a.a lezione2
Overriding.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Approfondimento delle classi
DHTML: Modello degli Eventi 1. 2 Sommario Introduzione Evento onclick Evento onload Gestione errori con onerror Gestione mouse con levento onmousemove.
Laboratorio di Calcolo I 1) Introduzione Università Roma Tre Corso di Studi in Fisica AA 2002/03.
Lab. Calc. AA 2005/061 Classi. Lab. Calc. AA 2005/062 C e C++ Fino a questo punto abbiamo introdotto gli elementi base di qualsiasi linguaggio di programmazione,
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 sesta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 terza settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
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 seconda 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.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Dichiarazioni e tipi predefiniti nel linguaggio C
Analisi di Immagini e Dati Biologici
Java base IV: Java e la programmazione O.O.
19 Lezione 21/5/04 Composizione dell'immagine 1 COMPOSIZIONE DELLIMMAGINE.
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)
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
Ereditarietà e Polimorfismo
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
LE SAI LE TABELLINE? Mettiti alla prova!.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
14 marzo 2002 Avvisi:.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Bando di Residenza Cap Scheda ENTE 3ROL - Richieste On Line.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
CORSO DI PROGRAMMAZIONE II Lezione 22
Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Transcript della presentazione:

1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( ) UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI FISICA E. AMALDI

2 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire come l'ereditarietà favorisca il riutilizzo del codice esistente. Capire le nozioni di classe base e di classe derivata.

3 Classi base e classi derivate Figura 2D 3D Cerchio Poligono Sfera Cubo Tetraedro Quadrato Triangolo

4 Sintassi class classeDerivata : elencoClassi { dichiarazione della classe }; dove l'elencoClassi e' una lista identificatori di classi base separati da virgole, ciascuno preceduto da una parola chiave che specifica il tipo di accesso.

5 Esempi class Figura { }; // questa e' una classe base class 2D : public Figura { }; // 2D eredita da Figura class Cerchio : public 2D { }; // Cerchio eredita da 2D

6 Altro esempio: personale di unazienda

7 L'ereditarieta' in C++: Estensione delle caratteristiche di una classe: la classe derivata è un caso particolare della classe base con alcuni dettagli in più –la figura 2D e' un caso particolare di Figura –il Cerchio e' una figura 2D Adesione ad un modello: la classe base definisce le caratteristiche minimali che devono avere tutte le classi derivate –Se Figura ha un metodo che si chiama disegna tutte le classi che ereditano da Figura avranno un metodo disegna

8 Lereditarieta permette di ri-utilizzare il codice e quindi di rendere piu economica la gestione di programmi complessi Codici anche complessi sono piu comprensibili e meglio organizzati Le relazioni tra concetti appaiono nel codice come relazioni di ereditarieta

9 Implementazione Si identificano classi che appaiono in relazione Le classi in relazione si organizzano gerarchicamente Tra classi organizzate gerearchicamente si identificano nuovi attributi nuovi metodi vecchi metodi che devono essere ri-definiti

10 Figura char *nome void disegna( ) 2D char *nome char *colore double superficie void disegna( ) void trasla( ) void ruota( ) double area( )

11 Protezioni L'accesso ai membri di una classe può essere di tre tipi private // dati e metodi inacessibili dall'esterno public // dati e metodi accessibili a tutti protected // public per le classi derivate, private per gli altri Analogamente la classe derivata può ereditare dalle classe base in tre modi private public protected

12 Esempio class B { public: int x; protected: int w; private: int z; };

13 Derivazione pubblica Ogni membro public della classe base è public nella classe derivata Ogni membro protected della classe base è protected nella classe derivata Ogni membro private della classe base è private per la classe derivata ed è visibile solo dalla classe base Ovvero le protezioni dei membri della classe base rimangono inalterate nella classe derivata class D : public B { // dichiarazione dei membri di D; };

14 Derivazione protetta Ogni membro public della classe base è protected nella classe derivata Ogni membro protected della classe base è protected nella classe derivata Ogni membro private della classe base è private nella classe derivata ed è visibile solo dalla classe base class D : protected B { // dichiarazione dei membri di D; };

15 Derivazione privata Ogni membro public della classe base è private nella classe derivata Ogni membro protected della classe base è private nella classe derivata Ogni membro private della classe base è private nella classe derivata ed è visibile solo dalla classe base class D : private B { // dichiarazione dei membri di D; };

16 Privati private PrivatiProtetti protected PrivatiProtettiPubblici public Attributi e Metodi Privati Attributi e Metodi Protetti Attributi e Metodi Pubblici Tipo di Ereditarieta Riassumendo...

17 Costruttori e Distruttori Quando si crea un oggetto di una classe derivata viene prima chiamato il costruttore della classe base e poi quello della classe derivata Quando si distrugge un oggetto di una classe derivata viene prima chiamato il distruttore della classe derivata e poi quello della classe base È come se la classe base fosse un contenitore per la classe derivata: prima si crea il contenitore, poi il contenuto, prima si cancella il contenuto e poi il contenitore.

18 Creazione di un oggetto base

19 Creazione di un oggetto base

20 Creazione di un oggetto derivato

21 Creazione di un oggetto derivato

22 Cancellazione di un oggetto derivato

23 Cancellazione di un oggetto derivato

24 Cancellazione di un oggetto base

25 Cancellazione di un oggetto base

26 Conversione di tipo tra classi derivate e classi base Se la classe D eredita da B e abbiamo le seguenti dichiarazioni: D d; B b; Possiamo convertire un oggetto di tipo D in un oggetto di tipo B con l'istruzione b=d; // NB perdiamo informazione Ma non possiamo fare il contrario d=b;// NO!!!!!

27 Overloading e Polimorfismo Abbiamo già visto accennato che in C e C++ è possibile dare lo stesso nome a più funzioni (o metodi) che vengono distinte dal compilatore grazie alle differenze nella lista dei parametri (overloading) void stampa( ); void stampa( char * commento); Ma quando una classe eredita da un'altra ha la possibilità di ridefinire uno o più metodi della classe base (con la stessa lista di parametri!). Questa proprietà si chiama polimorfismo.

28 Ereditarietà Gli oggetti complessi possono essere costruiti a partire da oggetti più semplici. Gli oggetti complessi derivano tutto o parte del loro comportamento dagli oggetti a partire dai quali sono stati generati. Polimorfismo Oggetti simili possono essere trattati, in alcuni casi, come se fossero dello stesso tipo, senza la necessità di implementare trattamenti specifici per distinguere tra le varie tipologie. Overloading dei metodi e degli operatori Metodi della stessa classe con lo stesso nome possono essere distinti in base al numero e alla tipologia degli argomenti. Gli operatori possono essere ri-definiti per applicarli ai membri di una classe o per definire operazioni tra membri di classi diverse

29 Polimorfismo e compilazione Una funzione polimorfa può essere applicata ad oggetti appartenenti a classi diverse: Cerchio.disegna( ); Sfera.disegna( ); 3D.disegna( ); Talvolta non è possibile per il linker decidere quale metodo selezionare tra i vari metodi disegna a lui noti, perchè non gli è possibile capire la classe di appartenenza di ogni oggetto…

30 binding Binding: collegamento tra la chiamata ad una funzione de la sua definizione Compile-time, static o early binding: il collegamento viene effettuato dal linker Run-time, dynamic o late binding: il collegamento viene effettuato durante l'esecuzione del codice, al momento della chiamata Una virtual function è una particolare dichiarazione C++ che consente il late binding

31 1. Per indicare al compilatore che deve cercare il metodo nella classe piu bassa nella catena gerarchica si usa la parola virtual 2. virtual va utilizzato nella classe piu alta nella catena gerarchica delle classi che devono utilizzare il polimorfismo (ma e bene ripeterlo anche nelle classi figlie) 3.Se un metodo e dichiarato virtual Il compilatore ricerca un metodo nella classe piu bassa nella catena di ereditarieta (esempio: calcolaPosizione(fx,fy,dt) ) Se non lo trova esegue il metodo nella classe piu alta (esempio: X() Vx() ) 4.Sintassi virtual void calcolaPosizione (float fx, float fy, float dt); Metodi virtuali

32 #ifndef CORPOCELESTE_H #define CORPOCELESTE_H class CorpoCeleste { protected: char *Nome; double m; double x; double y; double vx; double vy; public: CorpoCeleste() ; CorpoCeleste (const char *nomeCorpo, float mass, float xpos, float ypos, float vxi, float vyi); ~CorpoCeleste() ; virtual void calcolaPosizione (float fx, float fy, float t); void stampaPosizione(); void stampaVelocita() ; const char *nome() ; double M() ; double X() ; double Y() ; double Vx() ; double Vy() ; }; #endif CorpoCeleste.h con modifiche per ereditarietà

33 Sonda tCount (num. reale) tStart (num. reale) owner (CorpoCeleste *) svx (num. reale) svy (num. reale) started (char) Sonda(…) ~Sonda() CalcolaPosizione(forza, dt) CorpoCeleste Nome (stringa) m (num. reale) x (num. reale) y (num. reale) vx (num. reale) vy (num. reale) CorpoCeleste( …. ) ~Corpoceleste() CalcolaPosizione(forza, dt) StampaVelocita() StampaPosizione() M() X() Y() Vx() Vy() La classe Sonda

34

35 #include "CorpoCeleste.h" class Sonda: public CorpoCeleste { protected: float tCount; float tStart; CorpoCeleste *owner; float svx; float svy; char started; public: Sonda(const char *name, float mass, float starttime, CorpoCeleste *startFrom, float vxi, float vyi); ~Sonda() { } ; void calcolaPosizione (float fx, float fy, float t); }; Sonda.h

36 #include "Sonda.h" #include Sonda::Sonda(const char *name, float mass, float starttime, CorpoCeleste startFrom, float vxi, float vyi) : CorpoCeleste(name, mass, 0., 0., 0., 0.) { tStart = starttime ; tCount = 0 ; owner = startFrom ; svx = vxi ; svy = vyi ; started = 0 ; x = owner->X() ; y = owner->Y() ; vx = owner->Vx() ; vy = owner->Vy() ; } Sonda.cc prima parte

37 void Sonda::calcolaPosizione (float fx, float fy, float t) { if (tCount<tStart) { x = owner->X() ; y = owner->Y() ; vx = owner->Vx() ; vy = owner->Vy() ; } else { if (!started) { cerr << "Sonda in partenza...\n ; vx += svx ; vy += svy ; started = 1 ; } CorpoCeleste::calcolaPosizione(fx,fy,t); } tCount += t ; } Sonda.cc seconda parte

38 1.Voglio rappresentare un Oggetto CorpoCeleste terra(…..) ; 2.Voglio rappresentare piu oggetti CorpoCeleste terra(…..) ; CorpoCeleste sole(…..) ; 3.Voglio rappresentare tanti oggetti (solo se di dimensione costante!) CorpoCeleste pianeti[10] ; pianeti[0] = …. ; pianeti[1] = … ; 4.Voglio rappresentare tanti oggetti legati tra loro da ereditarieta devo usare un vettore di puntatori CorpoCeleste * pianeti[10] ; pianeti[0] = new CorpoCeleste(…); pianeti[1] = new Sonda(…); Ereditarietà e puntatori

39

40 simula.cc

41 Quando viene invocato il Costruttore di una Classe che eredita da altre, il compilatore invoca automaticamente i Costruttori di tutte le Classi nella catena di ereditarieta, inziando dal costruttore piu in alto nella catena gerarchica Quando viene invocato il Distruttore di una Classe che eredita da altre, il compilatore invoca automaticamente i Costruttori di tutte le Classi nella catena di ereditarieta, inziando dal costruttore piu in basso nella catena gerarchica Se ad un oggetto si accede tramite il suo puntatore, istanziato come puntatore di una delle classi madre, e necessario che il distruttore sia definito virtual, in modo che il compilatore inizi ad invocare il distruttore piu in basso nella catena di ereditarieta, risalendo poi tutta la catena gerarchica. Distruttori virtuali

42 Autoveicolo Autovettura Auto_Fiat Autocarro PuntoPanda Distruttori virtuali: esempio

43 Creazione di oggetti Distruzione di oggetti ( accedendo ad un oggetto tramite puntatore ad Autovettura ) Distruzione di oggetti ( accedendo ad un oggetto tramite puntatore + virtual ) Creo un Autoveicolo Creo una Autovettura Creo una Auto_Fiat Creo una Punto Distruggo una Autovettura Distruggo un Autoveicolo Distruggo una Punto Distruggo una Auto_Fiat Distruggo una Autovettura Distruggo un Autoveicolo

44 1.Se un metodo e dichiarato virtual, la classe che eredita (la classe piu bassa nella catena gerarchica) puo ridefinire il metodo, che e comunque implementato nella classe da cui si eredita 2.Se un metodo e dichiarato pure virtual ( virtual …. = 0 ; ) tutte le classi che ereditano devono fornire il metodo, che non e implementato nella classe da cui si eredita 3.Sintassi virtual double Area() = 0 ; 4.Una classe con almeno un metodo pure virtual si chiama classe astratta 5.Attenzione! Gli oggetti di una classe astratta non possono essere istanziati Metodi pure virtual e classi astratte

45 classi astratte Attenzione! Gli oggetti di una classe astratta non possono essere istanziati Ma allora a che serve tale classe? E un modello che definisce linterfaccia comune di tutti gli oggetti appartenenti ad una certa categoria costringendo tutte le classi che da essa ereditano ad implementare certi metodi (cf. pag.7) pag.7