Derivazione di Classi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Derivazione di Classi"

Transcript

1 Derivazione di Classi Derivazione di Classi Lezione 14 Il meccanismo della derivazione di classi implementa l operazione di ereditarietà della programmazione ad oggetti La classe derivata può utilizzare tutti i dati ed i metodi non privati della classe base come propri elementi non c è bisogno di riscrivere i metodi ereditati dalla classe base, a meno che non debbano essere modificati Il livello di accesso di un membro della classe può essere privato, pubblico e protetto i membri protetti non sono visibili dall esterno della classe ma sono ereditabili 1 Definizione di una Classe Derivata Costruzione di Nuovi Tipi per Composizione La definizione di una classe derivata richiede la specifica del nome delle classi da cui devono essere ereditati dati e metodi. All interno della classe devono essere definiti i membri aggiuntivi class Window : public Video { short origine_x, origine_y; void trasla(int, int); // nuovo metodo char dammi(int, int); // ridefinizione Avremmo potuto anche definire la classe Window come contenente un oggetto Video class Window2 { Video V; short origine_x, origine_y; Window2 W; // la larghezza della finestra è contenutra in W.V.larghezza 2 3 Esempio Derivazione Singola e Multipla Dichiarazione del template di classe list di LEDA class dlink; class dlist { dlink* h; dlink* t; int count;. template <class T> class list : public dlist { Ogni classe può specificare una o più classi base da cui ereditare dati e metodi L insieme delle classi e le relazioni di derivazione formano un grafo di derivazione se ogni classe ha una sola classe base il grafo è un albero se le classi hanno più classi base il grafo è un DAG il grafo di derivazione non può mai contenere cicli Ogni classe del grafo contiene tutti gli elementi che sono comuni a tutte le sue classi derivate

2 Esempio Derivazione Singola Esempio Derivazione Multipla figura poligono cerchio quadrato rombo rettangolo Estinzione Erbivoro AnimaleZoo Uccello Orso Pesce Felino Panda OrsoBianco Grizzly Yoghi 6 7 Definizione di una Classe Base Esempio Definizione AnimaleZoo I membri della classe base rappresentano Insieme delle operazioni supportate da tutte le classi derivate L utente opererà solo sull interfaccia della classe base Se l implementazione dipende dalla classe derivata la funzione è dichiarata virtuale (virtual ) Insieme dei dati comuni a tutte le classi derivate Evita di replicare le definizioni in ciascuna classe derivata Se le classi derivate devono accedere ad un membro dato è dichiarato protected class AnimaleZoo { AnimaleZoo(char*, char*, short); ~AnimaleZoo(); virtual void disegna(); void localizza(); void informa(); char* nome; char* file; short gabbia; short cont; 8 9 Definizione della classe Poligono Interfaccia Pubblica di Poligono Tutti i tipi di poligoni hanno in comune tre metodi Calcolo del perimetro Settaggio del colore di sfondo e di quello del bordo L implementazione dei metodi per il calcolo dell area e il disegno del poligono dipendono dal tipo della poligono Ogni poligono è rappresentato da Lista dei vertici Colore di sfondo Colore del bordo class Poligono { Poligono(); Poligono(int N, vector<punto>&); // Crea un poligono con N lati memorizzati nel vettore virtual double area() const; double perimentro() const; void setta_sfondo(colore); void setta_bordo(colore) virtual void disegna() const; // Non implementato // Non implementato // Non implementato

3 Rappresentazione Poligono Definizione metodo: perimetro class Poligono { int _numlati; vector<punto> _vertici; color _sfondo; color _bordo; _lunghezza(const Punto&, const Punto&); double Poligono::perimetro() const { double ris=0.0; for(int i=0; i<_numlati; i++) ris += _lunghezza(_punti[i], _punti[(i+1) % _numlati]); return ris; Definizione di una Classe Derivata Classi Derivate da Poligono La definizione di una classe derivata richiede la specifica del nome delle classi da cui devono essere ereditati dati e metodi All interno della classe devono essere definiti I membri aggiuntivi I metodi che devono essere modificati class Quadrato : public Poligono { void disegna(); double area(); double Quadrato::area() { double _lato = _lunghezza(_vertici[0], _vertici[1]); return _lato * _lato; class Rettangolo : public Poligono { void disegna(); double area(); double _altezza, larghezza; double Rettangolo::area() { return _altezza * _larghezza; Accesso ai Membri Ereditati Accesso con Operatore di Scope Un oggetto di una classe derivata contiene un sottooggetto della sua classe base Contiene tutti i membri non-static della classe base La classe derivata può accedere ai dati non privati della classe base come se fossero propri membri I dati privati sono presenti ma non visibili Il compilatore segnala un accesso illegale Quadrato *q; q area(); q perimetro(); // accede a Quadrato::area() // accede a Poligono::perimetro() I membri ereditati continuano a far parte di un oggetto della classe base e possono essere anche referenziati tramite l operatore di scope :: q Poligono::perimetro(); L operatore di visibilità è necessario quando il membro ereditato è stato ridefinito nella classe derivata quando la classe eredita da classi base diverse membri con lo stesso nome

4 Accesso ai Membri Protetti della Classe Base Derivazione ed Amicizia Un oggetto di una classe derivata può accedere solo ai membri protetti del suo sotto-oggetto della classe base Rispetto ad altri oggetti della classe base si comporta come un oggetto esterno (non può accedere alla parte protetta) bool Quadrato::ConfrontaLati(const Poligono* pp) { int MieiLati = _NumLati; int SuoiLati = pp _NumLati; // ERRORE, accesso a dato protected // Versione corretta: SuoiLati = pp GetLati(); return (MieiLati == SuoiLati ); /* ConfrontaLati e GetLati dovrebbero essere definite nelle classi Poligono e Quadrato */ Una funzione amica di una classe B ha privilegio di accesso anche ai membri di B ereditati da altre classi class AnimaleZoo { friend void prezzo(animalezoo&); int valore; void prezzo(animalezoo& a) { Orso tmp; tmp.valore; // legale tmp.eta; // illegale class Orso : public AnimaleZoo { int eta; Derivazione ed Amicizia Inizializzazione delle Classi Derivate La relazione di amicizia non è transitiva gli amici degli amici non sono miei amici class AnimaleZoo { friend void prezzo(animalezoo&); class Primati : public AnimaleZoo { friend class AnimaleZoo; friend void capacitaparola(primati&); La funzione prezzo non può accedere ai dati privati di Primati La funzione capacitaparola non può accedere ai membri privati della classe base AnimaleZoo Un oggetto di una classe derivata contiene sottooggetti ereditati dalle sue classi base Questi sotto-oggetti sono inizializzati dai loro costruttori L inizializzazione di un oggetto della classe derivata avviene in tre passi. Sono invocati: 1. I costruttori delle classi base, per inizializzare i sotto-oggetti ereditati 2. I costruttori delle classi membro definiti nella classe 1. Questo accade quando un dato membro è di tipo classe 3. Il costruttore della classe derivata Inizializzazione delle Classi Derivate Costruttori Classe Poligono Gli argomenti da passare ai costruttori delle classi base sono indicati nella lista di inizializzazione Il sotto-oggetto viene identificato tramite il nome della classe base I costruttori delle classi base sono chiamati nell ordine in cui le classi sono specificate nella lista di derivazione Quadrato::Quadrato(const double lato): Poligono(lato,4) { Il costruttore di Quadrato non deve inizializzare i dati ereditati da Poligono: Non si potrebbe modificare la classe Poligono senza modificare anche il codice di Quadrato 22 class Poligono { Poligono(); Poligono(const vector<punto> &); Poligono(double L, int N) // crea un poligono di N lati lunghi L Poligono::Poligono() : _NumLati(0), _vertici(), _Sfondo(Bianco), _Bordo(Nero) { Poligono::Poligono(double val, int lati) : _NumLati(lati), _vertici(lati), _Sfondo(Rosso), _Bordo(Azzurro) { // calcola vertici Poligono::Poligono(const vector<punto> & pol) : _vertici(pol), _Sfondo(Verde), _Bordo(Giallo) {_NumLati=pol.size();

5 Costruttori Classi Derivate Costruttori per Copia di Classi Derivate class Rettangolo { Rettangolo(); Rettangolo (double, double, vector<punto>&); Rettangolo::Rettangolo () {_altezza = _larghezza = 0; Rettangolo::Rettangolo (double d1, double d2, vector<punto>& v) : Poligono(v) { _altezza = d1; _larghezza = d2; 24 Un oggetto di una classe derivata può essere inizializzato per copia anche se non esiste la versione del costruttore per copia il costruttore di default inizializza membro a membro l inizializzazione delle parti ereditate dalle classi base è fatta dai costruttori per copia delle classi base i costruttori sono chiamati nell ordine in cui sono specificate le classi base nella lista di derivazione Se la classe contiene la propria versione del costruttore per copia questo costruttore dovrà assegnare i valori ai dati ereditati dalle classi base (inizializzate per default) Analogo per l assegnamento 25 Distruttori Classi Derivate Esempio: la Classe Panda Quando un oggetto di una classe derivata termina il suo tempo di vita deve essere distrutto Il compilatore invoca automaticamente i distruttori dei membri e delle classi base Non c è bisogno di invocare esplicitamente questi distruttori Consideriamo come viene inizializzato un oggetto di tipo Panda chiama il costruttore di AnimaleZoo chiama il costruttore di Orso chiama il costruttore di Erbivoro chiama il costruttore di Estinzione chiama il costruttore di Panda per assegnare valori agli elementi specifici di Panda Le chiamate ai distruttori sono in ordine inverso Livello di Accesso della Derivazione Derivazione Pubblica Ogni derivazione ha un livello di accesso che può essere public, private o protected Il livello di accesso determina la visibilità dei membri ereditati all interno della classe derivata Ogni membro non privato della classe base ha il livello di accesso più restrittivo tra quello che aveva nella classe base e quello della derivazione Derivazione ogni elemento ereditato conserva il livello di accesso della classe base Derivazione tutti i membri ereditati sono protected Derivazione private: tutti i membri ereditati sono private 28 Una derivazione public implementa una relazione di specializzazione (isa) tutti i metodi pubblici della classe base fanno parte dell interfaccia pubblica della classe derivata è possibile convertire un oggetto della classe derivata nella classe base La derivazione pubblica è usata per ereditare l interfaccia pubblica della classe base La classe derivata può essere utilizzata allo stesso modo delle classi basi, più altri modi specifici

6 Derivazione Privata Eccezioni della Derivazione Una derivazione private implementa una relazione di contenimento (hasa) Nessun membro pubblico della classe base fa parte dell interfaccia pubblica della classe derivata per convertire un oggetto della classe derivata nella classe base serve un cast La derivazione privata è usata per ereditare l implementazione della classe base La classe derivata contiene tutti i membri non privati della classe base Possibile ottenere lo stesso risultato inserendo nella classe derivata un membro dato della classe base (contenimento) E possibile specificare per un membro ereditato un livello di accesso diverso da quello definito dalle regole standard consentire che un metodo di una classe ereditata privatamente sia public Non è possibile assegnare ad un membro un livello di accesso più permissivo di quello che aveva nella classe base template <class T> class Stack : private Array<T> { Array<T>::lenght; // la funzione lenght di Array<T> è public Conversioni Standard e Derivazioni Risoluzione dei Nomi in una Gerarchia di Classi Ogni oggetto, riferimento o puntatore ad una classe derivata può essere convertito in un oggetto, riferimento o puntatore ad una delle sue classi base void ruota(const Poligono&); rettangolo q(10, 20); ruota(q); // accede solo ai dati ereditati da Poligono Ogni puntatore ad un membro di una classe base può essere convertito in un puntatore ad un membro di una classe derivata pubblicamente 32 Il campo di visibilità di una classe derivata è contenuto nei campi di visibilità delle sue classi base Risoluzione dell identificatore prova contenuto nella funzione Panda::letargo() cerca nel campo di visibilità di Panda::letargo cerca nel campo di visibilità di Panda cerca contemporaneamente nel campo di visibilità di Orso, Erbivoro ed Estinzione cerca nel campo di visibilità di AnimaleZoo cerca nel campo di visibilità globale Se trova più soluzioni contemporaneamente da errore di ambiguità 33 Ereditarietà di Operatori Una classe derivata eredita tutti i metodi della sua classe base tranne i costruttori, il distruttore e l operatore di assegnamento Non è possibile sovrapporre all operatore ereditato dalla classe base una versione locale alla classe derivata, anche se ha firma differente il nome dell operatore è risolto sulla base dei campi di visibilità, senza tener conto dei tipi

Derivazione di Classi

Derivazione di Classi Derivazione di Classi Lezione 14 Derivazione di Classi Il meccanismo della derivazione di classi implementa l operazione di ereditarietà della programmazione ad oggetti La classe derivata può utilizzare

Dettagli

Programmazione Orientata agli Oggetti

Programmazione 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

Dettagli

Programmazione Orientata agli Oggetti

Programmazione Orientata agli Oggetti Programmazione Orientata agli Oggetti La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato in funzione

Dettagli

Lezione 13 Programmazione ad Oggetti

Lezione 13 Programmazione ad Oggetti Programmazione Orientata agli Oggetti La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato in funzione

Dettagli

La programmazione ad oggetti (OOP)

La programmazione ad oggetti (OOP) Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente

Dettagli

Strutture come parametri di funzioni

Strutture come parametri di funzioni Strutture come parametri di funzioni int main() { struct PolReg { int numlati; float lunghezzalato; PolReg p1; p1.numlati = 3; p1.lunghezzalato = 10.0; float perimetro = p1.numlati * p1.lunghezzalato;

Dettagli

Ereditarietà e polimorfismo

Ereditarietà 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

Dettagli

Laboratorio di programmazione

Laboratorio 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

Dettagli

Sovrapposizione di Funzioni

Sovrapposizione di Funzioni Sovrapposizione di un Nome La sovrapposizione (overloading) è un meccanismo che consente di assegnare ad un nome significati differenti Quando il nome viene utilizzato in una frase il significato corretto

Dettagli

Corso 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) 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

Dettagli

Il linguaggio C++ Ugo de Liguoro

Il linguaggio C++ Ugo de Liguoro Il linguaggio C++ Ugo de Liguoro Caratteristiche Il C++ è class based; interpreta le classi come tipi; il subtyping coincide con la (chiusura transitiva della) relazione di sottoclasse; è basato sul C

Dettagli

Programmazione orientata agli oggetti. Ivan Lanese

Programmazione orientata agli oggetti. Ivan Lanese Programmazione orientata agli oggetti Ivan Lanese Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori Scrivere grosse applicazioni La gran parte delle applicazioni sono GROSSE Windows

Dettagli

Programmazione orientata agli oggetti. Ivan Lanese e Cosimo Laneve

Programmazione orientata agli oggetti. Ivan Lanese e Cosimo Laneve Programmazione orientata agli oggetti Ivan Lanese e Cosimo Laneve Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori Programmazione orientata agli oggetti È un paradigma di programmazione

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono

Dettagli

Lettura e scrittura di file di dati input/output

Lettura e scrittura di file di dati input/output Lettura e scrittura di file di dati input/output Lettura e scrittura da disco Molto semplice in C++: si fa esattamente come se fosse una tastiera (se sto leggendo da disco) o lo schermo (se sto scrivendo

Dettagli

Progettazione Object-Oriented

Progettazione 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

Dettagli

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

INFORMATICA 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

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Informatica 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) 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

Dettagli

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2)

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) 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 classe Modulo

Dettagli

Gerarchia di classi Java 1

Gerarchia 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

Dettagli

Gerarchia di classi Java 1

Gerarchia 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

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Dettagli

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)

Dettagli

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione 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

Dettagli

ereditarietà e polimorfismo

ereditarietà e polimorfismo ereditarietà e polimorfismo Java ereditarietà o l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza o la nuova classe viene definita esprimendo solamente le differenze

Dettagli

Il puntatore alla classe base e le funzioni virtuali

Il puntatore alla classe base e le funzioni virtuali Polimorfismo Indice Le funzioni virtuali e il puntatore alla classe base Le funzioni virtuali pure Classi astratte: interfaccia Commenti sugli strumenti del C++ e l OOD Il puntatore alla classe base e

Dettagli

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Programmazione 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

Dettagli

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione. Obiettivi Unità B2 Gli oggetti: concetti avanzati Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione Ereditarietà L ereditarietà permette

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Fondamenti di Informatica

Fondamenti 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:

Dettagli

IL TEMA DELLA RIUSABILITÀ

IL TEMA DELLA RIUSABILITÀ IL TEMA DELLA 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Esercizi

Laboratorio di Algoritmi e Strutture Dati. Esercizi Laboratorio di Algoritmi e Strutture Dati Esercizi Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro 1 Operatori Indispensabili Ogni Classe che

Dettagli

14 - Metodi e Costruttori

14 - Metodi e Costruttori 14 - Metodi e Costruttori 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 di.unipi.it

Dettagli

Concetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object

Concetti 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,

Dettagli

Classi astratte Interfacce

Classi astratte Interfacce Classi astratte Interfacce Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni 1 Ereditarietà Abbiamo visto come L ereditarietà permette di costruire nuove classi utilizzando

Dettagli

Corso di Programmazione ad oggetti

Corso di Programmazione ad oggetti Corso di Programmazione ad oggetti Ereditarietà e polimorfismo a.a. 2008/2009 Claudio De Stefano 1 Costruttori, distruttori ed ereditarietà Quando si usa l'ereditarietà bisogna tenere conto dei costruttori

Dettagli

OOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi

OOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi OOP in C++ Classi e Oggetti Una classe èuntipochehavariabili ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi Una variabile ab di un tipo

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1) Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Strutture e Unioni DD Cap. 10, pp. 379-391, 405-406 KP Cap. 9, pp. 361-379 Strutture Strutture Collezioni di variabili correlate (aggregati)

Dettagli

Reti di Connessione e Instradamento AA

Reti di Connessione e Instradamento AA Politecnico di Milano Dipartimento di Elettronica e Informazione Reti di Connessione e Instradamento AA. 2010-2011 Cenni sulla programmazione a oggetti con il C++ Massimo Tornatore (Autore delle slide:

Dettagli

Corso di Linguaggi di Programmazione

Corso 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.

Dettagli

Informatica Ereditarietà Java. Ereditarietà

Informatica Ereditarietà Java. Ereditarietà Ereditarietà L'ereditarietà consente allo sviluppatore di riutilizzare il codice già scritto creando sottoclassi a partire da classi già definite. La sottoclasse eredita tutti gli attributi e tutti i metodi

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso 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

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Ereditarietà. Unità 9. 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

Dettagli

OOP Ereditarietà A. FERRARI

OOP Ereditarietà A. FERRARI OOP Ereditarietà A. FERRARI ereditarietà l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza la nuova classe viene definita esprimendo solamente le differenze che

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017

Dettagli

costruttori e distruttori

costruttori e distruttori Costruttore costruttori e distruttori E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 C2 Ereditarietà e polimorfismo 1 Prerequisiti Tecnica elementare di OOP Concetto di struttura gerarchica Concetto di casting 2 1 Introduzione Abbiamo accennato al fatto che

Dettagli

public class Counter2 extends Counter { public void dec() { val--; }

public class Counter2 extends Counter { public void dec() { val--; } public class Main public class Counter2 extends Counter public void dec() val--; public class Counter public Counter() System.out.println("Counter : costruttore di default!"); val = 1; System.out.println("Counter

Dettagli

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: 1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente

Dettagli

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Dettagli

Esempi in Java di program.ne O-O

Esempi in Java di program.ne O-O Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali

Dettagli

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Concetti 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

Dettagli

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi Gli oggetti Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-149 Torino Ogni

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Ereditarietà. Ivan Lanese e Cosimo Laneve

Ereditarietà. 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

Dettagli

Esempio Principio di sostituibilità

Esempio Principio di sostituibilità Ereditarietà E uno dei concetti chiave delle tecniche orientate agli oggetti Esprime le somiglianze tra le classi, semplificando la definizione di una classe e riducendola a una o più classi simili Rappresenta

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Dettagli

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Il linguaggio C. Istruzioni, funzioni, dati strutturati Il linguaggio C Istruzioni, funzioni, dati strutturati Istruzioni Servono a dirigere il flusso di esecuzione di un programma controllano l ordine di esecuzione delle espressioni, quindi dei loro side effects

Dettagli

Interfacce. Dichiarazioni di tipi riferimento che descrivono oggetti in modo astratto Specificano solo le firme dei metodi.

Interfacce. Dichiarazioni di tipi riferimento che descrivono oggetti in modo astratto Specificano solo le firme dei metodi. Interfacce Interfacce Dichiarazioni di tipi riferimento che descrivono oggetti in modo astratto Specificano solo le firme dei metodi tralasciando tutti gli aspetti di implementazione Interfacce interface

Dettagli

Modello procedurale versus modello O-O

Modello 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

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Ereditarietà E' un meccanismo per estendere le funzionalità di una classe con nuovi campi e nuovi metodi Chiamiamo superclasse:

Dettagli

Programmazione II. Lezione 18. Daniele Sgandurra 11/1/2011.

Programmazione II. Lezione 18. Daniele Sgandurra 11/1/2011. Programmazione II Lezione 18 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 11/1/2011 1/26 Programmazione II Lezione 18 11/1/2011 Sommario 1 2/26 Programmazione II Lezione 18 11/1/2011 Parte I 3/26 Programmazione

Dettagli

Programmazione orientata agli oggetti Ereditarietà

Programmazione 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

Dettagli

Programmazione a oggetti

Programmazione 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

Dettagli

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Programmazione in Java (I modulo) Lezione 20: Ereditarietà Programmazione in Java (I modulo) Lezione 20: Ereditarietà Ereditarietà (Inheritance) Il programmatore definisce una classe generale In seguito definisce una classe più specifica Aggiungo soltanto nuovi

Dettagli

Puntatori e array. Violetta Lonati

Puntatori e array. Violetta Lonati Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array

Dettagli

Esercitazione n 3. Obiettivi

Esercitazione n 3. Obiettivi Esercitazione n 3 Obiettivi Capacità di analisi e di estensione di progetti esistenti Linguaggio Java: Ereditarietà delle classi Utilizzo di costruttori e metodi di superclasse Visibilità: public, private,

Dettagli

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Uso di classi e oggetti Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Tipi di dati Tipi primitivi: interi Java fornisce otto tipi primitivi indipendenti dall implementazione

Dettagli

Il creator di un oggetto è l entità (oggetto o funzione) che crea un oggetto. L owner di un oggetto è l entità responsabile della sua distruzione

Il creator di un oggetto è l entità (oggetto o funzione) che crea un oggetto. L owner di un oggetto è l entità responsabile della sua distruzione Il creator di un oggetto è l entità (oggetto o funzione) che crea un oggetto L owner di un oggetto è l entità responsabile della sua distruzione Creator e owner in generale non coincidono class ExprParser

Dettagli

Lezione 13 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Lezione 13 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona Lezione 13 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO I modificatori: Public Private -

Dettagli

Oggetti e dati primitivi 1

Oggetti e dati primitivi 1 I membri delle classi Oggetti e dati primitivi Corso di laurea in Le classi contengono 2 tipi di membri, definiti per l intera classe o per le singole istanze Le variabili o i campi, che rappresentano

Dettagli

Lezione 13 programmazione in Java

Lezione 13 programmazione in Java Lezione 13 programmazione in Java Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO I modificatori: Public Private - Static

Dettagli

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1. OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di

Dettagli

Indice. Le funzioni virtuali e il puntatore alla classe base Le funzioni virtuali pure Classi astratte: interfaccia

Indice. Le funzioni virtuali e il puntatore alla classe base Le funzioni virtuali pure Classi astratte: interfaccia Polimorfismo Indice Le funzioni virtuali e il puntatore alla classe base Le funzioni virtuali pure Classi astratte: interfaccia Il puntatore alla classe base e le funzioni virtuali Il puntatore alla classe

Dettagli

INGEGNERIA DEL SOFTWARE

INGEGNERIA DEL SOFTWARE INGEGNERIA DEL SOFTWARE LINGUAGGI OO e C++ Avvertenza: gli appunti si basano sul corso di Ingegneria del Software tenuto dal prof. Picco della facoltà di Ingegneria del Politecnico di Milano (che ringrazio

Dettagli

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione Calendario esercitazioni e laboratori 29 Marzo esercitazione 12 Aprile esercitazione 26 Aprile laboratorio (lab721) 2 Maggio laboratorio (lab721) 3 Maggio esercitazione 9 Maggio laboratorio (???) 17 Maggio

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Struttura

Dettagli

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Paradigma a oggetti Programmazione orientata agli oggetti Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Programmazione ad oggetti. Si estendono i tipi di dati astratti che permettono:

Dettagli

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice Programmazione ad oggetti. Paradigma a oggetti Programmazione orientata agli oggetti Si estendono i tipi di dati astratti che permettono: information hiding e incapsulamento nascondo la rappresentazione

Dettagli

Programmazione ad Oggetti

Programmazione ad Oggetti Programmazione ad Oggetti Analisi e Progettazione OO Origini Le metodologie ad oggetti nascono negli anni 70 ma si affermano solo negli anni 80 grazie alla nascita dei linguaggi di programmazione ad oggetti

Dettagli

Lllezione 12 Template. Template. Lezione 12

Lllezione 12 Template. Template. Lezione 12 Lezione 12 Cosa è un Il template è un meccanismo che consente di creare uno schema generico di funzione o di classe, che non fa esplicito riferimento a nessun particolare tipo di dati utile quando si devono

Dettagli

Lllezione 12 Template

Lllezione 12 Template Lezione 12 Cosa è un Il template è un meccanismo che consente di creare uno schema generico di funzione o di classe, che non fa esplicito riferimento a nessun particolare tipo di dati utile quando si devono

Dettagli

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati Oggetti Le classi in Java Corso di laurea in Un oggetto è definito dal suo stato - descrive le sue caratteristiche comportamento - quello che può fare Ad esempio: il modello di una moneta Una moneta può

Dettagli

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo 1 Esempio 1: Costruttori ed ereditarietà Costruttori ed ereditarietà 2 Introduzione Java prevede due automatismi legati

Dettagli

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello Java Il linguaggio Java è un linguaggio di programmazione ad alto livello algoritmo: astrazione della realtà linguaggio di programmazione: astrazione del processore variabile e tipo: astrazione della locazione

Dettagli

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto Java Il linguaggio Java è un linguaggio di programmazione ad alto livello algoritmo: astrazione della realtà linguaggio di programmazione: astrazione del processore variabile e tipo: astrazione della locazione

Dettagli

UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA

UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA Laboratorio di Programmazione e Calcolo A.A. 2018-19 Test Finale Roma, 17 gennaio 2019 1) Le variabili A, B e C sono dichiarate int.

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Dettagli

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. 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),

Dettagli

Il linguaggio C. Notate che...

Il linguaggio C. Notate che... Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli