UML Unified Modeling Language Lezione 4-1 -
UML Il diagramma delle classi Parte Seconda - 2 -
Relazioni tra Classi&Oggetti I diagrammi delle classi mettono in evidenza i blocchi costitutivi del sistema software orientato agli oggetti. Tali blocchi sono le classi. Parlare di relazioni fra classi significa evidenziare tutte le possibili collaborazioni o interazioni fra le classi. Un sistema orientato agli oggetti è costituito da classi che collaborano tra loro scambiandosi messaggi. Quando è in esecuzione, un sistema object-oriented è popolato da istanze di classi. Tra classi esistono essenzialmente tre tipi di relazione: L associazione La generalizzazione specializzazione L aggregazione (detta anche composizione) L associazione Si definisce associazione fra due classi lo scambio reciproco di messaggi fra classi. L associazione tra due (o più) classi esprime un legame semantico tra classi. Essa è caratterizzata da: Un nome La molteplicità dell associazione Un eventuale ruolo giocato dalle parti associate La direzionalità Il Nome delle associazioni UML indica l associazione fra due classi con una linea continua; l associazione può essere etichettata con un nome che ne indica la natura. In questo caso si traccia sulla linea anche la punta di una freccia per indicare la direzione nella quale va interpretato il nome dell associazione. Persona Possiede Copre Polizza - 3 -
La figura precedente mostra due semplici associazioni. Un associazione fra due classi viene definita binaria. Molteplicità delle associazioni Un ulteriore elemento che può essere aggiunto ad un associazione è l informazione relativa alla sua molteplicità. Facciamo un esempio: Persona Possiede Il concetto è abbastanza intuitivo: una singola persona può possedere più automobili (nell esempio, tre) come può non possederne affatto (nella pratica avviene anche questo). L associazione fra persona e automobile ha la seguente molteplicità: 3 Potremo riscrivere il diagramma delle classi nel seguente modo: Persona Possiede 3 Il simbolo 1: indica che ad ogni istanza della prima classe corrisponde una ed una sola istanza della seconda classe. Esempio: la molteplicità di una relazione fra una persona e il suo codice fiscale è di questo tipo. Il simbolo : indica che ad ogni istanza della prima classe possono corrispondere da 0 a infinite (*) istanze della seconda classe. Esempio: La relazione fra la classe cliente e la classe fattura. Il simbolo 0..x (dove x può essere qualsiasi numero da 0 a *): indica che ad ogni istanza della prima classe possono corrispondere 0 o x istanze della seconda. Esempio 0..1: La relazione fra una persona e la sua partita IVA. Nomi dei ruoli In alcune occasioni può essere necessario chiarire il ruolo giocato da una classe all interno di un associazione. - 4 -
Persona 1 Prenota Comincia a * Viaggio 1 IndirizzoPartenza Indirizzo 1 Termina a La classe indirizzo nel diagramma assume tre ruoli differenti. La direzionalità La direzionalità specifica il verso di percorrenza della relazione e attribuisce alla classe origine del percorso la responsabilità di tenere traccia dell associazione. In conclusione, per dar vita ad un associazione (relazione semantica) tra classi è necessaria l esistenza di una collaborazione tra esse, ottenuta tramite lo scambio di messaggi. Per l implementazione IndirizzoCasa Sul piano implementativo, l associazione si traduce nella istanziazione, all interno di una classe, di una o più istanze di un altra classe, conservando in un opportuna struttura dati gli oggetti istanziati. Generalizzazione - Specializzazione IndirizzoDestinazione La generalizzazione specializzazione (gen-spec) permette in fase di analisi di individuare le entità di interesse procedendo per raffinamenti successivi: l analista può concentrarsi sull individuazione di una superclasse, che raccoglie un comportamento comune, rimandando ad un successivo passo la specializzazione delle realtà presenti nel dominio del problema. In un primo approccio dell analisi si può evitare di studiare tutte le peculiarità della classe, ma ci si può soffermare sul carattere generale del dominio del problema e quindi avere una più semplice rappresentazione. 1-5 -
Figura {isabstract = True} Superclasse Rettangolo -base: int -altezza: int +disegna() +calcoloperimetro() +calcoloarea() -nome : Stringa = +disegna() {abstract} +calcoloperimetro {abstract} +calcolaarea {abstract} Sottoclasse -raggio: int Cerchio +disegna() +calcoloperimetro() +calcoloarea() In questo caso si dice che una classe è un tipo di un altra classe. In UML la generalizzazione viene rappresentata con una freccia a punta triangolare che parte dalle classi più specializzate (sottotipi o sottoclassi) e termina nella classe che costituisce il tipo generale (supertipo o superclasse). Per l implementazione A livello di implementazione il concetto di specializzazione si traduce nel meccanismo di ereditarietà. Aggregazione o composizione Concettualmente una relazione di aggregazione evidenzia che una classe è l insieme di altre classi che concorrono a definirla. Pensiamo ad un automobile: essa è l assemblaggio di una serie di componenti (altre classi). Quindi si parla di aggregazione quando l istanza di una classe oltre ad avere attributi propri comprende attributi derivanti da istanze di altre classi. Un tipico esempio di aggregazione è la classe rappresentante un impianto di produzione, nella quale il prodotto finito è il risultato dell assemblaggio di diversi componenti. In altri termini, l aggregazione estende la responsabilità dell oggetto, il quale delega alcuni compiti ad altri oggetti. - 6 -
-marca: Stringa = -modello: Stringa = -velocità: Km/h=0 -accelerazione: m/s^2=0 -marciacorrente: Marcia{Folle, Prima, Seconda, }=Folle -stato: statomotore {Acceso,Spento} = Spento +muoviavanti +muoviindietro +marciaup +marciadown +Avvia Simbolo di aggregazione Carrozzeria -numeroserie: Stringa -colore: Enum {Rosso, Verde, } -peso: Kg Motore -numeroserie: Stringa -marca: Stringa= -numerovalvole: Enum{1..12} -numerocilindri: Enum{1..16} -peso::kg +start(): Boolean Ruota -circonferenza: int -tipocerchi: Stringa -peso: kg -avanti -indietro La relazione di contenimento può essere di tipo lasco (rombo vuoto) o stretto (rombo pieno). Si dice lasco quando la vita dell oggetto contenuto è indipendente dall oggetto contenitore. Questo comporta la non responsabilità per l oggetto contenitore di creare e distruggere l oggetto contenitore. Diversamente la relazione si dice stretta. Spesso quando ci si riferisce alle aggregazioni di utilizza il termine tutto-parte. Infatti le istanze della classe sono il tutto, mentre le istanze delle classi sotto i rombi sono le parti. Per l implementazione L interfaccia dell oggetto tutto (contenitore) viene definita utilizzando i metodi presenti nelle interfacce degli oggetti parti (contenuti). All interno della classe tutto ci saranno attributi di tipo classe parte. - 7 -
Linee Guida per la modellazione: il modello concettuale La produzione di diagrammi delle classi da un punto di vista concettuale coinvolge le seguenti attività: Definizione di classi e relazioni Identificazione di attributi e operazioni e loro assegnamento nelle classi Identificazione delle strutture di generalizzazione Definizione di classi e relazioni Le classi e le associazioni possono essere identificate: Dal risultato delle attività di raccolta delle informazioni Dalle specifiche comportamentali dei casi d uso Dall analisi approfondita dello stesso modello delle classi (derivante da riflessioni ed esperienze). I nomi e le frasi utilizzate dai casi d uso e nelle trascrizioni delle interviste spesso indicano già le classi. Bennett (1991) suggerisce alcune categorie di classi che possono essere identificate fin da subito: Occorrenze specifiche di un tipo generico: persone ( Fabio Rossi ), società ( Scarpe&Borse ) ed elementi organizzativi ( Addetti alle vendite ). Strutture inerenti il dominio del problema, come Dipendenti, Impiegati. Ecc. Astrazioni di cose come: Persone e ruoli: gestore di conto, addetto alla vendita delle polizze Oggetti fisici: automobile, polizza, conto corrente Concetti: vendita, prelievo, abilità Relazioni durevoli tra classi già identificate come accordo, registrazione Le locuzioni verbali possono indicare associazioni fra classi; altre relazioni possono emergere nel corso del raffinamento del modello delle classi. Per esempio: Il cliente gestisce un conto, un volontario possiede una particolare abilità - 8 -