oop object oriented programming programmazione orientata agli oggetti insieme di metodologie basate...

34
OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Upload: drago-fantini

Post on 02-May-2015

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

OOPObject Oriented Programming

Programmazione Orientata agli Oggetti

INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI

OGGETTO

Page 2: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Cos’è un Oggetto?• Gli oggetti sono la chiave per comprendere la

tecnologia OO.

• Se ci guardiamo attorno vedremo molti esempi di Oggetti nel mondo reale:

un masterizzatore, una mela, un cane, una televisione, una bicicletta ……

• Gli oggetti del mondo reale hanno 2 proprietà: – hanno delle caratteristiche– compiono delle azioni

Page 3: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Es. Masterizzatore

Marca Velocità di scrittura su supporti CD-R Velocità di scrittura su supporti CD-RW Velocità di lettura Interfaccia Dimensione del buffer dati

CARATTERISTICHE

(STATO)

Scrivi su CD

Scrivi su DVD

Leggi CD

Espelli CD

AZIONI

Page 4: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Es. bicicletta

MarcaColoreVelocità (es. 12 km/h)

CARATTERISTICHE

(STATO)

Frenare

AccelerareAZIONI

Page 5: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

AzioniAzioni: sono le cose che un oggetto è in grado : sono le cose che un oggetto è in grado di fare di fare

CaratteristicheCaratteristiche: sono i : sono i datidati che le azioni che le azioni stesse possono utilizzare per eseguire le stesse possono utilizzare per eseguire le operazioni che da esse ci si aspetta.operazioni che da esse ci si aspetta.

In OOPIn OOP

• L’oggettoL’oggetto: : modello astratto più naturale per descrivere la realtà

• Le proprietà o attributiLe proprietà o attributi: sono le caratteristiche di un oggetto

• I metodiI metodi: sono le azioni/operazioni che l’oggetto può compiere

Page 6: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Concetti chiaveATTRIBUTIATTRIBUTI : insieme dei valori delle sue proprietà in un determinato istante di tempo. Se cambia anche una sola proprietà di un oggetto, il suo stato varierà di conseguenza.

COMPORTAMENTO (behaviorCOMPORTAMENTO (behavior): insieme dei metodi che un oggetto è in grado di eseguire

INTERFACCIA: INTERFACCIA: insieme dei metodi accessibili dall’esternoEs. bicicletta

• attributi: velocità corrente, rapporto corrente, pedalata

• Comportamento/metodi: frena, accelera, cambia rapporto

Page 7: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Che cos’è una classe?

Nel mondo reale si trovano molti oggetti dello stesso tipo.

Vi sono ad esempio, i masterizzatori in grado di scrivere su CD e DVD o quelli che scrivono solo su CD.

Tutti però sono in grado di eseguire la scrittura di dati o file multimediali su CD e tutti hanno alcune proprietà comuni (Marca, Velocità di scrittura su supporti CD-R, …)

Diremo allora che più oggetti software che hanno le stesse proprietà e gli stessi metodi possono essere raggruppati in una classeclasse ben definita di oggetti: nel nostro caso particolare, nella classe masterizzatore

Page 8: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Riassumendo:CLASSE - terminologia costrutto base per definire tipi di

dati astratti member variables: descrivono i

dati contenuti nel tipo di dato astratto (STATO)

member functions: definiscono le OPERAZIONI possibili sul tipo di dato

Solo alcune delle variabili ed alcune delle operazioni verranno rese visibili all'esterno(interfaccia)

Invisibilità della realizzazione del servizio

Page 9: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

QUINDI…

Un’istanza (oggetto)Un’istanza (oggetto) è un’entità concreta, che esiste nel tempo (viene costruita e poi distrutta) e nello spazio (occupa memoria)

Una classe classe è il modello astratto che rappresenta le proprietà comuni (struttura e comportamento) ad un insieme di oggetti concreti (istanze), cioè la classe rappresenta un tipo di cui un oggetto è una sua istanza

Page 10: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

DEFINIZIONE DI UNA CLASSE

• Si tratta di un’estensione della struct

• class NomeClasse{

// attributi

tipo1 attributo1;

tipo2 attributo2;

…..

// metodi NB. Presenza di funzioni

tipo1 Funzione1();

tipo2 Funzione2();

…..

}

Page 11: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Dichiarazione di un oggetto

• NomeClasse NomeOggetto;

Es. MiaBicicletta di classe Bicicletta

Per accedere ad un attributo e ai metodi:

• NomeOggetto.NomeAttributo

• NomeOggetto.NomeFunzione

Page 12: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Esempioclass Rettangolo{//attributifloat base,altezza;

public: (vedi slide successive)//metodivoid Assegna(float b,float h){base=b;altezza=h;}float Area(){ return base*altezza;}};

Page 13: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

• Una volta definita la classe si può definire l’oggetto ad esempio tovaglia tramite l’istruzione:

Rettangolo tovaglia;

Page 14: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Il prototipo e la dichiarazione delle funzioni in una classe

• Invece di scrivere all’interno di una classe i metodi sotto forma di funzione, si possono scrivere qui solo i prototipi e le funzioni vengono dichiarate fuori

Dichiarazione delle funzioni appartenenti a una classe:

tipo NomeClasse::Funzione{ //attenzione a :: …..

return;}

Page 15: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

A confrontoclass Rettangolo{//attributifloat base,altezza;

public: (vedi slide successive)

//metodivoid Assegna(float b,float h){base=b;altezza=h;}float Area(){ return base*altezza;}};

class Rettangolo{//attributifloat base,altezza;

public: (vedi slide successive)//metodivoid Assegna(float b,float h);float Area();};void Rettangolo::Assegna(float b, float h){base=b;altezza=h;return;}void Rettangolo::Area(){return base*altezza;}

Page 16: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

N.B: il codice dei metodi di una classe può essere definito in un file separato: una valida consuetudine prevede che la classe sia definita in un file di intestazione con estensione .H e implementata in una file di codice con estensione CPP e che entrambi i file abbiano come nome il nome della classe stessa.

Page 17: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Visibilità dei membri( attributi e metodi di una classe )

Public vs privatepublic : deve essere specificata quando si vuole che i

membri specificati siano disponibili anche al di fuori della classe di appartenenza

private: (di default) sta ad indicare che tutti i membri che seguono, siano essi attributi o metodi, non possono essere visti al di fuori della classe

Page 18: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

I concetti base della OOP

• Astrazione• Incapsulamento• Ereditarietà• Polimorfismo

Page 19: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

ASTRAZIONE• Processo logico che porta alla creazione di modelli (classi)

generici (senza entrare nella situazione specifica) a partire dai quali verranno costruiti oggetti via via più specializzati.

• Es: Progetto di una casa: Se cerchiamo una definizione generica della casa, possiamo dire che ogni casa è formata da muri che ne delimitano il perimetro, è coperta da un tetto che ne delimita l'altezza, ha una porta di ingresso ed ha zero o più finestre.Questa definizione di casa costituisce la classe casa.

• Questo è un modello astratto in quanto si applica sia ad una capanna, che alla villetta con quattro stanze e allo stesso modo si applica all'Empire State Building o a Buckingham Palace.

• Da questa classe casa potranno discendere varie classi eredi:casa di legno casa di mattoni casa di pietra

Page 20: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

IncapsulamentoIncapsulamento:: è la proprietà per cui un oggetto contiene ("incapsula") al suo interno le proprietà e i metodi per accedere agli stessi dati.E’ una tecnica utilizzata per nascondere una parte di un programma, in modo da proteggere le altre parti del programma da eventuali cambiamenti

L'incapsulamento è realizzato per mezzo delle istruzioni:– Private: le funzioni e le variabili definite private NON sono accessibili

all'esterno della classe.– Public: le funzioni e le variabili definite pubbliche sono accessibili

all'esterno della classe.

L'oggetto quindi diviene una black-box di cui, attraverso l'Interfaccial'Interfaccia, sappiamo cosa fa e come interagisce con l'esterno ma non come lo fa.

I vantaggi principali sono: robustezza indipendenza riusabilità degli oggetti

Incapsulamento o Information Hiding

Page 21: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Ereditarietà (INHERITANCE)• E’ un meccanismo che permette di creare nuovi oggetti a partire da

oggetti già definiti.• Ciò si basa sul fatto che diversi tipi di oggetti hanno spesso una certa

quantità di cose in comune fra loro.

Es. In un sistema bancario esistono varie tipologie di conto (es. conti correnti bancario, libretti di risparmio, carte di credito e certificati di deposito.)

Tutte queste differenti tipologie di conto hanno in comune alcune caratteristiche: un numero di conto, un tasso di interesse ed un sottoscrittore. Ognuno di questi conti possiede però anche delle specifiche caratteristiche, ad es. la carta di credito avrà un limite di spesa mentre il conto corrente bancario avrà uno o più libretti di assegni associati.

Page 22: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

…In OOP, per rappresentare tale esempio si definisce un oggetto padre Conto che ingloba tutte le caratteristiche comuni ad ogni conto, e da esso, poi, si derivano i 4 oggetti figli: carta di credito,…

Vantaggi Maggiore facilità nella manutenzionemanutenzione del softwareSe qualcosa dovesse variare per l'intera classe Conto, sarà sufficiente modificare soltanto l'oggetto padre per consentire che tutti gli oggetti figli ereditino la nuova caratteristica.

Conto

Carta di Credito Libretti di risparmio Carte di credito Certificati di deposito

Page 23: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Quindi grazie all’ereditarietà possiamo creare una nuova classe che estende un classe già esistente

Su questa classe possiamo:Introdurre nuovi comportamentiModificare i comportamenti esistenti

Attenzione: la classe originale non viene assolutamente modificata. Le modifiche vengono fatte sulla classe derivata

E’ un concetto del tutto nuovo: non esiste nulla di simile nella programmazione procedurale

Page 24: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Prima le alternative erano:

Scrivere una nuova classe: fattibile ma è un peccato rifare tutto da zeroModificare quella esistente, ma se facciamo un errore potremmo mettere in crisi tutti i programmi che la usano già.

Page 25: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

POLIMORFISMO

• Un aspetto fondamentale della programmazione oggetti è il polimorfismo.

• Possiamo inserire nella classe dei metodi che hanno lo stesso nome (e gli stessi parametri) di metodi già esistenti nella classe padre. Il fatto che siano gli stessi di quelli esistenti causa il comportamento di ridefinizione, ovvero di sostituzione del vecchio comportamento con uno nuovo.

• Vantaggio:facilità di manutenzione del codice

• Es. costruiamo un sistema software in grado di disegnare delle figure geometriche.

Page 26: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

EsempioDefiniamo una classe padre chiamata

FiguraGeometrica Deriviamo da questa tutte le classi che si

occupano della gestione di una figura geometrica ben precisa.

Quando l'utente desidera rappresentare una di tali figure, egli esegue una determinata azione che produce l'invio al sistema di un messaggio che, a sua volta, scatena l'invocazione del metodo disegnaFigura della classe FiguraGeometrica..

Con l'utilizzo del polimorfismo, il sistema è in grado di capire autonomamente quale figura geometrica debba essere disegnata ed invocarne direttamente il metodo disegnaFigura appartenente alla classe figlia coinvolta.

Page 27: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Concetti chiaveConcetti chiave

STATO di un oggettoSTATO di un oggetto: insieme dei valori delle sue proprietà in un determinato istante di tempo. Se cambia anche una sola proprietà di un oggetto, il suo stato varierà di conseguenza.COMPORTAMENTO (behaviorCOMPORTAMENTO (behavior): insieme dei metodi che un oggetto è in grado di eseguireINTERFACCIA: INTERFACCIA: insieme dei metodi attraverso i quali il mondo esterno ha accesso ai datiEs. mia bicicletta

• stato: velocità corrente, rapporto corrente, pedalata• comportamento: frena, accelera, cambia rapporto

Page 28: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

I messaggi• Un oggetto non manipola mai direttamente i dati interni (le

proprietà) di un altro oggetto ma ogni tipo di comunicazione tra oggetti deve sempre essere gestita tramite l'uso di messaggimessaggi, ovvero tramite le chiamate ai metodi che un oggetto espone all'esterno

• In altre parole un messaggio è una sollecitazione che proviene all’oggetto dall’esterno e che scatena l’esecuzione di un azione, ovvero di un metodo

• Es: l'oggetto masterizzatore esegue il metodo Scrivi_CD, perché un altro oggetto (per esempio, il controller) gli avrà precedentemente inviato una simile richiesta sollecitandone l'azione di scrittura.

Page 29: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Alcune volte l’oggetto B necessità di maggiori informazioni per sapere cosa fare esattamentePer esempio: quando si vuole cambiare marcia, devo indicare quale inserireQueste informazioni sono passate tramite parametri

Page 30: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

In conclusione

La programmazione ad oggetti rappresenta quindi un modo diverso di pensare le applicazioni. Ogni applicazione è composta da un certo numero di oggetti, ognuno dei quali è indipendente dagli altri ma comunica con gli altri attraverso lo scambio di messaggi.

VantaggioVantaggio: grande flessibilità e enorme potenza di utilizzoSi costruiscono i componenti una sola volta e si possono riutilizzarli successivamente ogniqualvolta ce ne sia bisogno.

Page 31: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Altri VantaggiLo scrivere codice all’interno di separati oggetti software fornisce un

elevato numero di benefici:

Facilità di lettura e di comprensione: Il codice sorgente di un

oggetto può essere letto e compreso anche da persone diverse

dall’autore

Manutenzione del programma nel tempo per correzioni o

miglioramenti

Riutilizzo del codice: Se esiste già un oggetto (forse scritto da un

altro sviluppatore), possiamo usare questo oggetto nel nostro

programma.

Pluggability and debugging ease: Se un particolare oggetto crea

dei problemi si potrà rimuovere con facilità e sostituirlo con un

altro. Simile alla sostituzione di parti meccaniche.

1

2

3

4

Page 32: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

N.B: pluggabilityGli Anglosassoni usano questo termine molto efficace per descrivere l’insieme di proprietà che consentono di costruire un nuovo sistema, prendendo alcune componenti già esistenti e mettendole insieme. Il termine deriva da plug, la normale spina elettrica: le spine però vanno infilate nelle prese. La metafora suggerisce quindi che l’insieme delle caratteristiche che rendono il componenete pluggabile, non dipendono solo dal componente stesso, ma è necessario che esso svolga una funzione ben precisa all’interno del sistema. Un aspetto ancora più importante è la sua compatibilità con gli altri componenti.

Page 33: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

• Strutture dati (come i dati sono memorizzati: vettori, matrici, liste, alberi, …)

• Istruzioni (cosa deve fare il calcolatore: calcola espressioni, esegui test, leggi dati …)

• Il problema è visto dal “punto di vista” della macchina

• Il concetto di oggetto (entità logica in grado di effettuare determinate operazioni)

• Come gli oggetti interagiscono fra di loro

• Il problema è visto dal punto di vista della logica sottostante

I LINGUAGGI IMPERATIVI

SONO BASATI SU

I LINGUAGGI AD OGGETTI

SONO BASATI SU

Page 34: OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Linguaggi ad oggetti

• Linguaggi ad OGGETTI PURI: le classi e gli oggetti sono le uniche astrazioni del linguaggio, cioè tutte le entità del linguaggio sono oggetti che appartengono a qualche classe– es. java

• Linguaggi ad OGGETTI IBRIDIi: aggiungono l’astrazione di classe e oggetto ai costrutti tradizionali della programmazione, ed esistono oggetti– es. C++, Object Pascal, Visual Basic