Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a. 2003-2004 – 3° ciclo.

Slides:



Advertisements
Presentazioni simili
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.
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Unified Modeling Language
Costruttori e Distruttori
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Programmazione object oriented in C++
UML: Class Diagram 1 Corso IS I /03
Le gerarchie di tipi.
Fondamenti di Informatica
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Basi di conoscenza: rappresentazione e ragionamento (2 - Reti semantiche, Frames) Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Basi di conoscenza: rappresentazione e ragionamento Prof. M.T. PAZIENZA a.a
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Derivazione tra classi
Overriding.
Gerarchia di classi Java
Approfondimento delle classi
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
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.
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
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: ________________________________________________________________________________.
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.
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à.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezione 3.
Programmazione a oggetti
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Programmazione ad oggetti
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Fondamenti di Informatica 2 Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
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.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
La Programmazione ad Oggetti
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte I.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
28/12/2001package 1 Package Pacchetti e interfacce.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Transcript della presentazione:

Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo

Ereditarietà L’ereditarietà è il meccanismo mediante il quale una classe acquisisce tutte le caratteristiche di un’altra classe definita in precedenza (ereditarietà semplice) La classe che eredita le caratteristiche è chiamata sottoclasse La classe che fornisce le proprie caratteristiche viene chiamata superclasse Una classe può ereditare le proprie caratteristiche da più superclassi (ereditarietà multipla).

Ereditarietà In C++ è possibile progettare (con un processo ricorsivo) nuove classi (classi derivate) a partire da classi già esistenti (classi base). Le classi derivate assimilano attributi e comportamenti di classi base esistenti, eventualmente sovrascrivendo e migliorando le caratteristiche di queste ultime secondo le nuove necessità. La classe derivata può avere dati e funzioni sia ereditati, sia propri; le dimensioni delle due classi possono, così, non coincidere.

Ereditarietà Ogni classe ha una propria vita indipendente; quando si adotta il meccanismo della ereditarietà essa può assumere il ruolo di : 1.classe base che passa i propri attributi e comportamenti ad altre classi, 2.classe derivata che eredita queste caratteristiche da altre classi.

Ereditarietà La classe derivata è più specifica della classe base da cui deriva e rappresenta un insieme di oggetti meno numeroso. Nella ereditarietà semplice la classe derivata rappresenta una versione della classe base. Gli oggetti di una classe derivata possono essere pensati come oggetti delle classi base (=> più oggetti associati alla classe base, meno oggetti alle classi derivate)

Sintassi dei meccanismi di ereditarietà Le modalità di derivazione di una classe da una classe base sono definite tramite lo specificatore di accesso alla classe base. La forma generale per dichiarare che una classe eredita da un’altra è: class nome-classe_derivata: tipo-accesso nome-classe_base { corpo della classe derivata } ; il tipo di accesso può essere private, public, protected

Ereditarietà Quando una classe base viene ereditata come pubblica, tutti i suoi membri pubblici diventano pubblici per la classe derivata, tutti i suoi membri protected diventano protetti per la classe derivata (membri privati per la loro classe, ma ereditabili ed accessibili per una classe derivata), mentre i suoi membri privati sono nascosti alla classe derivata.

Ereditarietà Quando una classe base viene ereditata come privata, tutti i suoi membri pubblici diventano membri privati per la classe derivata, tutti i suoi membri protected diventano membri privati per la classe derivata (membri privati per la loro classe, ma ereditabili ed accessibili per una classe derivata), mentre i suoi membri privati sono nascosti alla classe derivata.

Ereditarietà Quando una classe base viene ereditata come protected, tutti i suoi membri pubblici e protetti diventano protetti per la classe derivata, mentre i suoi membri privati sono nascosti alla classe derivata.

Ereditarietà Se una classe derivata potesse accede ai membri private della propria classe base, si violerebbe l’incapsulamento della classe base. Infatti l’accesso a quei dati sarebbe possibile anche per le classi derivate da tale classe derivata, ecc. Ciò costituirebbe una propagazione dell’accesso a dati che si considerano privati, disperdendo i benefici dell’incapsulamento lungo l’intera gerarchia delle classi.

Ereditarietà Es.: class base { public: void set(int); … protected: int i,j; //privato per base, ma accessibile per derivato } ; class derivato: public base { public: … // può accedere a i e j di base private: int k; } ;

Ereditarietà di tipo public Un oggetto di una classe derivata con ereditarietà di tipo public può essere trattato come un oggetto della sua classe base. Per esempio, anche se oggetti di classi diverse che discendono da una classe base comune possono essere notevolmente diversi tra di loro, si può creare un array che li contenga (avrà come tipo gli oggetti della classe base).

Ereditarietà: costruttori e distruttori Una classe derivata eredita i membri della propria classe base; quando si istanzia un oggetto di una classe derivata occorre chiamare il costruttore della classe base per inizializzarli. Se si omette il costruttore per una classe derivata, il costruttore di default di tale classe chiama il costruttore di default della classe base. I distruttori sono chiamati in ordine inverso rispetto ai costruttori, per cui il distruttore di una classe derivata viene chiamato prima del distruttore della propria classe base.

Ereditarietà public: puntatori 1- accesso ad un oggetto della classe base con un puntatore alla classe base (operazione diretta) 2- accesso ad un oggetto della classe derivata con un puntatore alla classe derivata (operazione diretta) 3- accesso ad un oggetto della classe derivata con un puntatore alla classe base (operazione diretta), però si possono riferire solo membri della classe base e non i membri propri della classe derivata 4- accesso ad un oggetto della classe base con un puntatore alla classe derivata (errore sintassi)

Ereditarietà Ereditarietà singola (la nuova classe deriva da una sola classe base) Ereditarietà multipla (la nuova classe deriva da più classi base anche tra loro scorrelate).

Ereditarietà multipla E’ possibile far derivare una classe da più classi base. Ereditarietà multipla (multiple inheritance) La classe derivata eredita i membri di più classi base. (possibili ambiguità) class nome-classe_derivata: tipo- accesso1 nome-classe_base1, tipo- accesso2 nome-classe_base2,… tipo- accesson nome-classe_basen { corpo della classe derivata } ; tipi di accesso public, private o protected