Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Funzioni In C++ le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri.
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.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo 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
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Fondamenti di Informatica
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.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Overriding.
Approfondimento delle classi
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
nome: sequenza di caratteri usata per denotare un oggetto
Funzioni. Lab.Calc. AA 2005/062 Astrazione Consiste nell'ignorare i dettagli e concentrarsi sull'essenziale: in particolare ci consente di utilizzare.
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. AA 2005/061 puntatori. Lab. Calc. AA 2005/062 Attributi di un oggetto nome o identificatore; tipo o classe; valore o valori; indirizzo;
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.
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
Lezione XI Laboratorio di Programmazione. Ereditarieta Fondamentale proprieta dei linguaggi OO. Permette di specificare un nuova classe derivata da unaltra.
Java base IV: Java e la programmazione O.O.
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.
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.
Programmazione in Java (8)
Ereditarietà e Polimorfismo
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Introduzione alla programmazione Object Oriented
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
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 Polimorfismo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Ereditarietà.
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
CORSO DI PROGRAMMAZIONE II Lezione 22
Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 11 Ereditarietà in C++
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
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
Programmazione in Java
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
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.
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.
Transcript della presentazione:

Lab. Calc. 2005/06 Ereditarietà

Lab. Calc. 2005/06 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.

Lab. Calc. 2005/06 Classi base e classi derivate Figura 2D 3D Cerchio Poligono Sfera Cubo Tetraedro Quadrato Triangolo

Lab. Calc. 2005/06 classi baseclassi derivate Figura2D 3D 2DCerchio Poligono 3DSfera Cubo Tetraedro PoligonoQuadrato Triangolo

Lab. Calc. 2005/06 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.

Lab. Calc. 2005/06 Esempi class Figura { }; // questa e' una classe base class 2D : public Figura { }; // 2D eredita da Figura class Cerchio : public 2D { }; // Cerchio eredita da 2D

Lab. Calc. 2005/06 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

Lab. Calc. 2005/06 Membri della classe derivata Dati membri della classe base Metodi membri della classe base Nuovi dati membri della classe derivata Nuovi metodi membri della classe derivata

Lab. Calc. 2005/06 Figura string nome void disegna( ) 2D string nome string colore double superficie void disegna( ) void trasla( ) void ruota( )

Lab. Calc. 2005/06 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

Lab. Calc. 2005/06 Esempio class B { public: int x; protected: int w; private: int z; };

Lab. Calc. 2005/06 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

Lab. Calc. 2005/06 class D : public B {// i membri di D hanno // accesso sia ai membri pubblici // che ai membri protetti di B // gli utenti della classe D hanno accesso solo ai // membri pubblici di B e di D, le classi derivate da D // hanno accesso anche ai membri protetti sia di B che di D public: int a; protected: int b; private: int c; };

Lab. Calc. 2005/06 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

Lab. Calc. 2005/06 class D : protected B { // i membri di D hanno // accesso sia ai membri pubblici // che ai membri protetti di B // gli utenti della classe D hanno accesso solo ai // membri pubblici di D, e a nessun membro di B, // le classi derivate da D hanno accesso anche ai membri // protetti di D e ai membri pubblici e protetti di B public: int a; protected: int b; private: int c; };

Lab. Calc. 2005/06 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

Lab. Calc. 2005/06 class D : private B { // i membri di D hanno // non hanno accesso a nessun membro di B // gli utenti della classe D hanno accesso solo ai // membri pubblici di D, e a nessun membro di B, // le classi derivate da D hanno accesso anche ai membri // protetti di D ma non hanno accesso ai membri di B public: int a; protected: int b; private: int c; };

Lab. Calc. 2005/06 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.

Lab. Calc. 2005/06 Creazione di un oggetto base

Lab. Calc. 2005/06 Creazione di un oggetto base

Lab. Calc. 2005/06 Creazione di un oggetto derivato

Lab. Calc. 2005/06 Creazione di un oggetto derivato

Lab. Calc. 2005/06 Cancellazione di un oggetto derivato

Lab. Calc. 2005/06 Cancellazione di un oggetto derivato

Lab. Calc. 2005/06 Cancellazione di un oggetto base

Lab. Calc. 2005/06 Cancellazione di un oggetto base

Lab. Calc. 2005/06 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; Ma non possiamo fare il contrario d=b;// NO!!!!!

Lab. Calc. 2005/06 Polimorfismo Abbiamo già visto 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: 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!): ad esempio il metodo double funzione(double x) nella classe eqdiff sostituisce il metodo double funzione(double x) della classe integrale (cf. cap. 16). Questa proprietà si chiama polimorfismo.

Lab. Calc. 2005/06 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…

Lab. Calc. 2005/06 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