• 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

[email protected]

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

 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

• 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

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,

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