Programmazione object oriented in C++ Le classi Software di qualità Robustezza capacità di un...

Post on 01-May-2015

217 views 0 download

Transcript of Programmazione object oriented in C++ Le classi Software di qualità Robustezza capacità di un...

ProgrammazioneProgrammazioneobject orientedobject oriented in C++ in C++

Le classiLe classi

Software di qualità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 classeLa 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++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:Esempio: una classe in C++ una classe in C++

class Punto{

public:

void Set();

void Print();

private:

float x, y;

};

Le classiLe 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 OggettiDichiarazione di Oggetti

Oggetto = istanza di una classePunto 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 accessoSpecificatori 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 accessoSpecificatori di accesso

Private

l’accesso è possibile soltanto attraverso le member function (specificatore di default)

Operatore::Operatore::

La definizione delle member function è associata alla classe di appartenenza mediante l’operatore di scope resolution “::” (operatore class resolution)

Esempio:Esempio: operatore ‘::’ operatore ‘::’

void Punto::Print()

{

cout<< “Ascisse”<<x<<‘\n’;

cout<< “Ordinate”<<y<<‘\n’;

}

Chiamate di member functionChiamate di member function

Avvengono mediante gli operatori ‘.’ e ‘->’

Es.Punto pt, *p_punto;

pt.Print();

p_punto->Set();

Member functionMember 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:Esempio: Sezione di interfaccia Sezione di interfaccia

class Punto{

public:

void Set();

void Print();

private:

float x, y;

};

Esempio:Esempio: Sezione di implementazioneSezione 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;

}

CostruttoreCostruttore

Member function particolare usato per l’inizializzazione dei datiStesso nome della classe di cui è membro e non possiede alcun valore di ritorno (nemmeno void)Richiamato direttamente al momento della dichiarazione di un oggetto

DistruttoreDistruttore

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:Esempio: costruttore e distruttorecostruttore e distruttore

class Punto{

public:

Punto(); //costruttore

~Punto(); //distruttore

void Set();

void Print();

private:

float x, y;

};

Esempio completoEsempio completo

Sezione di interfaccia

class Punto{

public:

Punto(); //costruttore

~Punto(); //distruttore

void Set();

void Print();

private:

float x, y;

};

Esempio completo Esempio completo (continua)(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 Esempio completo (continua)(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;

}