• Non ci sono risultati.

Laboratorio di programmazione

N/A
N/A
Protected

Academic year: 2021

Condividi "Laboratorio di programmazione"

Copied!
11
0
0

Testo completo

(1)

Laboratorio di programmazione

Lezione X

Tatiana Zolo

tatiana.zolo@libero.it

1

(2)

E REDITARIETÀ

Proprietà fondamentale dei linguaggi object-oriented.

Classe A

classe base (o superclasse) classe da cui si eredita

Classe B

classe derivata (o sottoclasse)

classe che eredita

(3)

E REDITARIETÀ

La classe derivata programma solo quegli aspetti che differiscono da o estendono il comportamento della classe base. Può:

➜ aggiungere nuovi campi e nuovi metodi a quelli ereditati;

➜ ridefinire alcuni dei metodi ereditati;

➜ cambiare la visibilità di ciò che ha ereditato.

EREDITARIETÀ 3

(4)

E REDITARIETÀ

La classe derivata programma solo quegli aspetti che differiscono da o estendono il comportamento della classe base. Può:

➜ aggiungere nuovi campi e nuovi metodi a quelli ereditati;

➜ ridefinire alcuni dei metodi ereditati;

➜ cambiare la visibilità di ciò che ha ereditato.

Visibilità: anche la classe derivata non può vedere la parte privata della classe base, vede soltanto la parte pubblica =⇒ nuovo livello di accesso: protected.

I tre livelli di accesso (che una classe permette a chi sta fuori) sono:

➜ private: visibile solo ai metodi della classe;

➜ protected: visibile ai metodi della classe e delle classi derivate

(violazione all’incapsulamento, usare solo dove realmente necessario);

➜ public: visibile a tutti.

(5)

E REDITARIETÀ

Attenzione: la qualifica private/protected/public (usata nel corpo della classe) non dice nulla su cosa la classe derivata decida di rendere a sua volta visibile di ciò che ha ereditato. La definizione della classe derivata deve specificare quale visibilità applicare agli attributi ereditati. Sintassi:

class B : [private | protected | public] A { // corpo della classe B.

}

➜ private/protected/public dentro il corpo della classe stabiliscono cosa sia visibile a chi fuori dalla classe.

➜ private/protected/public nella dichiarazione di una classe derivata stabiliscono cosa questa classe rende visibile agli altri di ciò che ha ereditato.

EREDITARIETÀ 4

(6)

E REDITARIETÀ

DERIVAZIONE EFFETTO

public la visibilità resta come è

public public, protected protected,

private private

protected la visibilità è ristretta a protected

public protected, protected protected,

private private

private la visibilità è ristretta a private

public private, protected private,

private private

(7)

E REDITARIETÀ : ESEMPIO

Poligono

Rettangolo Triangolo

Il metodo area() deve essere ridefinito in ogni sottoclasse.

class Poligono { public:

void area() { cout << ’’area poligono’’ << endl } }

class Rettangolo : public Poligono { public:

void area() { cout << ’’base * altezza’’ << endl } }

class Triangolo: public Poligono { public:

void area() { cout << ’’base * altezza / 2’’ << endl } }

EREDITARIETÀ: ESEMPIO 6

(8)

E REDITARIETÀ

➜ Cosa si eredita?

➜ tutti i campi dati (anche quelli private a cui la classe derivata non potrà accedere direttamente);

➜ tutti i metodi (anche quelli private a cui la classe derivata non potrà accedere direttamente).

➜ Cosa NON si eredita?

➜ costruttori;

➜ distruttore;

➜ operatore di assegnamento.

(9)

E REDITARIETÀ

➜ Costruttore: al momento dell’invocazione del costruttore della classe derivata si ha una chiamata automatica al costruttore di default della classe base (invocato sempre prima del costruttore della classe

derivata).

Base::Base(int x) { a = x;

}

Derivata::Derivata(int x, int y, int z) : Base(x) {

b = y;

c = z;

}

➜ Distruttore: come i costruttori, ma l’ordine di invocazione è invertito. Il distruttore della classe base viene invocato dopo l’esecuzione del distruttore della classe derivata (se quest’ultimo è stato definito).

EREDITARIETÀ 8

(10)

E SERCIZI

1. Riprendere la classe Tempo della lezione VIII tramite la quale si esprime il concetto di orario: aggiungervi la ridefinizione dell’operatore ‘==’ e

dell’operatore ‘<’. Modellare ora il concetto di orario con data con la nuova classe Data_Tempo derivata dalla classe Tempo.

class Data_Tempo : public Tempo { public:

Data_Tempo();

Data_Tempo(int anno, int mese, int giorno, int ora, int min, int sec);

int giorno() const;

int mese() const;

int anno() const;

Data_Tempo operator+(const Tempo& T) const;

Data_Tempo operator<(const Data_Tempo& T) const;

private: int gg; int mm; int aa; };

(11)

E SERCIZI

➜ operator+: somma un oggetto di tipo Tempo ed un oggetto di tipo Data_Tempo. Se la somma porta ad un valore maggiore di 24 ore allora deve essere aggiornata anche la data.

ESERCIZI 10

Riferimenti

Documenti correlati

A.7.2 Identificare le tappe fondamentali che hanno caratterizzato il processo di sviluppo della cultura letteraria italiana dal Medioevo all’Unità d’Italia.. A.7.3 Identificare

 La misura delle grandezze, i sistemi di misura, gli strumenti di misura, caratteristiche di uno strumento di misura, scelta dello strumento di misura idoneo alla grandezza da

per le discipline che prevedono il voto scritto, minimo 2 prove scritte per quadrimestre. per le discipline che prevedono il voto orale, minimo 2 voti che potranno essere espressione

il Consiglio esprime parere favorevole alla partecipazione della classe ad attività inerenti alle tematiche scelte di Educazione Civica (Sviluppo sostenibile e Costituzione)

ANALISI SITUAZIONE DELLA CLASSE (classi 2) 2.1 PRESENTAZIONE DELLA CLASSE.. (considerare i seguenti indicatori: comportamento, rapporto con i docenti, capacità di ascolto,

• Soluzione di disequazioni intere anche di grado superiore al secondo date come.. prodotto di fattori costituiti da polinomi

 Utilizzare le reti e gli strumenti informatici nelle attività di studio, ricerca e approfondimento.  Utilizzare i concetti e i fondamentali strumenti degli

• Relativamente ai tests motori: Esegue il test di forza esplosiva degli arti inferiori saltando almeno 199 cm (maschio) – 150 cm (femmina) – prestazione sufficien- te. Esegue