28
Pensiero orientato agli oggetti prima parte Lezione del 14 ottobre 2008 per il modulo “Programmazione ad Oggetti

Pensiero Orientato Agli Oggetti

Embed Size (px)

DESCRIPTION

introduzione alla programmazione orientata agli oggetti

Citation preview

Page 1: Pensiero Orientato Agli Oggetti

Pensiero orientato agli oggettiprima parte

Lezione del 14 ottobre 2008 per il modulo “Programmazione ad Oggetti

Page 2: Pensiero Orientato Agli Oggetti

Vari livelli di Object-Oriented Object Oriented Analysis – OOA Object Oriented Design - OOD Object Oriented Programming – OOP Design Patterns Unified Modeling Language – UML OO Data – XML OO Internet Development

Page 3: Pensiero Orientato Agli Oggetti

OO paradigma di pensiero Come pensiamo in termini di oggetti Imparare i concetti OO senza un metodo di

sviluppo ed un insieme di tools (strumenti) Separare metodi e strumenti dal processo di

pensiero Object Oriented Comprendere la differenza tra l’imparare i

concetti OO e l’usare metodi e strumenti che supportano questo paradigma di pensiero

Page 4: Pensiero Orientato Agli Oggetti

Sommario dei fondamentali concetti OO Definizione di oggetto Definizione di classe Nascondere i dati (data hiding) Incapsulamento Getters Setters Attributi Metodi Messaggi Interfaccia Implementazione Ereditarietà Astrazione Relazione is-a Polimorfismo Composizione Relazione has-a

Page 5: Pensiero Orientato Agli Oggetti

Differenza tra programmazione procedurale e Orientata agli oggetti Nella programmazione procedurale il codice

(istruzioni) è localizzato in funzioni e procedure.

Queste funzioni diventano della scatole nere (black box), dove entrano input ed escono output

I dati sono posti in strutture separate I dati sono manipolati dalle funzioni

inputsfunzione

outputs

Page 6: Pensiero Orientato Agli Oggetti

Che cosa è un oggetto Un oggetto è un’entità (cosa) che contiene sia

attributi che comportamenti Ad esempio una persona ha un colore degli

occhi, un’età, una certa altezza… e questi sono attributi!

Una persona ha pure dei comportamenti, come il camminare, il parlare, pensare…

Pertanto una persona è un oggetto La differenza chiave tra la programmazione OO

e le altre programmazioni sta in questo fatto chiave: l’oggetto contiene entrambi: attributi e comportamenti

Page 7: Pensiero Orientato Agli Oggetti

Da fare: scopri dieci oggetti Determina dieci oggetti con i loro attributi e

con i loro comportamenti Gli oggetti possono essere cose animate e

cose inanimate. Possono essere concetti o cose concrete

Page 8: Pensiero Orientato Agli Oggetti

Come è possibile che oggetti inanimati abbiano un comportamento ? Anche un oggetto inanimato ha un

comportamento nel senso che ha un ruolo in un sistema

Offre dei servizi Risponde alle nostre richieste Ad esempio una Sedia ! Quale è il comportamento di una Sedia ?

Page 9: Pensiero Orientato Agli Oggetti

I dati separati dalle funzioni nella programmazione procedurale Talvolta i dati sono globali per cui è facile

modificarli dall’esterno Nei dati globali più funzioni hanno accesso

Funzione 1 Funzione 2

Dati globali

Funzione 3 Funzione 4

Page 10: Pensiero Orientato Agli Oggetti

Il contenuto degli oggetti Gli oggetti combinano dati e comportamenti in

un unico simpatico pacchetto Sono più di una struttura dati o di tipi di dati

primitivi Contengono entità quali interi e stringhe che

sono usate per rappresentare attributi Ma contengono anche i metodi, che

rappresentano il comportamento In un oggetto i metodi sono usati per eseguire

operazioni sui dati ed altre azioni. La cosa più importante è che possiamo

controllare l’accesso ai membri di un oggetto (metodi ed attributi)

Page 11: Pensiero Orientato Agli Oggetti

Controllo ai membri di un oggetto Alcuni membri di un oggetto, sia attributi che

metodi, possono essere nascosti ad altri oggetti

Ad esempio un oggetto Math potrebbe contenere due numeri interi mioint1 e mioint2, i metodi per settare e recuperare i valori di mioint1 mioint2. Potrebbe pure contenere un metodo chiamato somma()

Mathmetodo

metodo

metodo

dati

Page 12: Pensiero Orientato Agli Oggetti

Data hiding e Incapsulamento Il restringere l’accesso a certi attributi o

metodi è chiamato “data hiding” Il combinare insieme attributi e metodi nella

medesima entità è chiamato “incapsulamento”

Page 13: Pensiero Orientato Agli Oggetti

messaggi Cosa succede quando un altro oggetto, ad

esempio mioOggetto, vuole accedere alla somma di mioint1 e mioint2 ?

Questo oggetto la chiede all’oggetto Math mioObject invia un messaggio all’oggetto Math I due oggetti comunicano l’uno con l’altro

tramite i loro metodi Un messaggio è in realtà una chiamata del

metodo somma() di Math. Il metodo somma() viene mandato in esecuzione e restituisce il valore della somma a mioObject

Page 14: Pensiero Orientato Agli Oggetti

Come comunicano i due oggetti mioOggetto

Math

dati

metodo metodo metodo

dati

metodo metodo metodo

Page 15: Pensiero Orientato Agli Oggetti

Non ci interessa come la somma è calcolata mioOggetto non ha la necessità di sapere

come la somma è stata calcolata Con questa metodologia al lavoro, si può

cambiare il modo con cui Math calcola la somma senza modificare mioOggetto

Tutto quello che mioOggetto vuole è la somma ! E non è interessato a come questa viene calcolata

Esempio di una semplice calcolatrice

Page 16: Pensiero Orientato Agli Oggetti

Semplice calcolatrice Quando determinate la somma con una

calcolatrice, tutto quello che usate è un’interfaccia, l’interfaccia della calcolatrice, la tastiera ed il display.

La calcolatrice ha un metodo per fare la somma che viene invocato (eseguito) quando premete la corretta sequenza di tasti

Come risposta ottenete il corretto risultato della somma

Comunque non avete nessuna idea di come questo risultato sia stato ottenuto

Page 17: Pensiero Orientato Agli Oggetti

Responsabilità Il calcolo della somma non è responsabilità di

mioOggetto È responsabilità di Math Se mioOggetto ha accesso all’oggetto Math,

può inviargli gli appropriati messaggi ed ottenere l’appropriato risultato.

In generale gli oggetti non devono manipolare i dati interni di altri oggetti

Ad esempio mioOggetto non dovrebbe direttamente cambiare i valori di mioint1 e mioint2

Page 18: Pensiero Orientato Agli Oggetti

Che cosa esattamente è un oggetto ? Gli oggetti sono i blocchi di costruzione di un

programma OO Un programma che usa la tecnologia OO è

una collezione di oggetti Ad esempio consideriamo un sistema

costituito da una compagnia e i suoi impiegati. Questi sono gli oggetti.

Ciascuno di questi oggetti è costuito da dati e comportamento

Page 19: Pensiero Orientato Agli Oggetti

I dati di un oggetto I dati memorizzati dentro un oggetto

rappresentano lo stato dell’oggetto Questi dati sono chiamati attributi Per un impiegato potrebbero essere il codice

fiscale, la data di nascita, il sesso, il numero di telefono, etc

Gli attributi contengono le informazioni che differenziano tra di loro i vari oggetti dello stesso tipo, in questo caso gli impiegati

I valori degli attributi

Page 20: Pensiero Orientato Agli Oggetti

Che cosa è il comportamento degli oggetti Il comportamento di un oggetto è tutto quello

che un oggetto può fare Nella programmazione procedurale i

comportamenti sono contenuti nelle procedure, funzioni, subroutine

Nella programmazione OO questi comportamenti sono contenuti nei metodi

Un metodo viene invocato (mandato in esecuzione) inviandogli un messaggio

Page 21: Pensiero Orientato Agli Oggetti

Settare, recuperare i valori degli attributi Uno dei comportamenti richiesti per un oggetto

impiegato è quello di settare e restituire i valori dei suoi attributi

Pertanto ogni attributo dovrebbe avere dei metodi corrispondenti, come setTelefono(), getTelefono().

In questo caso quando un altro oggetto necessita di questa informazione può inviare un messaggio all’oggetto impiegato e chiedere quale sia il suo numero di telefono

public void setTelefono (String n){telefono=n;} public String getTelefono(){return telefono;}

Page 22: Pensiero Orientato Agli Oggetti

Il concetto dei metodi getters e setters La natura concettuale dei metodi accessori è

quella di supportare il concetto di “data hiding” nascondere i dati

Poiché gli oggetti non possono manipolare direttamente i dati dentro un altro oggetto, i metodi getters e setters forniscono un accesso controllato a questi dati

I metodi getters sono anche chiamati metodi di accesso

I metodi setters sono anche chiamati metodi di mutazione (mutators)

Page 23: Pensiero Orientato Agli Oggetti

Interfaccia dei metodi Osserva che stiamo solo mostrando

l’interfaccia dei metodi e non la loro implementazione

Per usare i metodi ad un utente serve la seguente informazione: Il nome del metodo I parametri da passare al metodo Il tipo di dato che esso restituisce

Page 24: Pensiero Orientato Agli Oggetti

Interfaccia dei metodi esempio Sia un oggetto Pagatore che contiene il metodo

calcolaPaga() che calcola la busta paga di uno specifico impiegato. Tra le altre informazioni dell’impiegato all’oggetto Pagatore serve il suo codice fiscale.

Per ottenere questa informazione l’oggetto pagatore invia un messaggio all’oggetto impiegato getCodiceFiscale()

Fondamentalmente questo significa che l’oggetto pagatore chiama ossia manda in esecuzione il metodo getCodiceFiscale() dell’oggetto impiegato

L’oggetto impiegato riconosce questo messaggio e restituisce l’informazione richiesta

Page 25: Pensiero Orientato Agli Oggetti

Diagramma di classe Possiamo fare un disegno che rappresenta il

sistema impiegato/pagatore e lo chiamiamo diagramma delle classi di questo sistema ad oggetti

Impiegato---------------------------------

--dataNascita: Date

codiceFiscale: StringNome: String

Telefono: String

------------------------------------

getTelefono: StringsetTelefono: void

….

Pagatore-------------------------------

paga: double--------------------------------

calcolaPaga: double

Page 26: Pensiero Orientato Agli Oggetti

Come è fatto un diagramma delle classi Ogni classe è definita da tre separate sezioni Il nome Gli attributi Il comportamento ( i metodi ) Per modellizzare le classi si usano degli

strumenti appositi quali UML

Page 27: Pensiero Orientato Agli Oggetti

Creazione di un oggetto da una classe Una classe è un’astrazione degli oggetti del

medesimo tipo Che relazione esiste tra classe e oggetto La classe è uno stampino per mezzo del quale

creiamo oggetti dello stesso tipo Quando un oggetto è creato diciamo che è

instanziato Pertanto se creiamo tre oggetti ad esempio

impiegato, stiamo instanziando tre istanza completamente diverse della classe Impiegato

Ciascun oggetto possiede una propria copia in memoria dei suoi attributi e dei suoi metodi

Un oggetto Impiegato di nome Maria ha la sua propria copia di attributi e di metodi

Page 28: Pensiero Orientato Agli Oggetti

Che cosa è una classe Una classe è uno stampino per un oggetto Una classe è l’insieme dei tipi di dato che

costituiscono gli attributi degli oggetti che essa modellizza

È un’astrazione dai valori di questi dati In una classe non si tiene conto dei valori

degli attributi, si considera l’oggetto nella sua generalità