Programmazione object oriented in C++ Le classi Software di qualità Robustezza capacità di un programma di funzionare correttamente anche in condizioni anomale Estensibilità facilità con la quale un software si può modificare in relazione a variazioni delle specifiche Compatibilità facilità con la quale un software si può interfacciare con altri prodotti software La classe Rappresenta uno dei concetti (IDEA) dell’applicazione, e deve essere il più astratto e generale possibile. Nuovo tipo di variabile con facile meccanismo di protezione dei dati (incapsulamento) La classe in C++ Simile nella forma ad una struttura C Contiene oltre ai dati, anche le funzioni che permettono di controllare l’accesso ai dati Esempio: una classe in C++ class Punto{ public: void Set(); void Print(); private: float x, y; }; Le classi Member function o metodi: le funzioni di una classe Una classe può nascondere all’utente la sua struttura interna e consentire l’accesso ai dati solo mediante le member function. Dichiarazione di Oggetti Oggetto = istanza di una classe Punto pt; oggetto di tipo Punto il cui identificatore è pt Una classe non è un oggetto ma solo una sua descrizione non riserva un’area di memoria Specificatori di accesso Public i membri della classe sono accessibili in tutto lo spazio di visibilità dell’oggetto di quella classe permettono al programmatore di accedere alle altre componenti dell’oggetto Specificatori di accesso Private l’accesso è possibile soltanto attraverso le member function (specificatore di default) Operatore:: La definizione delle member function è associata alla classe di appartenenza mediante l’operatore di scope resolution “::” (operatore class resolution) Esempio: operatore ‘::’ void Punto::Print() { cout<< “Ascisse”<<x<<‘\n’; cout<< “Ordinate”<<y<<‘\n’; } Chiamate di member function Avvengono mediante gli operatori ‘.’ e ‘->’ Es. Punto pt, *p_punto; pt.Print(); p_punto->Set(); Member function Sezione di interfaccia sono descritte le member function header file (Punto.h) Sezione di implementazione sono definite le member function file sorgente (Punto.cpp) Esempio: Sezione di interfaccia class Punto{ public: void Set(); void Print(); private: float x, y; }; Esempio: Sezione di implementazione void Punto::Print() { cout<< “Ascisse”<<x<<‘\n’; cout<< “Ordinate”<<y<<‘\n’; } void Punto::Set() { cout << “Valore delle ascisse”; cin >> x; cout << “Valore delle ordinate”; cin >> y; } Costruttore Member function particolare usato per l’inizializzazione dei dati Stesso nome della classe di cui è membro e non possiede alcun valore di ritorno (nemmeno void) Richiamato direttamente al momento della dichiarazione di un oggetto Distruttore Member function particolare usato per il rilascio della memoria allocata dinamicamente Stesso nome della classe preceduto dal simbolo ‘~’, non può avere argomenti e non possiede alcun valore di ritorno (nemmeno void) Chiamato automaticamente quando un oggetto esce dal proprio spazio di visibilità Esempio: costruttore e distruttore class Punto{ public: Punto(); ~Punto(); void Set(); void Print(); private: float x, y; }; //costruttore //distruttore Esempio completo Sezione di interfaccia class Punto{ public: Punto(); ~Punto(); void Set(); void Print(); private: float x, y; }; //costruttore //distruttore Esempio completo (continua) Sezione di interfaccia //definizione costruttore classe Punto Punto::Punto() { x=y=0; } //definizione distruttore classe Punto Punto::~Punto() { cout>>”Oggetto distrutto”>>’\n’; } Esempio completo (continua) Sezione di interfaccia (continua) void Punto::Print() //def. member function Print { cout<< “Ascisse”<<x<<‘\n’; cout<< “Ordinate”<<y<<‘\n’; } void Punto::Set() //def. member function Set { cout << “Valore delle ascisse”; cin >> x; cout << “Valore delle ordinate”; cin >> y; }