Lezione 13
Programmazione ad Oggetti
Programmazione Orientata
agli Oggetti
Lezione 13
Programmazione ad Oggetti
principi fondamentali
®
®
ereditarietà
polimorfismo
ü Queste due proprietà consentono di definire
nuovi tipi di dato in funzione di tipi già esistenti
®
®
si specifica soltanto le parti in cui la nuova classe
differisce da quelle note (programmazione per
differenze)
consente di riciclare tutto il codice presente nelle
librerie
Laboratorio di Algoritmi e Strutture Dati
ü La programmazione ad oggetti si basa su due
1
Laboratorio di Algoritmi e Strutture Dati
2001/02
1
Lezione 13
Programmazione ad Oggetti
Esempio
i vettori
®
class vettore<T>;
ü È possibile derivare dalla classe precedente una nuova
classe che gestisce i vettori ordinati.
ü Non dobbiamo modificare la rappresentazione interna
ü Non dobbiamo modificare tutti i metodi anzi li
utilizziamo quasi tutti
ü Dobbiamo modificare solo alcuni metodi/operatori tipo:
®
push_back(); operator[];
Laboratorio di Algoritmi e Strutture Dati
ü Supponiamo di aver creato una classe per rappresentare
2
Ereditarietà
una classe in termini di una classe definita in
precedenza
®
®
®
la nuova classe eredita la rappresentazione in memoria e
l’interfaccia della sua classe base
il programmatore non deve riscrivere tutto il codice che è in
comune tra la classe base e la nuova classe
il programmatore può modificare l’implementazione di alcuni
dei metodi ereditati, può aggiungere attributi
ü L’ereditarietà consente di implementare relazioni di
specializzazione (isa) tra tipi di dato
Laboratorio di Algoritmi e Strutture Dati
ü Il meccanismo dell’ereditarietà permette di definire
3
Laboratorio di Algoritmi e Strutture Dati
2001/02
2
Lezione 13
Programmazione ad Oggetti
Relazioni di Specializzazione
ü Consideriamo la classe Video definita nelle
®
Laboratorio di Algoritmi e Strutture Dati
precedenti lezioni
class Video
w stringa di char di dimensione altezza*larghezza
®
class Window è un tipo particolare di Video
w dimensioni variabili
w posizione relativa rispetto al video
®
class Menu è un tipo particolare di Window
w visualizzazione a comparsa
w selezione tramite mouse
4
Esempio: Sistema Informativo
Zoo
Erbivoro
AnimaleZoo
Uccello
Panda
Yoghi
Orso
Felino
Pesce
OrsoBianco
Grizzly
Laboratorio di Algoritmi e Strutture Dati
Estinzione
5
Laboratorio di Algoritmi e Strutture Dati
2001/02
3
Lezione 13
Programmazione ad Oggetti
Derivazione di Classi
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
Laboratorio di Algoritmi e Strutture Dati
ü Il meccanismo della derivazione di classi implementa
6
Polimorfismo
tener
conto
dei
dettagli
relativi
all’implementazione di una gerarchia di classi
®
®
®
L’utente opera sull’interfaccia pubblica della classe
base
Un oggetto di qualunque classe della gerarchia
contiene l’interfaccia della classe base
L’implementazione dei metodi può essere differente
ü Quando il programma invoca un metodo della
classe base attraverso un oggetto
®
Laboratorio di Algoritmi e Strutture Dati
ü Il polimorfismo consente di programmare senza
Viene eseguita l’implementazione del metodo
contenuta nella classe a cui appartiene l’oggetto
7
Laboratorio di Algoritmi e Strutture Dati
2001/02
4
Lezione 13
Programmazione ad Oggetti
stampa(AnimaleZoo *pa)
{
pa→
→ disegna();
}
Laboratorio di Algoritmi e Strutture Dati
Esempio di polimorfismo
8
Progettazione di un sistema per la
gestione di poligoni
classi per la gestione di poligoni
ü Bisogna decidere
Quali sono gli attributi della classe base e
quali aggiungere nelle classi derivate
® Quali metodi ridefinire nelle classi derivare,
quali in quella base
®
Laboratorio di Algoritmi e Strutture Dati
ü Vogliamo implementare una gerarchia di
9
Laboratorio di Algoritmi e Strutture Dati
2001/02
5
Lezione 13
Programmazione ad Oggetti
La gerarchia di classi
poligono
quadrato
rombo
cerchio
rettangolo
Laboratorio di Algoritmi e Strutture Dati
figura
10
ü Ci saranno attributi per
® Numero lati, lati
w Numero vertici, vertici
®
Colore bordo, colore sfondo // Non li
utilizzeremo
ü Non ci preoccuperemo di verificare se una
Laboratorio di Algoritmi e Strutture Dati
Sistema per la gestione di poligoni –
1
serie di lati rappresenta un poligono
11
Laboratorio di Algoritmi e Strutture Dati
2001/02
6
Lezione 13
Programmazione ad Oggetti
ü Ci saranno dei metodi per
® Calcolare l’area del poligono
® Calcolare il perimetro del poligono
® Metodi di accesso
// Non li
implementeremo
w Leggi/Setta numero lati
w Leggi/Setta valore per ogni lato
®
Stampa del poligono
implementato
// Non verrà
Laboratorio di Algoritmi e Strutture Dati
Sistema per la gestione di poligoni –
2
12
class Poligono {
public:
Poligono();
Poligono(int N, const vector<double>&); // Crea un poligono con N lati con
// grandezze memorizzate nel vettore
Poligono(const vector<Punti>&);
double area();
double perimentro();
void setta_sfondo(colore); // Non implementato
void setta_bordo(colore) // Non implementato
void disegna();
// Non implementato
…
Laboratorio di Algoritmi e Strutture Dati
Interfaccia Pubblica di Poligono
};
13
Laboratorio di Algoritmi e Strutture Dati
2001/02
7
Lezione 13
Programmazione ad Oggetti
Rappresentazione Poligono
…
protected:
int
_NumLati;
vector<double> _Lati;
color
_Sfondo; // color potrebbe essere un
enum
color
_Bordo;
};
Laboratorio di Algoritmi e Strutture Dati
class Poligono {
14
#include “Poligono.h"
int main() {
vector<double> quadrato(4,0);
quadrato[0]=quadrato[1]=quadrato[2]=quadrato[3]=4;
Poligono p(4,quadrato);
}
cout << p.area() << endl;
cout << p.perimetro() << endl;
Laboratorio di Algoritmi e Strutture Dati
Uso della classe Poligono
15
Laboratorio di Algoritmi e Strutture Dati
2001/02
8
Lezione 13
Programmazione ad Oggetti
ü Il metodo per il calcolo del perimetro è
uguale per ciascun tipo di poligono
ü Il metodo per il calcolo dell’area è diverso
per ciascun tipo di poligono
®
Il programma deve ignorare queste differenze
e operare su un unico metodo
Laboratorio di Algoritmi e Strutture Dati
Proprietà della classe Poligono
16
Classe Poligono
astratto di poligono
®
®
Ogni figura geometrica ha una funzione per il
calcolo dell’area
Ogni figura geometrica, di qualunque tipo,
può essere convertita in un oggetto poligono
Laboratorio di Algoritmi e Strutture Dati
ü La classe Poligono identifica il concetto
17
Laboratorio di Algoritmi e Strutture Dati
2001/02
9
Lezione 13
Programmazione ad Oggetti
Classe Poligono
scrivere un programma del genere (disegna() è
definito come funzione virtuale di Poligono)
void stampa(const Poligono* pq) { pq->disegna(); }
int main() {
Quadrato q;
Rettangolo rt;
Rombo rm;
stampa(&q);
stampa(&rt);
stampa(&rm);
}
Laboratorio di Algoritmi e Strutture Dati
ü Se il metodo disegna() è polimorfico è possibile
18
Progettazione di una Gerarchia di Classi
fornitore e utente
®
®
®
Il fornitore progetta ed implementa la classe base
Altri fornitori progettano ed implementano classi derivate
L’utente usa l’interfaccia pubblica della gerarchia
ü L’utente dovrebbe essere messo in condizione di ignorare
la struttura della gerarchia
®
Deve conoscere solo l’interfaccia pubblica della classe base
ü Gli altri sviluppatori dovrebbero essere messi in grado di
poter sviluppare classi derivate trasparenti all’utente
Laboratorio di Algoritmi e Strutture Dati
ü Il paradigma dell’object oriented è basato sui concetti di
19
Laboratorio di Algoritmi e Strutture Dati
2001/02
10
Lezione 13
Programmazione ad Oggetti
Progettazione di una Gerarchia di Classi
seguenti quesiti
®
®
®
®
Quali operazioni deve fornire l’interfaccia pubblica
dell’intera gerarchia?
Quali di queste operazioni hanno implementazioni
diverse per ciascuna classe derivata?
Quali membri dato sono comuni a tutta la gerarchia?
Quali membri dato devono essere visibili per poter
costruire classi derivate?
Laboratorio di Algoritmi e Strutture Dati
ü Nel progettare una classe si deve rispondere ai
20
Laboratorio di Algoritmi e Strutture Dati
2001/02
11