Object Oriented di base in modo semplice

download Object Oriented di base in modo semplice

of 10

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?