Guida di base a UML
In questa guida di base tratteremo gli aspetti di base relativi alla fase di analisi e di progettazione di un software secondo le logiche della programmazione orientata agli oggetti. Per fare ciò utilizzeremo un linguaggio di modellazione chiamato UML (Unified Modelling Language), il quale ci aiuterà a rappresentare, soprattutto graficamente, ciò che il nostro programma dovrà fare e non il come.
E' bene precisare che l'ambito di questa guida è volutamente ristretto alle nozioni di base del linguaggio UML, per chi, viceversa, fosse in cerca di un manuale approfondito rimando alla guida a UML scritta da Matteo Petrioli.
All'inizio tutto ciò potrà sembrarvi una perdita di tempo, in quanto sarete tentati a gettarvi subito nella produzione di linee di codice. Vedrete con i vostri occhi che quando effettuerete una buona fase di analisi, la fase di codifica risulterà più semplice, così come la fase di manutenzione sarà agevolata.
Provate a guardare del codice che avete scritto tempo fa, o magari scritto da qualcun altro e vedete se riuscirete a capirci qualcosa.
L'essenza dello sviluppo orientato agli oggetti, è l'identificazione e l'organizzazione dei concetti del dominio di applicazione, non la loro implementazione finale in un linguaggio di programmazione!
Vi chiederete ora: cosa è un oggetto?
L'oggetto è una struttura che raccoglie al suo interno l'insieme dei dati e le funzioni che operano su di essi. Lo sviluppo di un sistema orientato agli oggetti, avviene seguendo le seguenti fasi:
OOA: Object Oriented Analysis
OOD: Object Oriented Design
OOP: Object Oriented Programming
La fase di analisi consiste nel creare un primo modello concettuale del problema che a noi interessa.
Durante la fase di progettazione (design), si cerca una strategia con cui risolvere i problemi relativi al fatto che il tale modellazione dovrà trovare spazio su un calcolatore, per cui si tenteranno di risolvere problemi quali l'allocazione fisica dei dati, l'interfacciamento tra oggetti, le prestazioni e così via. Alla fine di tale processo gli oggetti, verranno raggruppati in package (moduli), e si stabiliranno le interconnessioni fra moduli differenti del programma.
Nell'ultima fase, si effettuerà la traduzione da UML ad un linguaggio di programmazione orientato agli oggetti, come il C++ o Java, seguendo le informazioni forniteci dai modelli che abbiamo prodotto durante le precedenti fasi.
Diagramma dei casi d’uso – Guida UML
Un caso d'uso non è altro che una interazione fra un utente ed il sistema, quindi in esso dovranno essere rappresentate tutte le funzionalità esterne del sistema software. In questo diagramma vediamo la presenza degli attori essi rappresentano i vari utenti del sistema.
Effettuare una buona modellazione, in UML, consiste nel rappresentare tutti i possibili casi d'uso di un sistema...
Scenari – Guida UML
All'interno di un singolo caso d'uso vi possono essere diversi percorsi possibili. Tali cammini prendono il nome di scenari, quindi per meglio descrivere il nostro caso d'uso possiamo realizzare diversi scenari, i quali devono interessare i casi più significativi per meglio descrivere le diverse interazioni che vi possono essere fra più casi d'uso.
Tali scenari possono essere descritti in...
Diagrammi delle classi UML
Passiamo ora al cuore dei diagrammi UML: il diagramma delle classi. Come si intuisce dal nome, in questo diagramma dobbiamo specificare le classi che faranno parte del nostro progetto e le loro interazioni.
Una classe viene rappresentata come segue:
Specificare più o meno accuratamente, i metodi e gli attributi delle classi in gioco, dipende dalla fase di progettazione in cui ci...
Relazioni tra Classi e Oggetti: Gen-Spec – Guida UML
Le relazioni di tipo generalizzazione-specializzazione (gen-spec), servono per poter garantire al progettista un buon livello di astrazione. Utilizzando tali relazioni si può infatti creare in precedenza una super classe da cui far derivare in seguito classi figlie. Evitando di specializzare da subito tutti gli attributi di una classe, si ha il vantaggio di poter inquadrare sin dall'inizio il dominio...
Relazioni tra Classi e Oggetti: Aggregazione – Guida UML
L'aggregazione consente di poter formare aggregati di oggetti, così come avviene nel mondo reale, ovvero se vediamo un oggetto composto da più parti le rappresenteremo in termini di queste ultime e non dell'intero oggetto, in quanto è meglio gestire piccole classi che una sola grande classe.
Esistono due tipi di aggregazione una lasca e una stretta.
L'aggregazione lasca indica che...
Relazioni tra Classi e Oggetti: Associazione – Guida UML
L'associazione fra una o più classi permette di esprimere i legami che ci sono fra di esse. E' caratterizzata da:
un nome
una molteplicità
una direzione
La sintassi grafica da usare è la seguente:
La molteplicità ha lo stesso significato visto in precedenza, il fatto che l'associazione sia realizzata con un unione senza freccia, indica che è bidirezionale, in caso contrario il verso della...
UML: esempio Class Diagram
Vediamo in ultimo come può diventare abbastanza complessa la gestione di un class diagram a mano a mano che vi si aggiungono classi.
Questo diagramma è relativo ad un software per la gestione di un supermercato, dove ogni carrello è dotato di una tessera magnetica e di un sensore (notate come sono espresse le molteplicità). A sua volta nella tessera...
UML: diagrammi di attività
Una possibile estensione ai diagrammi di sequenza, è quella dei diagrammi di attività, essi servono per gestire attività complesse e diverse fra di loro che prevedono l'interazione di più attori, separati da corsie verticali.
Le attività che sono sulla stessa linea sono eseguibili in mutua esclusione.
Vediamo un esempio tratto dalla documentazione fornita con il software di gestione del supermercato:
Da UML a C++
Una volta sviluppati un numero sufficiente di diagrammi UML, per la descrizione del nostro prodotto, bisogna passare alla fase di traduzione, per effettuarla basta seguire le seguenti regole, sviluppate in questo caso per il C++ ma facilmente adattabili a qualsiasi linguaggio di programmazione di alto livello orientato agli oggetti(come JAVA, visual C++, etc).
In generale gli strumenti CASE (Computer Aided...