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