Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
|
|
- Angela Bertoni
- 5 anni fa
- Visualizzazioni
Transcript
1 Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi
2 Docenti Metodi Numerici prof. Vittoria Bruni Programmazione prof. Domenico Daniele Bloisi Sito del corso Nota: %7E corrisponde alla tilde ~ Pagina 2
3 Orario delle Lezioni Lunedì Martedì Giovedì Venerdì Aula 15, Via Scarpa 14 Pagina 3
4 Informazioni Generali Ing. Domenico Daniele Bloisi, PhD Dipartimento di Ingegneria Informatica Automatica e Gestionale Via Ariosto 25 (adiacente Piazza Dante, A fermate Manzoni, Vittorio Emanuele, Tram 3 fermata via Labicana) mailto:bloisi@dis.uniroma1.it Pagina 4
5 Sommario Modularizzazione e astrazione Definizione di classi Metodi e variabili di istanza Controllo di accesso Creazione dinamica di oggetti Ridefinizione degli operatori Progettazione di classi Overriding dei metodi e polimorfismo Pagina 5
6 Creazione dinamica di un'istanza della classe Come nel caso dei tipi di dati predefiniti, anche per le istanze di una classe si può utilizzare il meccanismo di creazione dinamica. Questo non comporta alcuna differenza per quanto riguarda la definizione della classe, ma soltanto per il programma cliente. Pagina 6
7 Esempi Persona *p = new Persona("Antonio","roma",30); cout << "nome: " << p->getnome() << endl; p->setresidenza("milano"); cout << "eta\': " << p->geteta() << endl; delete(p); L istanza della classe persona viene creata usando l allocazione dinamica tramite l operatore new. L oggetto dovrà essere esplicitamente rilasciato tramite l operatore delete. La definizione della classe non varia. Pagina 7
8 Accessibilità degli oggetti Persona *p1 = new Persona("Antonio","roma",30); Persona *p2 = new Persona("Paolo","roma",31); p1 = p2; L istruzione di assegnazione imposta il riferimento di p1 uguale a quello di p2 L area di memoria dell oggetto associato ad Antonio rimarrà allocata, ma non disponibile, per tutta l esecuzione del programma. Pagina 8
9 Accessibilità degli oggetti Persona p1("antonio","roma",30); Persona p2("paolo","roma",31); p1 = p2; Nel caso di allocazione statica, come nell esempio sopra, l operatore di assegnazione tra oggetti della classe (e non tra riferimenti) ha un significato diverso, cioè di copia della memoria Pagina 9
10 Ridefinizione di operatori In C++ è possibile ridefinire gli operatori del linguaggio =,==,+,<,>,<<,>> per specializzarli agli oggetti delle classi definite dall'utente. Per esempio, l operatore == ha un significato particolare per gli oggetti della classe string. Pagina 10
11 Uguaglianza tra oggetti Definizione dell operatore == per confrontare due persone Nel file Persona.h si aggiunge la dichiarazione dell operatore nella dichiarazione della classe. class Persona {... bool operator==(const Persona& B) const; }; Pagina 11
12 Uguaglianza tra oggetti Definizione dell operatore == per confrontare due persone Nel file Persona.cpp si implementa l operatore come segue. bool Persona::operator==(const Persona& B) const { return (nome == B.nome) && (residenza == B.residenza) && (eta == B.eta); } Pagina 12
13 Esempio Persona p1("luigi", "roma", 30); Persona p2("luigi", "roma", 30); if (p1 == p2) cout << "Sono uguali" << endl; else cout << "Sono diversi" << endl; stampa Sono uguali. Pagina 13
14 Copia di oggetti Per effettuare la copia di un oggetto si può ridefinire l operatore di assegnazione =. Nel file Persona.h si aggiunge la dichiarazione dell operatore nella dichiarazione della classe. class Persona {... const Persona & operator=(const Persona& B); }; Pagina 14
15 Copia di oggetti Per effettuare la copia di un oggetto si può ridefinire l operatore di assegnazione =. Nel file Persona.cpp si implementa l operatore come segue. const Persona& Persona::operator=(const Persona& B) { nome = B.nome; residenza = B.residenza; eta = B.eta; return B; } Pagina 15
16 Esempio Persona p1("luigi","roma", 30); Persona p2 = p1; if (p1 == p2 && &p1!= &p2) cout << "Oggetti distinti, " << "contenuto uguale" << endl; else cout << "Errore!!!" << endl; Pagina 16
17 Ridefinizione di altri operatori Definizione dell operatore di flusso di output per la classe Persona Nel file Persona.h si aggiunge la dichiarazione dell operatore nella dichiarazione della classe. class Persona {... friend ostream &operator<<(ostream &o, Persona &p); }; Pagina 17
18 Ridefinizione di altri operatori Definizione dell operatore di flusso di output per la classe Persona Nel file Persona.cpp si implementa l operatore come segue. ostream& operator<<(ostream &o, Persona &p) { o << "[" << p.nome << ", " << p.residenza << ", " << p.eta << "]"; return o; } Pagina 18
19 Note La parola chiave friend permette a classi o funzioni che non sono membri di una determinata classe l'accesso a dati privati di quella classe. L operatore << è in effetti una funzione globale (non membro della classe), ma è dichiarata all interno della classe e con il modificatore friend, in modo da consentire l accesso anche ai campi privati, che altrimenti non sarebbe possibile. Pagina 19
20 Note L operatore << effettua le operazioni su un flusso di output di tipo ostream, che può essere lo schermo (cout) o un file (oggetto ofstream) e restituisce lo stesso stream per effettuare successive operazioni di scrittura sullo stream. In questo modo si possono concatenare flussi di diverso tipo. Pagina 20
21 Esempio Persona p1("nicola","roma",30); Persona p2("sara","milano",20); cout << "p1 = " << p1 << endl; cout << "p2 = " << p2 << endl; stampa p1 = [Nicola, roma, 30] p2 = [Sara, milano, 20] Pagina 21
22 Altri aspetti della definizione delle classi parametro implicito this variabili e metodi statici Pagina 22
23 Il parametro this I metodi hanno tutti un parametro formale implicito standard denotato da this. Questo parametro denota l oggetto di invocazione. A fronte di una invocazione del metodo, this viene legato al riferimento dell oggetto di invocazione che quindi funge da parametro attuale. Il parametro this viene usato per accedere a variabili di istanza e ai metodi dell oggetto di invocazione. Pagina 23
24 Nota Si noti che in generale this può essere omesso: il linguaggio lo inserisce automaticamente ogni volta che utilizziamo una variabile di istanza o un metodo della classe. Pagina 24
25 Uso di this In alcuni casi, l'uso di this rende più leggibile il programma, mentre il suo uso è necessario in caso di omonimia delle variabili di istanza e delle variabili o dei parametri formali dichiarati nel metodo, come mostrato nell'esempio seguente. Persona::Persona(string const &nome, string const &residenza, int eta) { } this->nome = nome; this->residenza = residenza; this->eta = eta; Pagina 25
26 Variabili e metodi statici Le variabili statiche sono zone di memoria condivise da tutti gli oggetti della classe. I metodi statici sono metodi definiti all'interno della classe che sono invocati indipendentemente dagli oggetti delle classi e che non possono accedere alle variabili di istanza (in quanto non associati ad alcun oggetto), ma solo alle variabili statiche. Pagina 26
27 Definizione e accesso di campi statici Le definizione di campi (variabili e metodi) statici di una classe si effettua anteponendo la parola chiave static alla definizione del campo. L'accesso ai campi statici e effettuato con la sintassi nomeclasse::nomecampo Pagina 27
28 L ereditarietà nei linguaggi orientati agli oggetti consiste nella definizione di una classe che è una specializzazione di una classe già esistente: cioè di una classe che ha le stesse caratteristiche di una classe già esistente, ma alla quale si vogliono aggiungere delle nuove funzionalità (comportamenti) e/o nuove informazioni. Pagina 28
29 Invece di modificare la classe già definita, si crea una nuova classe derivata da essa. class Studente : public Persona {... }; Studente è una sottoclasse di Persona. Persona è una superclasse di Studente. Studente è una classe derivata dalla classe base Persona. Pagina 29
30 Una sottoclasse eredita tutti i metodi e le variabili di istanza della superclasse e, in più, può avere dei metodi e variabili di istanza specifici. Pagina 30
31 Esempio class Studente : public Persona { private: string facolta; public: Studente(string n, string r, int e, string f); string getfacolta(); }; Gli oggetti della classe Studente sono caratterizzati dalle proprietà ereditate dalla classe Persona e, in aggiunta, dalla facoltà a cui lo studente è iscritto. Pagina 31
32 Caratteristiche fondamentali delle classi derivate Tutte le proprietà (variabili di istanza e metodi) definite per la classe base vengono implicitamente definite anche nella classe derivata, cioè vengono ereditate da quest ultima. La classe derivata può avere ulteriori proprietà rispetto a quelle ereditate dalla classe base. Ogni oggetto della classe derivata è anche un oggetto della classe base e ciò implica che è possibile usare un oggetto della classe derivata in ogni situazione o contesto in cui si può usare un oggetto della classe base. Pagina 32
33 Costruttore di una classe derivata Studente::Studente(string n, string r, int e, string f) : Persona(n,r,e) // invoca il costruttore di Persona { facolta = f; } Pagina 33
34 Metodi e variabili ereditati Gli oggetti della classe Studente ereditano tutti i metodi e le variabili di istanza di Persona int main() { Persona *p = new Persona("Mario", "Roma", 50); cout << p->getnome() << p->getresidenza() << endl; Studente *s = new Studente("Anna", "Roma", 23, "Lettere"); cout << s->getnome() << s->getresidenza() << s->getfacolta() << endl; } Pagina 34
35 Compatibilità Oggetti delle classi derivate sono compatibili con gli oggetti delle classi base (non il viceversa). int main() { Persona *p = new Persona("Mario", "Roma", 50); Studente *s = new Studente("Anna", "Roma", 23, "Ingegneria"); Persona *pp; Studente *ss; pp = s; //OK! Studente è compatibile con Persona ss = p; //ERRORE! Persona non è compatibile con Studente cout << pp->getnome(); // OK cout << pp->getresidenza(); // OK cout << pp->getfacolta(); // ERRORE! getfacolta non è un // metodo di Persona } Pagina 35
36 Compatibilità tra parametri attuali e formali Quanto visto a proposito delle regole di compatibilità tra superclasse e sottoclasse si applica anche al passaggio dei parametri void stampapersona(persona* p) { cout << p->getnome() << p->getresidenza() << endl; } void stampastudente(studente* s) { cout << s->getnome() << s->getresidenza() << s->getfacolta() << endl; } Pagina 36
37 Compatibilità tra parametri attuali e formali int main() { Persona *p = new Persona("Mario", "Roma", 50); Studente *s = new Studente("Anna", "Roma", 23, "Ingegneria"); stampapersona(p); stampapersona(s); stampastudente(p); stampastudente(s); } stampastudente(p); è errata in quanto p non è compatibile con Studente. Pagina 37
38 Overriding di metodi Si dice che si e fatto overriding (letteralmente "sovrapposizione") di un metodo m() quando nella sottoclasse di definisce un metodo m() avente esattamente la stessa segnatura del metodo m() della superclasse. Pagina 38
39 Overriding: esempio class Persona {... void stampa(); virtual void stampav(); }; void Persona::stampa() { cout << nome << " " << residenza << " " << eta << endl; } void Persona::stampav() { cout << nome << " " << residenza << " " << eta << endl; } Pagina 39
40 Overriding del metodo stampa class Studente : public Persona {... void stampa(); virtual void stampav(); }; void Studente::stampa() { cout << getnome() << " " << getresidenza() << " " << geteta() << " " << facolta << endl; } void Studente::stampav() { cout << getnome() << " " << getresidenza() << " " << geteta() << " " << facolta << endl; } Pagina 40
41 Funzioni virtual Quando una classe derivata eredita da una classe base, un oggetto della classe derivata può essere considerato sia come appartenente alla classe base sia come appartenente alla classe derivata. Se c è overriding di un metodo, la chiamata risulta ambigua. Se una funzione viene definita virtual nella classe base, allora la funzione della classe derivata sarà chiamata (se esiste). Se non è definita virtual, sarà invocata la funzione della classe base. Pagina 41
42 Esempio di cliente int main() { Persona *p = new Persona("Mario", "Roma", 50); Studente *s = new Studente("Anna", "Roma", 23, "Ingegneria"); p->stampa(); s->stampa(); p->stampav(); s->stampav(); } Pagina 42
43 Output Mario Roma 50 Anna Roma 23 Ingegneria Mario Roma 50 Anna Roma 23 Ingegneria Pagina 43
44 Polimorfismo L overriding di metodi porta ad avere polimorfismo, ovvero la presenza di metodi con la stessa segnatura che si comportano in modo diverso all interno di una gerarchia di classi. Pagina 44
45 Esempio int main() { Persona *p = new Persona("Mario", "Roma", 50); Studente *s = new Studente("Anna", "Roma", 23, "Ingegneria"); Persona *ps = s; // OK per le regole di //compatibilità p->stampa(); s->stampa(); ps->stampa(); //??? cosa stampa??? ps->stampav(); //??? cosa stampa??? } Pagina 45
46 Output Mario Roma 50 Anna Roma 23 Ingegneria Anna Roma 23 Anna Roma 23 Ingegneria Pagina 46
47 Gerarchia di classi Una classe può avere molte sottoclassi. Per esempio, è possibile definire una sottoclasse PersonaEsperta di Persona i cui oggetti rappresentano persone esperte in una data materia, dove la materia di cui sono esperti è una proprietà specifica della classe. Una sottoclasse di una classe può avere a sua volta sottoclassi. Per esempio, la classe Studente derivata da Persona può avere una sottoclasse StudenteLavoratore. É possibile quindi creare delle gerarchie di classi attraverso varie derivazioni. Pagina 47
Definizione di classi
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliFunzioni. Unità 1. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliIstruzioni Condizionali
Istruzioni Condizionali Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione
DettagliVariabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliIstruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliMatrici. Unità 7. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliTipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliConcetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio
Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli
DettagliMatrici. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliSwitch. Unità 3. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliFor e do. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione X Tatiana Zolo tatiana.zolo@libero.it 1 Proprietà fondamentale dei linguaggi object-oriented. Classe A classe base (o superclasse) classe da cui si eredita Classe
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 25 Ereditarietà A. Miola Maggio 2012 http://www.dia.uniroma3.it/~java/fondinf/ Ereditarietà 1 Contenuti q Livelli di astrazione
DettagliChar. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliGestione della memoria
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliCorso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona
di Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona su Sommario di su di di di su Astrazione sugli oggetti di su Il concetto di classe Classe: realizza l astrazione
DettagliVariabili. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale
DettagliPassaggio parametri puntatore
Passaggio parametri puntatore Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it
DettagliA. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas
Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),
DettagliVariabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliPreprocessore. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica,
DettagliArray. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliEreditarietà e polimorfismo
Università della Calabria Corso di Laurea in Ingegneria Elettronica Programmazione Orientata agli Oggetti A.A. 2006/2007 Ereditarietà e polimorfismo Paolo Trunfio * * DEIS, Università della Calabria http://si.deis.unical.it/~trunfio
DettagliProgrammazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA
Dettagli18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
Dettagli17 - Classi parzialmente definite: Classi Astratte e Interfacce
17 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliFunzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliEreditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni
Ereditarietà e Polimorfismo Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Ereditarietà L ereditarietà è lo strumento che permette di costruire nuove classi utilizzando
DettagliEsercizi Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 08 Ereditarietà A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Ereditarietà 1 Contenuti!Livelli di astrazione
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliUguaglianza e copia di oggetti
Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La
DettagliEsercitazione 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliEreditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
DettagliVariabili. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliCostruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori. Necessità di un cotruttore
Costruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori Quando un oggetto viene allocato viene eseguita una routine di inizializzazione: il costruttore. Quando viene deallocato si
DettagliProgrammazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
DettagliProprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
DettagliProprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
DettagliControllo del flusso
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliCorso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
DettagliProgrammazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali
Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 9 Alberto Ceselli ceselli@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 01 Aprile 2008 ADT param. in C ADT param.
DettagliGerarchia di classi Java 1
Specializzare un modello Gerarchia di classi Java Corso di laurea in Una classe modella un pezzo di realtà Una macchina, una moneta, un impiegato Spesso è necessario specializzare la versione originale
DettagliEsercizi con Array. Unità 7. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliStringhe. Unità 8. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliEsempio 2: Subtyping
Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione
DettagliStringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliEreditarietà: concetti di base
: concetti di base L ereditarietà è uno dei concetti base della programmazione ad oggetti Concetto di base: l ereditarietà permette di usare una classe precedentemente definita per la definizione di una
DettagliEsercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliProgrammazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo
Programmazione orientata agli oggetti Subtyping e polimorfismo 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti
DettagliCorso di Progettazione del Software
T. Mancini & M. Scannapieco S.JOO.3 Java: le classi Object e Class February 2, 2008 p. 1/12 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso
DettagliFondamenti di Informatica
Relazioni tra classi Fondamenti di Informatica 27. Standard UML 2. parte Generalizzazione: (ereditarietà) relazione in cui una classe (sottoclasse) eredita gli attributi e le operazioni di una superclasse:
DettagliFunzioni costruttore e istanza di un'oggetto
Funzioni costruttore e istanza di un'oggetto Solitamente si dice che un oggetto è un'istanza di una classe. In Javascript non esistono classi ma funzioni costruttore che sono abbastanza simili. Per instanziare
DettagliConcetto di stream. c i a o \0. c i a o \0. c i a o \0
Concetto di stream Uno stream è un flusso di byte che permette al programma di comunicare con l esterno (es. con periferiche di input/output) c i a o \0 c i a o \0 c i a o \0 Stream di uscita standard
DettagliEsercitazione 5. Unità Domenico Daniele Bloisi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Unità 6-7-8 Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliIstruzioni Condizionali
Istruzioni Condizionali Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio
DettagliMatrici. Unità 7. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliModello procedurale versus modello O-O
Modello procedurale versus modello O-O Quando si scrive un programma si crea dentro il calcolatore un modello di una porzione del mondo reale. I linguaggi di programmazione procedurali consentono di costruire
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
DettagliInterfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
DettagliINFORMATICA OOP Relazioni tra classi Roberta Gerboni
2015 - Roberta Gerboni Relazione di associazione E possibile legare varie classi presenti in un progetto con una relazione di associazione. Una associazione individua una connessione logica tra classi
DettagliEsercitazione 6. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR. Domenico Daniele Bloisi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliProgrammazione Java Avanzata Programmazione Object- Oriented in Java
Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione
DettagliFondamenti di Informatica 2008 corso prof. A. Picariello. Operazioni sui FILE in C++
Fondamenti di Informatica 2008 corso prof. A. Picariello Operazioni sui FILE in C++ Librerie di I/O per la gestione dei FILE Il C++ consente di utilizzare le librerie standard di I/O del C mette anche
DettagliFunzioni. Unità 5. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliClassi e oggetti Seconda parte. Oggetti dinamici
Università della Calabria Corso di Laurea in Ingegneria Elettronica Programmazione Orientata agli Oggetti A.A. 2006/2007 Classi e oggetti Seconda parte Paolo Trunfio * * DEIS, Università della Calabria
DettagliConcetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object
Ereditarietà Concetti principali Ereditarietà e (overriding) di metodi Dynamic dispatch e polimorfismo Ereditarietà e costruttori Livelli di accesso protected e package La classe Object metodi tostring,
DettagliTipi riferimento e stringhe
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 8 Tipi riferimento e stringhe A. Miola Novembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Tipi riferimento e stringhe 1
DettagliOperazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliRiuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili
Riuso di classi Spesso si ha bisogno di classi simili Si vuole cioè riusare classi esistenti per implementare attributi e metodi leggermente diversi Non è pratico copiare la classe originaria e modificarne
DettagliFunzioni. Unità 1. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Alberto Pretto
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Alberto Pretto Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Ereditarietà e Polimorfismo: Polimorfismo - d Regole Sintattiche e Semantiche versione 1.2 Questo lavoro è concesso in uso secondo i termini di
DettagliProgrammazione Orientata agli Oggetti
Programmazione Orientata agli Oggetti Lezione 13 La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato
DettagliHeader. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale
Dettaglicout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;
Funzioni int n, ris; cout n; ris = n*2; cout
Dettagli16 - Ereditarietà, tipi e gerarchie
16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo
Dettagli16 - Ereditarietà, tipi e gerarchie
16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo
DettagliOggetti. Definizioni di Classi II
Programmazione a Oggetti Definizioni di Classi II Sommario Costruzioni di oggetti Campi e metodi di classe Overloading Istanziazione di oggetti Costruzione di un oggetto Processo complesso che comprende
DettagliEreditarietà. Ivan Lanese e Cosimo Laneve
Ereditarietà Ivan Lanese e Cosimo Laneve Argomenti Ereditarietà Sottotipaggio Costruttori Ereditarietà Spesso non vogliamo definire una classe a partire dal nulla, ma vogliamo definirla a partire da un
Dettagli17 - Ereditarietà, tipi e gerarchie
17 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo
DettagliRETI DI CALCOLATORI Linguaggio Java: Ereditarietà
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Ereditarietà Prof. Franco Zambonelli Lucidi realizzati in collaborazione
DettagliProgettazione Object-Oriented
Progettazione Object-Oriented Generalità, Relazione fra OOA e OOD Concetti di base: Classi e Oggetti, Relazioni fra oggetti, Ereditarietà e Polimorfismo La specifica del Progetto: notazione UML Una metodologia
DettagliDichiarazione di una classe. Dichiarazione ereditarietà
Introduzione Il Java è un linguaggio di programmazione orientato agli oggetti (OOL), perché permette di realizzare in un programma tutti i concetti alla base dell OOP quali: l astrazione dei dati, mediante
DettagliInformatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1
Informatica 3 Informatica 3 LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Modulo 1: Ereditarietà Modulo 2: Polimorfismo e classi astratte Modulo 3: Visibilità delle proprietà di una
DettagliIstruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliEsempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e Polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
DettagliRIUSABILITÀ L OBIETTIVO
RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice già funzionante e corretto il cui sviluppo ha richiesto tempo (anni-uomo)
DettagliProgrammazione orientata agli oggetti Ereditarietà
Programmazione orientata agli oggetti Ereditarietà Fondamenti di Informatica L-B 1 Programmazione basata su oggetti Il modello visto finora costituisce un sottoinsieme del modello orientato agli oggetti
DettagliGestione della memoria
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliBank account. private double balance; 11/2/2011
Il Linguaggio Java Ereditarietà Bank account class BankAccount { public BankAccount() { balance = 0; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) { balance
Dettagli