+ All Categories
Home > Documents > Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented...

Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented...

Date post: 01-May-2015
Category:
Upload: affonso-carlucci
View: 231 times
Download: 3 times
Share this document with a friend
25
Programmazione ad oggetti
Transcript
Page 1: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Programmazione ad oggetti

Page 2: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

OOP La programmazione orientata agli oggetti

(Object Oriented Programming) ha l’obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Questa parte di mondo che viene ricostruita in modo virtuale è detta dominio applicativo.

Page 3: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Distinguere gli oggetti Esempio: un bicchiere Ne sappiamo definire le caratteristiche e

conosciamo anche quali azioni si possono fare con esso.

Possiamo definirne la forma, il colore, il materiale di cui è fatto e possiamo dire se è pieno o vuoto.

Sappiamo anche che si può riempire e svuotare. Abbiamo definito un oggetto

attraverso le sue caratteristiche le operazioni che può compiere

Page 4: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Il processo di astrazione: le classi Per popolare il dominio applicativo utilizzato

dall’applicazione è necessario creare gli oggetti, e per fare questo è necessario definire le classi.

Una classe è lo strumento con cui si identifica e si crea un oggetto.

Page 5: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Una classe è un modello per la creazione di oggetti. La classe è paragonabile allo stampo gli oggetti sono i biscotti ottenuti con quello

stampo

Page 6: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Classi e tipi di dato Una classe è a tutti gli effetti un tipo di dato

(come gli interi e le stringhe e ogni altro tipo già definito)

Nella programmazione orientata agli oggetti, è quindi possibile sia utilizzare tipi di dato esistenti, sia definirne di nuovi tramite le classi

Page 7: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Diagramma delle classi

La prima sezione contiene il nome della classe, la seconda sezione definisce i suoi attributi, mentre più in basso sono definiti i metodi, le operazioni che si possono compiere sull’oggetto di quel tipo.

Page 8: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Le classi in C++

class [nome della classe]{ [attributi] [metodi]}

class MiaClasse { private: //visibilità char* mioAttributo; public: //visibilità void mioMetodo() { }}

Page 9: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Gli oggetti Gli oggetti vengono creati in fase di

esecuzione ed ognuno di essi fa parte di una categoria (di una classe)

Ogni classe può creare più oggetti, ognuno dei quali pur essendo dello stesso tipo è distinto dagli altri

Un oggetto è l’istanza di una classe

Page 10: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Un esempio di classe

Se vogliamo catalogare i cd musicali in nostro possesso, abbiamo bisogno di implementare un programma nel cui dominio applicativo è presente la classe CD

I metodi della classe CD servono per impostare e recuperare i valori degli attributi

Page 11: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Diagramma degli oggetti

I diagrammi che rappresentano gli oggetti (Object Diagram in UML)

mettono in luce i valori che assumono gli attributi

Page 12: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Stato di un oggetto L’insieme dei valori degli attributi di un

oggetto è chiamato stato dell’oggetto e generalmente può variare in funzione del tempo

Page 13: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Creazione di un oggetto Per creare un oggetto si effettua

un’istanziazione di una classe. In questa fase viene riservato uno spazio di

memoria per conservare i valori degli attributi dell’oggetto che si sta creando (per mantenere memorizzato da qualche parte lo stato dell’oggetto)

Page 14: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Istanziare un oggetto in C++ In C++ è possibile creare oggetti in due

modi a seconda del tipo di memoria in cui si vuole allocare l’oggetto

Allocazione nello stack:Bicchiere coppa;…coppa.riempi();

Allocazione nella memoria heap: Bicchiere* calice;calice = new Bicchiere();…calice->riempi();delete calice;

Page 15: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Gli attributi di istanza Gli attributi di istanza sono quelli posseduti

da un oggetto, chiamati anche più semplicemente attributi.

L’attributo di un oggetto è una variabile che ne descrive una caratteristica o proprietà

Page 16: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Metodi: le azioni degli oggetti Un metodo è un’azione che l’oggetto può

eseguire. La dichiarazione di un metodo è composta

da: Nome del metodo Tipo di dato da ritornare Tipo e nome dei parametri di ingresso

Tutto questo è detto firma del metodo.

Page 17: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Diagramma UML della classe

+setA(in v : double)+getA() : double+setB(in v : double)+getB() : double+setC(in v : double)+getC() : double-delta() : double+pura() : boolean(idl)+spuria() : boolean(idl)+complessa() : boolean(idl)+soluzione1() : double+soluzione2() : double

-a : double-b : double-b : double

Equazione

Page 18: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Esercizio

Implementare in C++ la classe Equazione Istanziare due equazioni:

5x2-3x+2=0 2x2-4=0

a : double = 5b : double = -3b : double = 2

eq1 : Equazionea : double = 2b : double = 0b : double = -4

eq2 : Equazione

Page 19: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Overloading In alcuni casi è utile avere un metodo che possa

essere chiamato sia con parametri, sia senza, oppure con numero e tipo di parametri differenti.

Nel caso di due o più metodi con lo stesso nome ma con parametri differenti si parla di overloadingint somma(int addendo1, int addendo2) { return addendo1 + addendo2;}float somma(float addendo1, float addendo2) { return addendo1 + addendo2;}

L’overloading consente di sovraccaricare il metodo con più di un significato.

Page 20: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Metodo costruttore Il costruttore è un metodo particolare che

viene invocato alla creazione dell’oggetto e che contiene tutte le istruzioni da eseguire per la sua inizializzazione.

Page 21: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Costruttori in C++

In C++i metodi costruttore: Deve avere lo stesso nome della classe a cui appartiene. Può anche essere vuoto o non essere definito. In questi casi

sull’oggetto creato non sarà effettuata nessuna operazione di inizializzazione

Può avere dei parametri di input che serviranno per effettuare le operazioni di inizializzazione alla creazione dell’oggetto.

Possono esistere più costruttori con lo stesso nome ma con numero e tipo di parametri differenti (overloading del costruttore). In questo modo sarà possibile creare l’oggetto invocando uno dei costruttori all’atto della creazione e passandogli i parametri necessari nell’ordine e in numero uguale a quanto definito nella dichiarazione.

Page 22: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Esempioclass SchedaTelefonica{public:

SchedaTelefonica(): m_importo(10)

{}private:

float m_importo;}; Solamente nel costruttore, è possibile usare una particolare sintassi per

valorizzare gli attributi della classe, chiamata lista di inizializzazione del costruttore. Questa sintassi prevede che tra la firma del costruttore e la sua implementazione, sia possibile specificare una lista (iniziata dal carattere due punti), degli attributi (separati dalla virgola) seguita dal valore di inizializzazione (contenuto tra parentesi).

In alternativa il costruttore poteva essere scritto:SchedaTelefonica::SchedaTelefonica(){ m_importo = 10;}

Page 23: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Modificatori public: permette a qualunque classe o oggetto di

qualunque tipo, di avere accesso all’attributo o al metodo a cui è applicato.

protected: permette l’accesso solo alle classi e agli oggetti il cui tipo è una sottoclasse di quella in cui è utilizzato. Le sottoclassi sono trattate nell’ambito dell’ereditarietà nella prossima unità.

private: permette l’accesso solo agli oggetti della classe stessa in cui è utilizzato.

Page 24: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Attributi staticiclass Gatto {

public: static int NumeroDiGatti;

Gatto(){ NumeroDiGatti++;}

~Gatto(){

NumeroDiGatti--;}

} Gatto::NumeroDiGatti = 0;

Page 25: Programmazione ad oggetti. OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha lobiettivo di formalizzare gli oggetti del mondo.

Metodi statici

class Matematica { public: static int Soma (int addendo1, int addendo2) { return addendo1 + addendo2; }} Il metodo Somma riceve in input due parametri che sono gli addendi della

somma che deve computare, e ritorna in output il valore della somma effettuata. Tutto ciò che gli serve per eseguire l’operazione gli viene passato dall’esterno, e il risultato che produce non serve per aggiornare l’attributo di un oggetto, bensì viene semplicemente ritornato a chi ha invocato il metodo.

Per invocare un metodo static si utilizza la tradizionale notazione puntata solo che al posto del nome dell’oggetto si userà il nome della classe, come nell’esempio seguente:

 int somma = Matematica::Somma(3, 5);


Recommended