Object Oriented di base in modo semplice
-
Upload
rosario-turco -
Category
Documents
-
view
216 -
download
0
Transcript of Object Oriented di base in modo semplice
-
8/8/2019 Object Oriented di base in modo semplice
1/10
1
Concetti base dellObject OrientedR. Turco
INDICE
Definizione del ProblemaUniverso o Dominio del Problema
Confine dellUniverso
OggettiClassiAstrazione, classi astratte
Individuazione Oggetti, Classi, Metodi, Ereditariet e Composizione nellenunciato delproblema
IncapsulamentoEreditarietAssociazione
Aggregazione
ComposizionePolimorfismo
Schede CRC: responsabilit e collaborazione
Il metodo OOAOOD: Object Oriented Design
LUML: Unified Modelling Language
Design Pattern e la GRASP Oriented AnalysisRisposte ai test precedenti
Definizione del problema
Ogni problema da informatizzare o da risolvere con un software definito, descrittoalmeno col linguaggio naturale tramite i cosiddetti requisiti utente o in un linguaggio di
modellazione grafico, come lUML, attraverso degli USE CASE (casi duso).
http://pattern/graspoa.dochttp://pattern/graspoa.doc -
8/8/2019 Object Oriented di base in modo semplice
2/10
2
Universo o Dominio del problemaUniverso o dominio del problema sono sinonimi ed individuano unarea di applicazione(medicina, matematica, fisica, elettronica, etc) di cui si vuole fare un modello di
rappresentazione attraverso del software. Spesso necessario lavorare con unesperto del dominio perch non noto e pu essere rappresentato da un analista che
conosce il dominio o dal cliente stesso.
Confine delluniverso o del dominio
Occorre far attenzione ad individuare il giusto confine di universo che interessa. Glioggetti che sono allinterno del dominio sono dinteresse mentre tutto ci che rimane
fuori no.
Alla fine il dominio del problema sar rappresentato da librerie di classi. Seguendo idettami dellObject Oriented, che porta facilmente al concetto di riuso, una classe
pu servire anche in domini diversi o essere estesa nellambito dello stesso dominio.
Oggetti
Le entit coinvolte nel dominio sono oggetti. Gli oggetti hanno una specifica di stato,costituita da una serie di propriet (attributi) aventi un certo valore, e una specifica
di comportamento, costituita da attivit o funzionalit esercitate: creazione,distruzione, funzionalit, etc.
ClassiUna classe unastrazione di un oggetto, rappresenta linsieme di appartenenza di
oggetti dello stesso tipo.
Test 1. Fido e Pippo sono dei cani. Sono un oggetto o una classe?
Perch? Quale loggetto e quale la classe?
Risposta Test 1.
Astrazione, classi astratteLastrazione permette di concentrare il proprio modello solo sui particolari cheservono alla risoluzione del problema, sia a livello di dominio (confine), sia a livello
delle caratteristiche di un oggetto (stato e comportamento).
Lastrazione dipende anche dal punto di vista da cui si affronta il dominio del
problema.
Ad esempio loggetto Auto pu dar luogo ad astrazioni diverse a seconda se ad esso
interessato il Registro Automobilistico oppure il meccanico.
-
8/8/2019 Object Oriented di base in modo semplice
3/10
3
Nel caso del registro automobilistico dellauto ha interesse solo il numero di matricola
del telaio, il nome ed il cognome del proprietario, lindirizzo del proprietario, etc.
Nel caso del meccanico ha interesse invece i km percorsi dallauto per il cambio dolio,
i pezzi cambiati o riparati, il numero di telefono del cliente (non necessariamente ilproprietario), etc
LAstrazione anche un meccanismo di generalizzazione del software tramite i
concetti di classi astratte e delle interface esistenti in Java.
Una classe astratta una classe che ha almeno un metodo astratto. Tale classe non
pu essere istanziata ma deve essere derivata da una classe che implementi il metodo
astratto tramite overloading.
Una interface in Java una particolare classe astratta che ha tutti i metodi astratti.
In C++ non esiste linterface.
Una classe astratta potrebbe servire per derivare da essa due classi che fanno
loverloading di scrivi_su_disco e leggi_da_disco e che possano operare su sistemi
operativi diversi e, quindi, semplificando il porting tra sistemi operativi diversi.
Individuazione Oggetti, Classi, Metodi, Ereditariet e Composizione nellenunciatodel problema
Nel testo del problema, espresso in linguaggio naturale, possibile individuare dei
termini chiave e trasformarli nellequivalente object oriented come mostrato intabella.
Linguaggio naturale Equivalente Object Oriented
Nomi concreti Oggetti (entit del dominio)
Nomi astratti Classi (generalizzazione di oggetti di unostesso tipo)
Verbi Metodi o funzioni membro
E un Ereditariet
Ha un Composizione o unAggregazione
Incapsulamento
NellObject Oriented importante nascondere limplementazione e fornire solointerfacce per lutilizzo delle classi. Questo significa che chi usa le classi non pu, nconviene, che si possa intervenire direttamente sulle variabili membro o di stato; ma,
-
8/8/2019 Object Oriented di base in modo semplice
4/10
4
in termini di Abstract Data Type (ADT), si forniscono solo metodi (le interfacce
dutilizzo) per accedere o manipolare le variabili di stato. Questo permette di avere
una programmazione molto disciplinata, a vantaggio del riuso e della manutenzione.
I metodi sono solo di due tipi: accedono ad una variabile senza cambiarne il valore(metodo selettore o di query; es getTime, getValue etc), cambiano il valore della
variabile o lo impostano (setTime, setValue, etc).
Quando si scrivono i metodi si tende a tenere separate funzionalit di query e quelle
di variazione dello stato, a vantaggio del riuso.
Ereditariet
E il meccanismo col quale una classe eredita stato e comportamento da unaltra classe.
Questo meccanismo permette di: eliminare la duplicazione di codice (una classe che differisce di qualcosa
rispetto ad unaltra pu sfruttare lereditariet: la specializzazione)
incorpora relazioni logiche tra classi
Una relazione di ereditariet espressa dalla frase E un .Ad esempio:
Una giraffa un animale. Un cane un animale. Un aeroplano un aeromobile; Un elicottero un aeromobile.
Animale la superclasse o classe base; mentre giraffa e cane sono le sottoclassi o
classi derivate. Aeromobile la superclasse o classe base; mentre aeroplano eelicottero sono le sottoclassi o classi derivate.
Test 2Fido un cane. E unereditariet? Perch?
Risposta Test 2.
Lereditariet pu essere semplice o multipla. Gli esempi visti finora sono esempi di
ereditariet semplice.
Una rana sia un animale acquatico che un animale terrestre, quindi, un esempio di
ereditariet multipla.
Associazione
La relazione di associazione indica che un oggetto ne contiene un altro o che unoggetto collegato ad un altro.
-
8/8/2019 Object Oriented di base in modo semplice
5/10
5
Ad esempio: Persona prende prestito da Banca. Prende un prestito il nome
dellassociazione.
I ruoli: per Persona il ruolo Prende prestito, per Banca il ruolo presta.Il ruolo la parte che ha loggetto nella relazione.
Nella relazione esiste anche una molteplicit, che indica il numero di oggetti che
partecipano allassociazione.
Ad esempio una Banca pu avere 1..N persone a cui fornisce un prestito.
Aggregazione o Tutto-ParteLaggregazione risponde alla frase Ha un oppure Parte di . In altri termini unarelazione Tutto/Parte o aggregazione descrive una relazione interna tra oggetti dove
uno contiene laltro/i.
Laggregazione una relazione tra pari. E tra pari quando un oggetto non piimportante dellaltro e ognuno pu esistere senza laltro.
Esempio di Aggregazione o Tutto/Parte e tra pari : Banca ha 1* (qualsiasi) clienti(oppure si dice che aggrega un numero qualsiasi di Clienti). E tra pari perch ognuno
pu esistere senza laltro ovvero sono indipendenti.
In UML si mette un rombo bianco dalla parte di Tutto (Banca), cio di chi aggrega.
ComposizioneLa composizione un caso particolare di aggregazione; una relazione non tra pari. In
altri termini una delle entit, la Parte, non pu esistere senza il Tutto.
Esempio: Banca ha 1..* Filiali.
Filiali non pu esistere senza Banca.
In UML si mette un rombo nero dalla parte di Tutto (Banca), cio di chi aggrega.
Persona BancaPrende restito
1..N *
Banca Cliente
1..* *
Banca Filiale
-
8/8/2019 Object Oriented di base in modo semplice
6/10
6
Conseguenza: Questo significa pure che se loggetto Banca cessa di vivere, per
conseguenza devono cessare di vivere anche gli oggetti Filiali.
Quando usare lAssociazione, lAggregazione e la ComposizioneSe lo scopo del modello quello di evidenziare la struttura della relazione, allora si
evidenzia la cosa con Aggregazione o Composizione. Se, invece, lo scopo di mettere
in evidenza i ruoli degli oggetti nella relazione, allora va bene una sempliceassociazione.
Polimorfismo
Test 3. Pu esistere il polimorfismo senza ereditariet?
Risposta Test 3.
Incapsulamento ed ereditariet sono importanti nellOO ma anche il polimorfismo
contribuisce a rafforzare il riuso, la manutenzione e lo snellimento del codice (minornumero di linee di codice da scrivere).
Polimorfismo deriva dal greco multiforme; difatti possibile a run-time
(dinamicamente ovvero durante lesecuzione del programma) far assumere al softwarecomportamenti diversi (chiamare il metodo della classe giusta) a seconda del tipo dioggetto in gioco. Questo consente una semplificazione della programmazione
dellapplicazione.
Esistono il polimorfismo statico (overloading o binding statico), che ha effetto a
compile-time e il polimorfismo dinamico (overriding o binding dinamico).
Si presuppone che esista una gerarchia di ereditariet. Alcune o tutte le classi della
gerarchia hanno metodi con lo stesso nome (firma).
Le classi derivate ridefiniscono, quindi, i metodi della classe base (overloading o
binding statico).
Prima del lancio del programma non potendo conoscere a priori il tipo delloggetto non
si sa quale metodo verr richiamato. A run-time il tipo delloggetto noto e questopermette il binding dinamico, cio la chiamata del metodo della classe associato al tipodi oggetto in esecuzione.
1 *
-
8/8/2019 Object Oriented di base in modo semplice
7/10
7
Test 4.
Implementare un metodo calcolo che ritorni un intero e che accetti come parametri
due operatori e il tipo delloperazione. Sfruttare il polimorfismo per non usare nelmain delle espressioni condizionali o uno switch. Commentare i vantaggi ottenibili.
Schede CRC: responsabilit e collaborazioni
Le schede CRC sono un semplice meccanismo per gli apprendisti di Object Orientedper individuare le classi. Furono introdotte da Ward Cunningham e Kent Beck nel 1989.
In pratica per ogni oggetto del dominio del problema occorre scrivere un scheda CRC.Ogni scheda divide il foglio verticalmente in due parti con una linea tratteggiata. In
alto a sinistra si mette il nome della classe. Sotto al nome della classe lelenco delle
responsabilit, a sinistra lelenco delle classi che collaborano.
Le responsabilit sono il comportamento che la classe assume (i metodi). In altri
termini le responsabilit della classe sono le operazioni compiute dalla classe.
E buona norma che ogni classe abbia poche responsabilit e rispetti i principi dei
Design Pattern GRASP.Vedi Analisi dei Pattern GRASP.
Test 5. Scrivere le schede CRC per una lavanderia, che prevede di lavare panni conacqua e detersivi, di asciugarli. Quali sono le classi? Quali le responsabilit? Chi
collabora con chi?Risposta Test 5.
Il metodo OOASe ci fate caso finora ci si sempre preoccupati di esaminare il dominio del problema,
le entit allinterno del suo confine, e chiedersi continuamente Che cosa dobbiamo
fare?. Questo significa che siamo in una fase alta ovvero di OOA ( Object OrientedAnalysis).
Il metodo finora eseguito stato:1. Lettura della definizione del problema2. Individuazione dellUniverso o del dominio del problema3. Individuazione dei confini del dominio del problema4. Elenco delle entit, oggetti allinterno del confine del dominio del problema5. Individuazione delle classi6. Individuazione delle interazioni tra classi: gerarchiche, di associazione,
aggregazione, composizione
7. Individuazione delle responsabilit, dellesperto, della alta coesione, del bassoaccoppiamento e del principio di Demetrio (Pattern GRASP)
http://../Pattern/graspoa.doc#Experthttp://../Pattern/graspoa.doc#Experthttp://../Pattern/graspoa.doc#Experthttp://../Pattern/graspoa.doc#Expert -
8/8/2019 Object Oriented di base in modo semplice
8/10
8
8. Nel caso di ereditariet verificare la possibilit di una semplificazione delcodice col polimorfismo.
9. Eseguire un test, anche logico, del modello prodotto per varie situazioni tipo.10.Implementare il tutto11.testare12.fare refactoring
Durante la stesura delle classi (punto 5) si deve prendere in considerazione per la
individuazione delle classi:
ogni attore (che usa il sistema o il modello); ogni oggetto del dominio; ogni evento; ogni tipo di visualizzazione; ogni sistema terze parti che interagisce col sistema o il modello;
Per il punto 7 utile lanalisi con i Pattern GRASP: lindividuazione dellesperto da la
responsabilit dellattivit a chi sa come farla, ma consente anche la suddivisione delleresponsabilit tra le classi e la delega ad altra classe di unattivit. Quando una classe
ha troppe responsabilit occorre suddividerle tra pi classi. I concetti di alta coesionee di basso accoppiamento mirano proprio a questo. Una classe con troppe
responsabilit ha quasi certamente una bassa coesione.
Il metodo sopra descritto un OOA classico, nel senso che non utilizza un linguaggiodi modellazione come UML. In ogni caso i concetti di base rimangono gli stessi eapplicabili allo stesso modo.
In fase OOA in realt non si scende molto in dettaglio, ma si considerano solo le
classi, i metodi e gli attributi di maggior interesse. Cos anche in UML con i diagrammidelle classi e gli altri diagrammi.
OOD: Object Oriented Design
LOOD il processo di costruzione del modello della soluzione progettuale. Unmodello, quindi, contiene linsieme di oggetti che appaiono in una possibile soluzione del
problema. In altri termini mentre lOOA porta ad un modello del dominio del problema,
lOOD porta ad un modello del dominio della soluzione.
Infatti nellODD il modello finale, oltre a tutto quello del dominio del problema, pu
contenere anche oggetti che non fanno parte del dominio del problema ma checollaborano alla soluzione del problema e, quindi, alla realizzazione del sistema cherisolve il problema.
-
8/8/2019 Object Oriented di base in modo semplice
9/10
9
Questo significa che dopo aver individuato le classi, i metodi e gli attributi dinteresse
necessario scendere in un maggior dettaglio, aggiungendo metodi di servizio privati,
classi di servizio (per la scrittura di trace, log, etc), attributi di servizio o ulteriori.
Potrebbe essere necessario introdurre classi astratte per generalizzare laproblematica per riusi futuri o gi previsti.
LUML: Unified Modelling LanguageIn lavorazione.
Risposte ai test precedentiRisposta Test 1.
Fido e Pippo sono oggetti della classe Cane; in altri termini sono istanze della classe
Cane, per cui hanno stato diverso (ad esempio et diversa, colore pelo diverso, razzadiversa) e comportamento uguale (stessi metodi: corre, abbaia, salta, azzanna,
mangia).
Risposta Test 2.Fido non eredita da cane ma unistanza di cane. Fido un nome
concreto e non astratto o generico, in altri termini Fido un oggetto e non una classe.
Lereditariet vale fra le classi. Per cui non c nessuna ereditariet. Vedi lEquivalente
Object Oriented.
Risposta Test 3. No, lereditariet necessaria al meccanismo del polimorfismo.Senza ereditariet niente polimorfismo o binding dinamico.
Risposta Test 5.
Lavatrice Detersivo
Acqua
Panni
Lava i panni
Asciugatrice
Panni
Asciuga i panni
Panni
Detersivo
Acqua
LavatriceAsciugatrice
Detersivo Lavatrice
Panni
Lava i panni Acqua
Acqua Lavatrice
Panni
Lava i panni Detersivo
-
8/8/2019 Object Oriented di base in modo semplice
10/10
10
Il main del programma deve considerare di:1. Inserire i panni nella lavatrice;2. Aggiungere detersivo;3. avviare la lavatrice;4. aggiungere lacqua;5. inserire i panni nellasciugatrice;6. asciugare i panni.
Le collaborazioni devono far riflettere sulle relazioni tra le classi: sono associazioni,
aggregazioni o composizioni?