Ingegneria del Software: UML Class Diagram Due on Mercoledì, Aprile 1, 2015 Claudio Menghi, Alessandro Rizzi 1
Contents Ingegneria del Software (Claudio Menghi, Alessandro Rizzi ): UML Class Diagram 1 Introduzione 3 1.1 Che cos è UML?........................................... 3 1.2 Class diagram............................................. 3 1.3 Classi................................................. 3 1.4 Relazioni............................................... 3 2 Esercizi 4 2.1 Esercizio 1............................................... 4 2.2 Esercizio 2............................................... 5 2.3 Esercizio 3............................................... 6 3 Esercizi per casa 8 Page 2 of 8
1 Introduzione 1.1 Che cos è UML? UML è un linguaggio grafico per esprimere diagrammi relativi alle diverse fasi di sviluppo del software. In particolare è composto da una serie di notazioni che generalizzano la maggior parte di costrutti orientati agli oggetti disponibili. 1.2 Class diagram Un class diagram è un diagramma UML che ha lo scopo di fornire la rappresentazione statica di un sistema orientato agli oggetti, mostrando le classi in gioco e le relazioni tra queste. Si compone di due elementi: le classi e le loro relazioni. 1.3 Classi Una classe è rappresentata da un rettangolo suddiviso vericalmente in tre parti. Nella prima parte è presente il nome della classe, nella parte centrale gli attributi posseduti dalla classe e nella parte bassa i metodi forniti dalla classe. Gli attributi seguono la notazione: <modificatore di visibilitá> nome attributo : <tipo attributo>[= valore di default]. Il modificatore di visibilità è un carattere tra + # - a cui corrisponde una visibilità equivalente in Java a un attributo pubblico, protetto, default e privato. I metodi seguono la notazione: <modificatore di visibilitá> nome metodo (<parametro 1: tipo parametro1>,...) <: tipo di ritorno>. I modificatori di visibilità sono gli stessi usati per gli attributi. Generalizzazione É possibile, similmente a quanto avviene in Java, definire una gerarchia di classi utilizzando la generalizzazione, una freccia vuota che parte dalla classe figlio e punta alla classe padre. Stereotype É possibile estendere il vocabolario UML mediante gli stereotype: é possibile creare nuovi elementi utilizzando elementi esistenti taggati con un identificativo tra guillmette «e». Tale elemento assume un nuovo significato. Nell ambito del class diagram, gli stereotype rilevanti sono l interfaccia ( «interface» ) e l enumerazione ( «enumeration» ). Nel caso dell interfaccia, non essendo presenti attributi, saranno caratterizzati da solo 2 suddivisioni. Properties É possibile specificare informazioni addizioni relative ad una certa classe utilizzando una property. Una property è costituita da una sequenza di stringhe di testo tra parentesi graffe separata da virgole, posta nel primo riquadro della classe. Una property particularmente utile è {abstract}, che specifica il fatto che una classe sia astratta. 1.4 Relazioni In un class diagram è possibile definire diverse relazioni tra le classi. Ogni relazione può essere caratterizzata da: un nome, che identifica la relazione un ruolo per ciascuna delle parti coinvolte, che specifica in che modo tale entità partecipa alla relazione una molteplicità per entrambe le parti, che specifica quanti elementi della classe sono coinvolti nella relazione Page 3 of 8
Il ruolo diventa importante quando la stessa classe è messa in relazione con se stessa. La molteplicità viene specificata tramite i valori estremi (minimo e massimo) separati da dei puntini (.. ). Quando un estremo non è specificato può essere utilizzato utilizzando il carattere *. Volendo è possibile combinare valori (o intervalli) differenti, separandoli tramite virgola. È possibile definire un verso all interno della relazione, caratterizzato da una freccia aperta ad una delle estremità della relazione. Tale simbolo limita la navigabilità della relazione nel verso specificato dalla freccia. Tipi di relazione Ci sono 3 tipi di relazione: associazione: rappresenta una generica relazione tra due classi aggregazione: rappresenta il fatto che una classe costituisce una parte dell altra, è caratterizzata da un rombo aperto all estremo della classe principale composizione: rappresenta un aggregazione forte: la parte non può esistere al di fuori della classe principale e viene creata e distrutta con questa. Viene rappresentata dal rombo dell aggregazione pieno. 2 Esercizi 2.1 Esercizio 1 Esercizio 1: Rappresentare il diagramma delle classi relativo allo scenario seguente. Un Veicolo è composto da un Motore Veicolo: ha una targa e numero di telaio Motore: ha una cilindrata definita su n pistoni Un Pullman è un tipo di Veicolo che trasporta passeggeri Pullman: appartiene ad una società e dispone di n posti a sedere Passeggero: è identificato da un nome e cognome Il class diagram può essere derivato abbastanza facilmente. Abbiamo 4 classi: Veicolo,Motore, Pullman e Passeggero. Risulta evidente il fatto che la classe Pullman sia una sottoclasse di Veicolo, e che Passeggero sia associata a Pullman. Relativamente alla relazione tra Veicolo o Motore è possibile utilizzare, a seconda della situazione particolare, aggregazione o composizione, a seconda che un certo motore possa cambiare indipendentemente dal veicolo. Gli attributi utilizzati sono quelli citati nel testo: targa e telaio per Veicolo cilindrata e pistoni per Motore società e numposti per Pullman nome e cognome per Passeggero Normalmente si considerano attributi privati e metodi pubblici. In Figura 1, rappresentiamo il diagramma delle classi relativo all esercizio. Page 4 of 8
Figure 1: Soluzione esercizio 1 2.2 Esercizio 2 Esercizio 2: Disegnare un diagramma delle classi UML che rappresenti la seguente situazione: Nella redazione di una testata giornalistica ci sono tre tipi di giornalisti: gli editori, i reporter, ed i fotografi. Ogni dipendente è caratterizzato da un nome e da un salario e ha diritto ad almeno un benefit (cioè un oggetto che viene concesso in uso al dipendente dall azienda, ma che è di proprietà dell azienda). Ci possono essere vari tipi di benefit: telefono cellulare, macchina fotografica, computer (che può essere o un portatile, o un palmare). Tra i benefit ci possono anche essere degli apparecchi che hanno funzionalità sia di telefono cellulare che di macchina fotografica. Un telefono cellulare è caratterizzato da un numero di telefono, e offre la funzionalità di chiamata di un altro numero, e di spedizione di un testo ad un altro telefono. Se il telefono ha anche funzionalità di macchina fotografica, permette anche di inviare immagini (che si possono immaginare come sequenze di bit). I fotografi hanno diritto, come benefit, ad esattamente una macchina fotografica. Ci sono 2 tipi di reporter: i reporter junior e quelli senior. I reporter junior hanno diritto ad esattamente un telefono cellulare; i reporter senior hanno invece diritto, come benefit, ad un apparecchio con doppia funzionalità celullare/macchina fotografica. La prima classe che troviamo è Giornalista. Dal testo sappiamo che sono presenti diversi tipi di giornalisti. In genere è possibile rendere in Java questa scelta in 2 modi: tramite generalizzazione: si implementa la tradizionale gerarchia di classi definendo le sottoclassi Fotografo, Editore e Reporter. Page 5 of 8
tramite enumerazione dei tipi: creiamo una enumerazione (stereotipo «enumeration») coi tipi FOTOGRAFO, EDITORE e REPORTER; aggiungiamo alla classe Giornalista un aggregazione all enumerazione. La prima soluzione ha il vantaggio di fornire più controlli sui tipi, al prezzo di una minore versatilità. La seconda, al contrario, permette una maggiore flessibilità eliminando controlli sulle operazioni possibili su ciascun tipo. In genere si tende a utilizzare la seconda scelta solo quando il comportamento delle sottoclassi non differisce dal comportamento della classe padre. Altrimenti il rischio è di dover effettuare uno switch sul tipo per ogni operazione della classe, limitando i benefici della programmazione ad oggetti. Un possibile svantaggio della prima scelta si ha invece negli scenari in cui è richiesto un comportamento generale. In tal modo è possibile semplificare la logica applicativa a poche operazioni comuni. Nella soluzione proposta optiamo per la prima scelta. La seconda parte del nostro class diagram analizza il ruolo del benefit. Analogamente a quanto visto prima la soluzione proposta fa uso di generalizzazione. In questo caso, a causa delle operazioni particolari richieste dalla classe Telefono, risulta più consigliato l utilizzo della gerarchia. Si noti che per alcune parti, ad esempio le classi Portatile e Palmare, sarebbe possibile utilizzare l altra alternativa. Tuttavia in alcuni casi l uso di un approccio misto può complicare eventuali modifiche future. Relativamente alla relazione tra Giornalista e Benefit, analogamente abbiamo due possibili alternative: modellare le relazioni sul padre modellare le relazioni sui figli Queste scelte vanno di pari passo con le scelte effuttuate precedentemente. In particolar modo, spostare le relazioni sulla classe padre, in modo analogo con l utilizzo di enumerazione, da un lato semplifica la progettazione (è disponibile un unica relazione generalizzata), dall altro riduce i controlli (è possibile effettuare operazioni non consentite o violare vincoli del modello). Viceversa le relazioni sui figli esprimono vincoli più stringenti al costo di un aumento della complessità. In questo caso se applicassimo le relazioni tra le classi padre non potremmo esprimere il vincolo relativo all associazione tra fotografo e fotocamera. Nella soluzione proposta scegliamo di modellare le relazioni tra le classi figlie. La soluzione è mostrata in Figura 2. 2.3 Esercizio 3 Esercizio 3: Disegnare un diagramma delle classi UML che rappresenti una rete di computer. Questa si compone di nodi, i quali possono essere di due tipi: host e router. Gli host sono connessi ad esattemente un router, mentre i router possono essere connessi ad un numero qualunque di host e ad almeno un altro router. I nodi di una rete possono essere collegati tra loro mediante link fisici. Un link fisico può collegare più host e più router tra loro. Ogni connessione tra nodi della rete e link fisici è caratterizzata da un indirizzo IP. Un host nella rete può offrire dei servizi. Ogni servizio, su un certo host, è caratterizzato da una porta. Inoltre, ogni servizio si caratterizza per il tipo di protocollo su cui è trasportato, che può essere TCP o UDP. Page 6 of 8
Figure 2: Soluzione esercizio 2 Figure 3: Soluzione esercizio 3 Innanzitutto modelliamo il concetto di rete tramite le classi Rete e Nodo. Notare che la presenza della classe Rete è opzionale; nel caso fossimo interessati a modellare un unica rete, non avremmo bisogno di tale classe. Per associare l entità Link Fisico alla classe Nodo utilizziamo la classe intermedia IP. Allo stesso modo utilizziamo la classe Porta come tramite tra Host e Servizi. Questo perchè tali classi sono relativi alla Page 7 of 8
specifica relazione presente. Relativamente al tipo di servizio, si utilizza l enumerazione Type. Questo perchè il tipo particolare (TCP, UDP) non comporta un comportamento differente. L esercizio è raffigurato in Figura 3. 3 Esercizi per casa Disegnare un diagramma delle classi UML che rappresenti i prodotti bancari offerti da una banca. Una banca si vuole dotare di un nuovo sistema informativo per unificare la gestione dei prodotti bancari. Nello specifico, la banca tratta conti correnti tradizionali, conti correnti online, mutui, e portafogli titoli. Mentre i conti correnti sono sottoscrivibili da tutti, i mutui e i portafogli titoli sono riservati ai clienti intestatari di un conto corrente con una giacenza media di 2000 euro negli ultimi tre mesi. Ciascun cliente della banca può scegliere di aprire alternativamente un conto corrente online, uno tradizionale, ma non entrambi. Il conto corrente online prevede esclusivamente l accesso al conto tramite il sito Internet ed è necessariamente associato ad una carta Bancomat che è invece opzionale nel caso del conto tradizionale. Entrambi i conti possono poi essere associati a carta di credito e libretto assegni. Anche Carta di credito e libretto assegni sono riservati ai clienti titolari di un conto corrente con una giacenza media di 2000 euro negli ultimi tre mesi. Nel caso del conto online, il versamento di denaro può avvenire solo tramite assegno o bonifico, mentre nel caso del conto tradizionale è anche possibile versare contanti. I conti correnti sono associati a delle spese fisse, e a delle spese per ciascuna operazione sul conto (prelievo, versamento, ecc.). Tuttavia sono previsti dei bonus per i clienti che effettuano un numero elevato di operazioni mensili. Page 8 of 8