Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
0
Danilo Bruno
danilob82@libero.it
Samuele Carpene
samuelecarpene@msn.com
Luca Montinari
luca.montinari@fastwebnet.it
ABSTRACT
Il documento ha come obiettivo una trattazione sintetica della specifica di UML 2.0, dando maggiore rilevanza alle nuove funzionalit ed innovazioni, e ai cambiamenti introdotti in questultima versione. In particolare, possibile cogliere modifiche e caratteristiche relative al metamodello (e metametamodello) , ai diagrammi gi esistenti nelle precedenti versioni ed a quelli di ultima generazione, al linguaggio di specifica dei vincoli (Object Constraint Language), ad XMI, standard per lo scambio di modelli tra differenti tool. Nellultima parte del documento vengono presentati 3 tool che supportano UML 2.0, elencando per ciascuno le caratteristiche che ne evidenziano le potenzialit offerte. In contrasto con labbozzo, UML come progetto rivolto innanzitutto alla completezza. Nel forward engineering, un progetto simile sar sviluppato da un ingegnere il cui lavoro proprio quello di fornire ai programmatori un modello dettagliato da implementare. Il modello dovrebbe essere sufficientemente completo da esprimere tutte le decisioni di progetto, cos che il programmatore possa seguirlo in modo abbastanza lineare, senza bisogno di interpretarne alcun aspetto. Questo aspetto ispirato alle branche dellingegneria classica in cui i professionisti creano disegni tecnici dettagliati che vengono poi passati alle compagnie per la produzione. Nel reverse engineering, questa tipologia dutilizzo utile nella documentazione di progetto, in sostanza la modellazione UML descrive ogni parte del sistema realizzato Il confine tra i progetti abbozzati e quelli dettagliati non perfettamente delineato: la distinzione, in ogni caso, sta nel fatto che i bozzetti sono deliberatamente incompleti e si concentrano solo sulle informazioni pi importanti, mentre lintento dei progetti quello di essere esaustivi, spesso con lo scopo di ridurre la programmazione a unattivit semplice e relativamente meccanica. Riassumendo, gli abbozzi sono rivolti allesplorazione di un problema, i progetti alla sua definizione. Lultimo modo di intendere UML come linguaggio di programmazione; qui viene utilizzato per compilare direttamente i diagrammi in formato eseguibile, in questo caso UML e codice sorgente coincidono e non c distinzione tra forward e reverse engineering. Lo scopo principale permettere agli sviluppatori di programmare in modo visuale, indipendentemente dalla piattaforma software adottata, per fare questo stato definita larchitettura MDA (Model Driver Architecture), seguendo questa architettura gli sviluppatori creano un PIM (Platform Independent Model), il PIM trasformato (semi-)automaticamente in un PLM (Platform Specific Model), poi il PLM viene trasformato automaticamente in codice specifico di una piattaforma. Esistono gi strumenti che permettono di creare direttamente del codice dai diagrammi UML, per sono ancora poco maturi. Dopo varie revisioni dello standard, si arrivati alla versione 2.0 che definisce in modo pi rigoroso e formale il meta-modello di UML ed aggiunge qualche nuovo diagramma.
2. IL META-MODELLO
Nella versione 2.0, la revisione dello standard UML stata affidata a 4 Revision Task Force (RTF): UML Infrastructure: come ne suggerisce il nome, obiettivo di questa RTF consiste nel curare miglioramenti relativi alla struttura base del metamodello UML, ossia, riguardanti il core (cuore di UML), i meccanismi di estensione, le facility del linguaggio ecc. In particolare i relativi obiettivi sono di allineare larchitettura dello UML agli altri standard gestisti dallOMG (quali per esempio il MOF, Meta Object Facility, Meta-data Interchange XMI), ristrutturare il linguaggio al fine
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Argomenti Avanzati di Ingegneria del Software 2005 Politecnico di Milano, ITALIA. Copyright 2005 ACM 7/06/2005$5.00.
di renderlo pi comprensibile ed estenderlo mantenendo per la semantica e notazione attuale. UML Superstructure: obiettivo di questa RTF elaborare proposte atte ad incorporare le best-pratices in aree particolarmente sensibili come lo sviluppo di sistemi basati sui componenti, i modelli architetturali, quelli eseguibili e dellarea business. In particolare necessario studiare ulteriormente le soluzioni per: o la gestione degli eventi nei diagrammi delle attivit. o migliorare lillustrazione dellincapsulamento con particolare riferimento ai diagrammi di stato e di sequenza; o ridefinire la semantica di relazioni generalizzazione, associazione, ecc. come la
Come detto sopra il metamodello organizzato a livelli, i primi tre livelli sono: Le specifiche del linguaggio, o il metamodello Le specifiche dellutente, o il modello (realizzate rispettando le regole definite nel metamodello) Gli oggetti del modello, usati dagli utenti come linguaggio. Gli utenti finali vedono le specifiche dellutente come metamodello e le specifiche del linguaggio come metametamodello
Questi tre strati possono essere iterati per creare nuovi metamodelli, il quarto livello linstanza a runtime degli oggetti del modello. Per chiarire meglio larchitettura di UML in figura 1 mostrato un esempio di come viene utilizzata la stratificazione in UML.
o il supporto dello sviluppo component-based di sistemi software. o il supporto per architetture a tempo di esecuzione, favorendone la descrizione del comportamento dinamico e leventuale rappresentazione gerarchica. Object Constraint Language: il nome di questa RTF evidenzia chiaramente quale sia la relativa area di competenza: lOCL. Gli obiettivi sono di presentare proposte atte ad aumentare il livello di specializzazione dellOCL per lutilizzo UML. Ci dovrebbe semplificare il lavoro degli utenti, favorendo laumento di formalit dei vari modelli prodotti. UML Diagram Interchange: obiettivo di questa RTF favorire lo scambio di modelli UML prodotto da tool diversi.
La libreria composta da due Macro Package: Core e Profiles, che ora andremo ad analizzare un p pi approfonditamente. La figura 2 illustra come il package profiles dipenda dal package core, per semplicit si pu pensare che il package Core sia una classe astratta e il package Profiles ne sia unimplementazione. In altro modo potremo pensare che il Core stabilisca delle regole e Profiles realizzi qualcosa che le rispetta.
Basic rappresenta una serie di costrutti che sono usati come basi per la produzione di XMI per UML, MOF e altri metamodelli basati sullInfrastructureLibrary.
Il package Profiles contiene il meccanismo usato per creare i profili di uno specifico metamodello, in particolare di UML. Obiettivo della libreria allineare larchitettura UML con MOF per rendere i due metamodelli pi compatibili tra di loro, per fare questo lRFT ha definito un core comune e si assicurata che UML sia definito come un modello basato sulluso del metamodello MOF.
Figura 2: Composizione di InfrastructureLibrary Il package Core un metamodello completo progettato per la riusabilit, importabile da altri metamodelli allo stesso livello, come si vede dalla figura sottostante.
3. DIAGRAMMI
I diagrammi definiti in UML 2 sono 13 e possono essere divisi in due categorie: diagrammi strutturali e comportamentali. Ora elencheremo tutti i diagrammi e pi avanti li analizzeremo sottolineando le differenze con UML 1.x: Diagrammi strutturali (structure diagram) Diagramma delle classi (class diagram) Diagramma dei componenti (component diagram) Diagramma di struttura composita (composite structure diagram)
Diagramma di deployment (deployment diagram) Diagramma degli oggetti (object diagram) Diagramma dei package (package diagram) Diagrammi comportamentali (behavior diagram) Diagramma delle attivit (activity diagram) Diagramma dei casi duso (use case diagram) Diagramma di macchina a stati (state machine diagram) Diagramma di interazione (interaction diagram) Diagramma di sequenza (sequence diagram) Diagramma diagram) di comunicazione (communication
Figura 4: Struttura Package Core Per facilitare il riuso della libreria, il package core suddiviso in sottopackage, come si vede in figura 4: PrimitiveTypes contiene semplicemente un numero di tipi predefiniti che sono comunemente usati nel metamodello quando si definisce la sintassi astratta, ed stato progettato per cercare di soddisfare le necessita di UML e MOF. Abstractions contiene le metaclassi astratte che dovrebbero essere specializzate e sono pensate per il riuso in altri metamodelli. Il package Constructs, contiene le metaclassi concrete che si prestano alla modellazione orientata agli oggetti, questo package in particolore riusato da MOF e UML, e rappresenta una parte significante del lavoro per allineare i due metamodelli.
Diagramma di interazione generale (interaction overview diagram) Diagramma di temporizzazione (timing diagram)
Un esempio di attributo :
{readOnly}.
nome:
String
[1]
Pippo
vincolo sugli oggetti che possono rappresentare lattributo (tipo di dato); trattato pi avanti;
Molteplicit: Default:
stringa di propriet:
Associazioni Le associazioni sono un altro modo di rappresentare le propriet. Gran parte dellinformazione che pu essere associata a un attributo si applica anche alle associazioni. Le due figure mostrano le stesse propriet rappresentate nelle due diverse notazioni: Figura 5: Esempio di Diagramma delle Classi nel caso di Gestione degli Ordini. Nella figura 5 viene mostrato il diagramma usato per le classi (familiare a chiunque). Il box rappresenta la classe, ed eventualmente, diviso in tre sezioni che contengono rispettivamente il nome della classe (scritto in grassetto), i suoi attributi e le sue operazioni.
Figura 8: Le propriet di un ordine espresse come associazioni. Unassociazione una linea continua che collega due classi, orientata dalla classe sorgente a quella destinazione. Il nome e la molteplicit vanno indicati vicino allestremit finale dellassociazione: la classe destinazione corrisponde al tipo della propriet. Bench gran parte delle stesse informazioni appaiano in entrambe le notazioni, alcuni aspetti sono diversi: in particolare, le associazioni possono indicare la molteplicit a entrambi i capi della linea. Con due notazioni che si possono usare come facciamo a scegliere quella giusta? In generale si usano gli attributi per le piccole cose (date, booleani,ecc. generalmente chiamati oggetti valore) e le associazioni per le classi pi significative. Molteplicit lindicazione di quanti oggetti possono entrare a far parte di una propriet. Le molteplicit pi comuni sono: 1 (indica la partecipazione allassociazione di un solo oggetto)
Figura 6: Rappresentazione di una classe. Propriet Le propriet rappresentano le caratteristiche strutturali di una classe. In prima approssimazione si pu pensare che le propriet corrispondano ai campi della classe. In realt il discorso molto pi complicato, come si vedr, ma questo un buon punto di partenza. Le propriet sono un unico concetto, rappresentato per con due notazioni molto diverse: attributi e associazioni. Bench il loro aspetto grafico sia molto differente, concettualmente sono la stessa cosa. Attributi La notazione degli attributi descrive una propriet con una riga di testo allinterno del box della classe. La forma completa :
nome : stringa lista parametri: lista parametri delloperazione tipo di ritorno: tipo di valore restituito dalloperazione, se
In modo pi generale, le molteplicit si possono definire indicando gi estremi inferiore e superiore di un intervallo (per esempio 2..4). Molti termini si riferiscono alla molteplicit degli attributi: Opzionale: indica un limite inferiore di 0 Obbligatorio: implica un limite inferiore di 1 o pi A un solo valore: implica un limite superiore di 1 A pi valori: implica che il limite superiore sia maggiore di 1, solitamente *
esiste
stringa di propriet: caratteristiche aggiuntive che si
applicano alloperazione Le operazioni possono essere di diverso tipo: Query: ottengono un valore da una classe senza effetti collaterali Modificatori: cambiano lo stato del sistema
UML 1 permetteva luso di molteplicit discontinue, come 2,5 per indicare le due possibilit distinte: questa ad esempio potrebbe essere la molteplicit dei posti su una macchina, 2 se sportiva, 5 nel caso normale. Le molteplicit discontinue venivano usate molto di rado, e UML 2 le ha eliminate. Associazioni bidirezionali Unaltra tipologia di associazione quella bidirezionale, costituita da una coppia di propriet collegate, delle quali una linversa dellaltra. Il collegamento inverso implica che, se seguite il valore di una propriet e poi il valore della propriet collegata, dovreste ritornare allinterno di un insieme che contiene il vostro punto di partenza.
Altri termini di uso comune per i metodi sono: get restituisce il valore di un campo set scrive un valore in un campo
Unoperazione viene invocata su un oggetto, e corrisponde alla dichiarazione di un procedura, mentre un metodo il corpo di tale procedura. Le due cose sono diverse in presenza di polimorfismo. Se avete un supertipo con tre sottotipi, e ognuno di questi tre ridefinisce con loverriding loperazione del supertipo, c una sola operazione e quattro metodi che la implementano. Generalizzazione Un esempio tipico di generalizzazione sono i clienti di unazienda che possono essere soggetti privati o altre aziende. I due casi sono diversi, ma hanno anche molti punti in comune che possono essere raccolti in una classe generale Cliente (il supertipo), di cui Cliente Privato e Azienda Cliente sarebbero i sottotipi. Da un punto di vista software, linterpretazione pi naturale implica il meccanismo dellereditariet: Azienda Cliente una sottoclasse di Cliente. Nei pi diffusi linguaggi orientati agli oggetti, una sottoclasse eredita tutte le caratteristiche della superclasse e pu ridefinire i suoi metodi con loverriding. Un principio basilare dovrebbe essere la sostituibilit. Dovrebbe essere sempre possibile sostituire unAzienda Cliente ogni volta che il codice richiede un Cliente, e tutto dovrebbe continuare a funzionare perfettamente. Essenzialmente, questo significa che se devo scrivere codice che richiede luso di un Cliente, posso sempre sostituire un suo qualsiasi sottotipo. Per quanto lereditariet sia un meccanismo potente, porta con s un grado di complessit che non sempre necessario per ottenere la sostituibilit (ad esempio una sottoclasse che eredita molti dati e comportamenti non desiderati). Si possono usare molti altri meccanismi per creare classi sostituibili. Per questo in molti casi si distingue la definizione di sottotipo da quella di sottoclasse: nel primo caso si ereditano solo le interfacce, nel secondo anche limplementazione. Una classe un sottotipo se sostituibile al suo supertipo, che questo sia dovuto o meno allereditariet. Molti meccanismi permettono di creare sottotipi senza usare lereditariet: ad esempio si pu ottenere un sottotipo implementando uninterfaccia o applicando diversi classici design pattern.
Figura 9: Associazione bidirezionale. Nella figura 9, la natura bidirezionale dellassociazione palesata dalle frecce di navigabilit aggiunte a entrambi i capi della linea. La prossima figura non ha frecce; UML permette luso di questa forma per indicare unassociazione bidirezionale, ma si pu usare anche quando non si vuole mostrare una navigabilit particolare.
Figura 10: Associazione bidirezionale senza navigabilit particolare. Quando laspetto della bidirezionalit importante opportuno usare la freccia doppia per maggior chiarezza. Operazioni Le operazioni sono le azioni che la classe sa eseguire, e in genere si fanno corrispondere direttamente ai metodi della classe. Le operazioni che manipolano le propriet della classe di solito si possono dedurre, per cui non sono incluse nel diagramma. La sintassi UML completa delle operazioni
visibilit nome (lista parametri) : tipo ritorno {stringa di propr}
Note e Commenti Le note rappresentano commenti aggiuntivi che possono apparire in qualsiasi tipo di diagramma UML. Possono essere disegnate da sole, oppure si possono collegare con una linea tratteggiata agli elementi a cui fanno riferimento. KEYWORD call create derive instantiate permit realize refine Figura 11: Una nota serve per commentare uno o pi elementi del diagramma. La linea tratteggiata pu talvolta essere scomoda, perch difficile identificare precisamente dove termina. Per questo motivo, una convenzione comune prevede di mettere un piccolo cerchietto vuoto alla sua estremit. Qualche volta pu anche essere utile aggiungere un commento direttamente allinterno di un elemento del diagramma; in tal caso potete scrivere il testo dopo due trattini:
--.
Tabella 1: Parole chiave di UML MEANING The source calls an operation in the target The source creates instances of the target The source is derived from the target The source is an instance of the target The target allows the source to access the targets private features The source is an implementation of a specification or interface defined by the target Refinement indicates a relationship between different semantic levels; for example, the source might be a design class and the target the corresponding analysis class The source is substitutable for the target Used to track such things as requirements to classes or how changes in one model link to change elsewhere The source requires the target fot irs implementation
substitute trace
use
Dipendenza Si ha una dipendenza tra due elementi di un diagramma se la modifica alla definizione delluno (chiamato fornitore, supplier) pu causare un cambiamento allaltro (il client). Nel caso delle classi, la dipendenza pu essere causata da molti fattori: un classe pu chiamare i metodi dellaltra, o usarla come tipo di un suo campo, o prevederla come tipo di parametro di qualche operazione. Se linterfaccia della classe cambia, qualsiasi messaggio inviato ad essa potrebbe non essere pi valido. UML permette di indicare dipendenze tra ogni sorta di elementi: questo rende possibile specificare tutti i punti in cui cambiare un elemento potrebbe coinvolgerne altri. La figura 12 mostra alcune dipendenze che si possono trovare in unapplicazione complessa.
Luso pi comune delle dipendenze legate alle classi per indicare una relazione temporanea, ad esempio quando un oggetto viene passato come parametro. In questi casi si possono usare indicazioni come parameter, local e global. Queste stesse parole chiave, che non fanno parte formalmente di UML 2, venivano usate in UML 1 per indicare la temporaneit dei collegamenti, non delle propriet.
Figura 12: Alcuni esempi di dipendenze. La classe Finestra dei benefici (Benefits Window) fa parte dellinterfaccia utente: quelle che ne fanno parte vengono chiamate anche classi di presentazione. Ora, tale classe dipende da Impiegato (Employee); questultimo un oggetto del dominio che incapsula il comportamento fondamentale del sistema, in questo caso alcune regole di business. Ci significa che se linterfaccia della classe Impiegato cambia, potrebbe dover cambiare anche la Finestra dei Benefici. importante notare che la dipendenza va in un sola direzione, dalla classe di presentazione a quella del dominio. UML prevede molte tipologie di dipendenza, ognuna con una particolare semantica e diverse parole chiave, ne riportiamo unelenco nella tabella seguente.
un particolare scopo, ma per usarne uno non necessario conoscere i dettagli del suo rapporto col meta-modello (poich il profilo riguarda la progettazione di questultimo). Responsabilit Spesso utile indicare su un diagramma le responsabilit di una classe. Il modo migliore per farlo aggiungerle sotto forma di stringhe di commento in un apposito scomparto della classe, come si vede in figura. possibile dare un nome esplicito allo scomparto, ma normalmente non ce n bisogno, dato che raro fare confusione.
diagramma delle classi pu mostrare pi classi di potenziali possessori di oggetti componenti, ma ogni istanza di componente deve appartenere a un solo oggetto possessore.
Figura 16: Composizione La regola di non condivisione la chiave della composizione. Un altro aspetto importante che si considera implicitamente valido che la cancellazione del poligono dovrebbe automaticamente assicurare la cancellazione di tutti i punti che gli appartengono. La composizione un buon modo per indicare propriet che si riferiscono a oggetti valore, oppure che hanno un possesso forte e in qualche modo esclusivo di altri, specifici componenti. Propriet derivate Le propriet derivate sono quelle che possono essere calcolate partendo da altri valori. Da un punto di vista software, la derivazione pu essere interpretata in due modi diversi. Si pu usarla per indicare la differenza tra un valore calcolato al momento e uno memorizzato (vedi figura 17).
Figura 13: Mostrare le responsabilit su un diagramma delle classi Operazioni e attributi statici UML chiama static unoperazione o un attributo che si applicano a una classe anzich alle sue istanze. Questa definizione equivale a quella dei membri statici nei linguaggi basati su C. Le caratteristiche statiche vanno sottolineate sul diagramma.
Figura 17: Attributi derivati in un periodo di tempo. La derivazione pu anche essere applicata alle propriet, usando la notazione dellassociazione. In questo caso si pu semplicemente marcare il nome con una barra:/. Interfacce e classi astratte
Figura 14: Notazione per le operazioni e gli attributi statici. Aggregazione e composizione Una delle maggiori fonti di confusione in UML laggregazione. Spiegarla superficialmente facile: laggregazione la relazione parte-di. come dire che una macchina ha un motore e quattro ruote come sue parti. Questo sembra ragionevole: la cosa difficile capire la differenza tra aggregazione e associazione. Le differenze tra laggregazione e associazione erano spesso alquanto vaghe, cos UML ha incluso le aggregazioni nello standard, ma praticamente non ne ha definito la semantica (vedi figura 15).
Una classe astratta una classe che non pu essere direttamente istanziata: per farlo bisogna prima crearne una sottoclasse concreta. Tipicamente, una classe astratta ha una o pi operazioni astratte. Unoperazione astratta non ha implementazione; costituita dalla sola dichiarazione, resa pubblica affinch le classi client possano usufruirne. Il modo pi diffuso di indicare una classe o unoperazione astratta in UML scriverne il nome in corsivo. Si possono anche rendere astratte le propriet. Indicandole direttamente come tali o rendendo astratti i metodi daccesso. Uninterfaccia una classe priva di implementazione;. Le classi hanno due tipi di rapporti con le interfacce: le possono fornire o richiedere. Si dice che una classe fornisce uninterfaccia se sostituibile ad essa. Una classe richiede uninterfaccia se necessita di una sua istanza per funzionare. Essenzialmente, come dire che ha una dipendenza da essa. Il fatto che ArrayList implementa List e Collection indicato dalle icone a forma di pallina che escono dal box, spesso chiamate lecca-lecca (lollipops) per il loro aspetto peculiare. Il fatto che Ordine richiede linterfaccia List viene mostrato con unicona a forma di semicerchio (socket, letteralmente presa). La connessione tra la pallina e la relativa presa chiarissima e balza allocchio in modo naturale.
Figura 15: Aggregazione. Oltre allaggregazione UML include una propriet definita in modo pi preciso, la composizione. Nella figura 16, unistanza di Punto pu essere parte di un poligono oppure il centro di un cerchio, ma non entrambe le cose . La regola generale che bench una classe possa essere componente di molte altre classi, ogni sua istanza pu essere componente di un solo oggetto. Un
Figura 18: Notazione con pallina (lollipop) e semicerchio (socket). UML ha usato i lecca-lecca per molto tempo, ma i socket a forma di semicerchio sono una novit introdotta da UML 2. Nel vecchio stile nei diagrammi veniva usata una dipendenza al posto del semicerchio come nella figura.
originale. La ragione sta nel fatto che altrimenti, nel caso gli oggetti fossero condivisi, il cambiamento avrebbe ripercussioni imprevedibili sugli altri oggetti. Questo problema noto come aliasing. In passato, la differenza tra oggetti riferimento e oggetti valore era pi chiara: gli oggetti valore erano quelli predefiniti dal linguaggio. Ora si pu estendere il sistema dei tipi predefiniti con le proprie classi, e la questione richiede pi considerazione. UML usa il concetto di tipo di dato (data type), indicato sulla classe con unapposita parola chiave. Formalmente un tipo di dato non la stessa cosa di un oggetto valore, perch non ha identit. Gli oggetti valore invece sono dotati di identit, anche se non la usano per fare i test di uguaglianza. Un tipo valore si pu indicare anche con una parola chiave tra quelle usate comunemente, le pi diffuse sono forse value e struct. Associazioni qualificate Unassociazione qualificata lequivalente UML del concetto noto dei linguaggi di programmazione come array associativo, tabella di hash, mappa o dizionario. La figura mostra come si pu usare un qualificatore per rappresentare lassociazione tra classi Ordine e Linea dOrdine. Il qualificatore indica che per ogni istanza di Prodotto ci pu essere una sola Linea dOrdine collegata a un Ordine.
Figura 19: dipendenza in UML 1 I lecca-lecca sono utili anche su altri diagrammi, non solo quelli delle classi (ad esempio sono usati nei diagrammi di interazione per risolvere i problemi nel rappresentare il comportamento polimorfico). Read Only e Frozen La parola chiave {readOnly} usata per marcare una propriet che pu essere solo letta e non modificata dagli oggetti client. Una parola chiave simile ma sottilmente differente {frozen}, definita in UML 1. Una propriet si dice frozen (letteralmente congelata) se non pu cambiare per tutta la durata della vita di un oggetto; spesso in questo caso si dice anche che immutabile. La parola {frozen} stata ufficialmente eliminata in UML 2 ma vista la sua utilit potrebbe essere reintegrata nello standard. Oltre a marcare propriet, si pu anche applicare la parola chiave a unintera classe per indicare che tutte le propriet di tutte le sue istanze sono congelate. Oggetti riferimento e oggetti valore Gli oggetti riferimento sono entit come un Cliente. In questo caso lidentit importante, perch normalmente si desidera che un solo oggetto software rappresenti il Cliente del mondo reale. Ogni altro oggetto che fa riferimento a un Cliente deve farlo usando un puntatore o, appunto, un riferimento; quindi tutti gli oggetti che puntano a questo Cliente si riferiscono allo stesso oggetto software. In questo modo, ogni cambiamento apportato al Cliente si rifletter su tutti gli utenti che lo utilizzano. Se ci sono due diversi riferimenti a un oggetto Cliente e si vuole controllare se corrispondono allo stesso oggetto, solitamente si confronta la loro identit. Gli oggetti valore sono cose come una Data. Spesso ci sono multipli oggetti valore che rappresentano lo stesso oggetto del mondo reale: ad esempio, normale che ci siano centinaia di copie delloggetto che rappresenta l1 Gennaio 2005. Tutte queste sono intercambiabili, e nuove date vengono frequentemente create e distrutte. Gli oggetti valore dovrebbero essere immutabili, nel senso che se dovessimo cambiare il valore di un oggetto sarebbe opportuno crearne uno nuovo con tale valore e collegarlo alloggetto
Figura 20: Associazione qualificata. Spesso facile confondersi sulla molteplicit di unassociazione qualificata, infatti da considerare unicamente nel contesto del qualificatore. Nella modellazione concettuale si usa il costrutto del qualificatore solamente per rappresentare vincoli del tipo una sola Linea dOrdine per prodotto in un Ordine. Classificazione multipla e dinamica Il termine classificazione si riferisce alla relazione tra un oggetto e il suo tipo. I linguaggi di programmazione pi diffusi presumono che un oggetto possa appartenere a una sola classe, ma il discorso non si esaurisce qui. Con la classificazione singola un oggetto appartiene a un solo tipo, che pu eventualmente ereditare dai suoi tipi padre. Con la classificazione multipla un oggetto pu essere descritto da pi tipi, non necessariamente collegati dallereditariet. Si noti che la classificazione multipla una cosa ben diversa dallereditariet multipla. Questa afferma che un tipo pu avere pi supertipi, ma ogni oggetto deve sempre appartenere a un suo tipo ben definito. La classificazione multipla permette invece che un oggetto venga associato a pi tipi senza che per questo debba esserne appositamente definito un altro. Ad esempio, se consideriamo una classe Persona con sottotipi a seconda che sia uomo o donna, dottore o infermiere, paziente o no (vedi figura). La classificazione multipla permette di associare a tale oggetto una qualsiasi combinazione lecita dei suoi sottotipi, senza bisogno di definire appositamente un nuovo tipo per ognuna delle combinazioni.
Figura 23: Promuovere una classe di associazione in una classe vera e propria. Luso delle classi di associazione richiede di ricordare un formalismo supplementare: qual il vantaggio che controbilancia questaumento di complessit? Il fatto che la classe di associazione aggiunge implicitamente un vincolo extra; infatti ci pu essere solo unistanza della classe di associazione tra ogni coppia di oggetti associati. Classi parametriche (template) Il concetto di classe parametrica utile soprattutto per lavorare con le collezioni allinterno di linguaggi fortemente tipizzati. Ad esempio si pu definire il comportamento di un insieme generico definendo il template di classe Set (insieme) come si pu vedere dalla figura 24.
Figura 21: Classificazione multipla. Se si usa la classificazione multipla, ci si deve assicurare di rendere chiare le combinazioni legali. Per questo fatto, UML 2 pone ogni relazione di generalizzazione in un insieme di generalizzazione. Sul diagramma delle classi, la freccia che indica una generalizzazione va etichettata con il nome del rispettivo insieme, che in UML 1 era chiamato discriminante. La classificazione singola corrisponde alluso di un singolo anonimo insieme di generalizzazione. Gli insiemi di generalizzazione sono disgiunti per definizione: ogni istanza del supertipo pu essere istanza di uno dei sottotipi allinterno di quel sottoinsieme. Unaltra questione riguarda la possibilit che un oggetto cambi classe: ad esempio, quando un conto bancario va in rosso, il suo comportamento muta drasticamente. In particolare, vengono ridefinite alcune operazioni (tra cui preleva e chiudi). La classificazione dinamica permette agli oggetti di cambiare classe allinterno della struttura di tipi, cosa che la classificazione statica non consente. Usando la classificazione statica, i concetti di stato e di tipo vengono nettamente separati; la classificazione dinamica invece li combina. Classi di associazione Le classi di associazione permettono di aggiungere attributi, operazioni e altre caratteristiche alle associazioni, come indicato nella figura.
Figura 24: Un template di classe. Fatto questo si pu usare la definizione generale per creare classi che rappresentano insiemi di elementi specifici. Nel diagramma, la T serve da segnaposto per il parametro che indica il tipo (ce ne pu essere pi duno). Un uso particolare della classe parametrica, Set<Dipendente>, prende il nome di derivazione. come
Ci sono due modi di indicare una derivazione (vedi figure): il primo riprende la sintassi del C++ e il secondo esplicita il collegamento template.
Figura 22: Classe di Associazione. Dal diagramma si pu vedere che una Persona pu partecipare a pi riunioni. Potremo desiderare di tener conto del suo livello di attenzione; per far questo possiamo aggiungere allassociazione lattributo partecipazione. La prossima figura mostra un altro modo di rappresentare questinformazione: esprimere la Presenza a una riunione con una classe autonoma. Notate come si sono spostate le molteplicit.
Enumerazioni Le enumerazioni sono usate per mostrare un insieme di valori prefissati che non hanno altre propriet oltre al loro valore simbolico (vedi figura). Sono rappresentate con una classe marcata dalla parola chiave enumeration.
Figura 27: Una Enumerazione. Classi attive Ogni istanza di una classe attiva esegue e controlla il proprio thread. Le invocazioni dei metodi possono essere eseguite nel thread del client o in quello delloggetto attivo. Un buon esempio potrebbe essere un processore di comandi, che prende dallesterno degli oggetti comando e li esegue allinterno del proprio thread di controllo.
Figura 29: Notazione del diagramma dei componenti UML 2 ha rimosso tale icona, che per la si pu ancora usare allinterno di un box di classe per contraddistinguerlo. In alternativa, anche possibile usare la parola chiave component. Oltre alla suddetta icona, i componenti non introducono elementi nuovi: i loro collegamenti sono basati sulle interfacce implementate e richieste, per le quali si pu usare la solita notazione ball-and-socket proprio come si fa nei diagrammi delle classi. Per mostrare la composizione interna di un componente si pu usare un diagramma di struttura composita, che verr discusso in seguito.
Figura 28: Una classe attiva. La notazione delle classi attive cambiata passando da UML 1 a UML 2, come si pu vedere in figura. In UML 2, una classe attiva contraddistinta da righe verticali aggiuntive sui due lati; in UML 1 aveva un bordo pi spesso e veniva chiamata oggetto attivo. Visibilit La visibilit uno di quei concetti semplici in teoria, ma dalle implicazioni complesse. Gli elementi pubblici possono essere usati da unaltra classe, quelli privati invece sono riservati solo alluso interno della loro classe. In pratica, ogni linguaggio definisce le proprie regole di visibilit. Bench linguaggi differenti usino termini come public, private e protected, queste parole possono generare molta confusione, soprattutto per chi utilizza pi linguaggi. UML cerca di risolvere questo problema senza impantanarsi troppo. Essenzialmente, possibile etichettare ogni operazione o attributo con un identificatore di visibilit; si pu usare qualsiasi tipo di indicazione , e il significato preciso dipende dal linguaggio adottato. UML stesso fornisce comunque quattro abbreviazioni per indicare la visibilit: + (public), - (private), (package), # (protected). Questi quattro livelli sono definiti e usati allinterno del meta-modello di UML, ma le loro definizioni presentano piccole variazioni rispetto ai linguaggi di programmazione pi diffusi. Figura 30: Esempio diagramma componenti La figura 30 presenta un esempio di diagramma dei componenti. Come si vede, un agente di vendita (till) si pu collegare a un componente server usando uninterfaccia dedicata appunto ai messaggi di vendita. Dato che la rete inaffidabile, previsto anche un componente che implementa una coda di messaggi (message queue). In questo modo lagente pu parlare direttamente con il server quando la rete funziona, e con la coda in caso contrario: questultima si occuper poi di contattare il server quando la rete torner a essere disponibile. Di conseguenza, la coda di messaggi fornisce linterfaccia sales message per parlare con lagente e contemporaneamente la richiede per comunicare con il server. Questultimo suddiviso in due componenti principali: il transaction processor implementa linterfaccia dei messaggi di vendita, mentre un driver comunica con il sistema di contabilit. I componenti rappresentano pezzi di software che possono essere acquisiti e aggiornati in modo indipendente. Bisogna usare questi diagrammi quando si sta suddividendo il sistema in componenti e si vuole documentare le loro relazioni attraverso le interfacce, o quando si vuole mostrare la struttura interna dei singoli componenti a un livello di astrazione pi basso.
interna. Questo permette al progettista di prendere un oggetto complesso e spezzarlo in parti pi piccole e semplici. La figura sottostante presenta una scomposizione interna di una classe in due parti, indicando anche quale delle due supporta e richiede ogni interfaccia. Il nome di ognuna delle parti ha la forma nome: classe. I due elementi che compongono il nome sono opzionali, ma non possono mancare entrambi. Le parti non sono istanze, per cui vanno scritte in grassetto e non sottolineate. anche possibile indicare il numero delle istanze delle parti, la figura dice che ogni TV Viewer ha un Generatore e una parte che si occupa dei controlli. Per mostrare che una parte implementa o richiede uninterfaccia si disegna tra di esse un connettore di delega. Anche le parti sono collegate tra di loro da connettori, e per questo si pu usare una semplice linea o la notazione socket e pallina.
sua posizione nel sistema durante lesecuzione. Per rappresentare gli elaborati si pu aggiungere unicona o la parola chiave artifact. anche possibile associare dei valori di etichetta ai nodi o agli elaborati per trasmettere informazioni aggiuntive di particolare interesse, come la marca, il sistema operativo, la posizione fisica o qualsiasi altra cosa da documentare. Spesso gli elaborati rappresentano limplementazione di un componente, se questo il caso e lo si vuole documentare si pu ancora una volta usare un valore di etichetta nel box dellelaborato. I path di comunicazione tra i nodi rappresentano il flusso delle comunicazioni. La figura mostra un esempio di diagramma di deployment.
Figura 32: Esempio diagramma di deployment Sono molto utili per mostrare la distribuzione fisica dei nodi, e se ne pu giovare qualsiasi sistema la cui messa in opera non sia estremamente semplice.
Figura 31: Esempio struttura composita Per capire bene la differenza tra i package e le strutture composite bisogna pensare che i primi rappresentano un raggruppamento al momento della compilazione, mentre le seconde fanno riferimento a quello che succede durante lesecuzione. Di conseguenza sono adatte a rappresentare i componenti e le loro parti, e sono usate spesso nei diagrammi dei componenti.
scritte tra parentesi quadre. Ogni volta che si raggiunge una decisione si deve intraprendere solo uno dei flussi uscenti, il che significa che le guardie devono essere tutte mutuamente esclusive. Si pu anche scrivere [else] come guardia, indicando cos il cammino da intraprendere quando nessuna delle altre guardie verificata. Un merge ha pi flussi in input e un solo output, e segnala la fine del comportamento condizionale iniziato con una decisione.
utile nei casi in cui dobbiamo inviare un messaggio e poi attendere la risposta prima di continuare.
Figura 37: Elementi principali di una macchina a stati Oltre a questi elementi ci possono essere dei stati che rispondono agli eventi senza bisogno di seguire una transizione, usando attivit interne: per far questo si indicano levento, la guardia e lattivit allinterno dello stesso box dello stato. Unattivit interna simile a unauto-transizione: spesso chiamata anche auto-anello, questa una transizione che esce da uno stato e vi rientra. anche possibile definire stati in cui loggetto svolge una determinata attivit in modo continuato. Lattivit indicata con la dicitura /do (do-activity); questi stati prendono il nome di stati di attivit. La differenza tra attivit regolari e do-activity sta nel fatto che le prime avvengono istantaneamente e non sono influenzate dai normali eventi, mentre le do-activity prendono un tempo finito ed inoltre possono essere interrotte. Uml 1 usava il termine azione per le attivit normali, riservando la parola attivit solo per le doactivity. Nel caso in cui pi stati condividono alcune transizioni e attivit interne, possibile trasformarli in sottostati e raccoglierne il comportamento comune in un superstato, come mostrato in figura 38.
Figura 38: Esempio di superstato Gli stati possono essere suddivisi in pi diagrammi ortogonali in esecuzione concorrente (stati concorrenti). La separazione delle due aree di comportamento (come mostrato in figura 39) in diagrammi di stato separati rende tutto pi semplice e chiaro. La figura include anche uno pseudostato di storia, che memorizza lo stato del sistema al momento dello spegnimento, in modo da poter ripristinare il corretto stato alla prossima accensione.
Figura 39: Stato concorrente I diagrammi delle macchine a stati sono molto utili nel descrivere il comportamento di un oggetto in pi casi duso, mentre non funzionano bene quando bisogna rappresentare la collaborazione tra pi oggetti. Di conseguenza conviene combinarli con altre tecniche (es. diagrammi di interazione) per descrivere il comportamento di molti oggetti in un singolo caso duso. Figura 40: Esempio diagramma di sequenza Una novit introdotta da UML 2 sono i frame di interazione, sono una sorta di cornici che servono ad inquadrare ed evidenziare una parte del diagramma, esprimendo condizioni e cicli. Ogni frame ha un operatore, e ogni frammento pu avere una guardia; gli operatori che possono essere utilizzati nei frame sono elencati in tabella 2.
Tabella 2: Parole chiave di UML Operatore Alt opt par loop region neg ref Significato Frammenti multipli in alternativa, verr eseguito solo quello per cui verificata la condizione Opzionale, il frammento viene eseguito solo se la condizione specificata verificata Parallelo; ogni frammento viene eseguito in parallelo Ciclo; il frammento pu esere eseguito pi volte, la base delliterazione indicata dalla guardia Regione critica, il frammento pu essere eseguito da un solo thread alla volta Negativo; il frammento mostra uninterazione non valida Riferimento; si riferisce a uninterazione definita in un altro diagramma. Il frame devessere disegnato in modo da racchiudere le linee di vita coinvolte nellinterazione Sequenze diagram; usato per racchiudere un intero diagramma di sequenza
Figura 42: Diagramma di comunicazione a controllo centralizzato (non legale per la specifica 2.0) Lo stile di numerazione dei messaggi della figura 42 semplice ed quello comunemente usato; ma in effetti non strettamente legale; per essere del tutto aderenti alla specifica UML, si dovrebbe usare un sistema di numerazione decimale nidificato, come si vede dalla figura 43. Lo scopo di questa tecnica sta nel risolvere lambiguit nella sequenza delle chiamate in presenza di auto-collegamenti di un oggetto a se stessi.
sd
In UML 2 stata cambiata la distinzione tra messaggi sincroni ed asincroni, i primi vengono indicati con frecce piene, mentre i secondi da frecce composte da due segmenti sottili. I diagrammi di sequenza eccellono nel mostrare le collaborazioni tra gli oggetti, ma non sono altrettanto precisi quando si tratta di definire il loro comportamento.
Figura 43: Diagramma di comunicazione con numerazione decimale nidificata Oltre ai numeri, i messaggi possono essere etichettati anche con delle lettere: questo significa che appartengono a diversi thread di controllo. I messaggi A5 e B2, quindi, appartengono a thread diversi; i messaggi 1a1 e 1b1 corrispondono a thread differenti in esecuzione parallela allinterno del messaggio 1. Le lettere dei thread si possono usare anche sui diagrammi di sequenza, bench questi non presentino visivamente la concorrenza. I diagrammi di comunicazione non definiscono una notazione precisa per esprimere la logica di controllo. possibile usare indicatori di iterazione e guardie, ma da soli questi elementi non sono sufficienti a specificare completamente la logica. Manca anche una notazione speciale per la creazione/distruzione di oggetti, ma per questo si usano comunemente le parole chiave create delete.
La figura 44 presenta un semplice esempio; in questo diagramma si vuole produrre e formattare il prospetto riassuntivo di un ordine. Se il cliente esterno, estraiamo le informazioni necessarie da un file XML; se interno basta accedere al database. Piccoli diagrammi di sequenza (racchiusi in un frame etichettato con loperatore sd) rappresentano le due alternative. Una volta che abbiamo estratto i dati si pu formattare il prospetto; in questo caso non mostriamo il diagramma di sequenza ma si fa semplicemente riferimento con un frame speciale (etichettato con loperatore ref).
Figura 46: Diagramma di temporizzazione (stati rappresentati come aree) La differenza principale che nella figura 45 i cambiamenti di stato sono indicati dal movimento di una linea orizzontale da un livello ad un altro, mentre nella figura 46 vengono rappresentati da una croce che interrompe la continuit di linee pi spesse.
4. INTRODUZIONE A OCL
OCL (Object Constraint Language) un linguaggio che permette di descrivere espressioni e vincoli sui modelli orientati agli oggetti. Unespressione unindicazione o specificazione di valore; un vincolo una restrizione su uno o pi valori del modello o del sistema. OCL uno standard query language per lanalisi e il design orientato agli oggetti approvato dallObject Management Group (OMG).
Per indicare unistanza in un diagramma dinamico Per indicare una condizione in un diagramma dinamico Per indicare i valori attuali di parametri in un diagramma dinamico
volta eseguite, a produrre un valore o un insieme di valori che soddisfano linterrogazione. Una body expression ununica espressione con cui in OCL possibile specificare dove prelevare i valori richiesti: nellesempio seguente, loperazione di getCustomerName produrr come risultato il nome (name) del proprietario (owner) della scheda (card) associato al LoyaltyAccount: context LoyaltyAccount::getCustomerName() : String body: Membership.card.owner.name
Nellesempio, il corretto modo per rappresentare la restrizione aggiungere al diagramma la seguente espressione OCL: context Flight inv: passengers->size() <= plane.numberOfSeats Le espressioni scritte in un linguaggio preciso e matematico come OCL offrono un gran numero di benefici nelluso di diagrammi per la specifica di sistemi. Queste espressioni non possono essere interpretate in modi differenti da diverse persone (analista e programmatore). Essendo non ambigue possibile definire modelli pi precisi e pi dettagliati. Inoltre queste espressioni possono essere verificate da tool automatici in modo da garantire correttezza e consistenza con gli elementi del modello. Tutto quanto descritto sopra rende la generazione del codice pi precisa e potente. utile notare che allinverso, descrivere un modello facendo uso di un linguaggio costituito solamente da espressioni, genera documenti che non sono facilmente comprensibili. Combinando UML ed OCL si ottiene la migliore soluzione per lo sviluppo di software. Un considerevole numero di differenti diagrammi possono essere usati, insieme ad espressioni OCL, per specificare modelli completi. Senza le espressioni OCL, come gi detto, si ottengono rappresentazione imprecise; senza i diagrammi UML, le espressioni OCL si riferiscono ad elementi inesistenti nel modello, dato che non possibile in OCL specificare classi ed associazioni.
Figura 49: diagramma delle classi con ambiguit Per rendere maggiormente valido lo schema di figura 49 necessario aggiungere alcune regole: Una persona pu ottenere unipoteca su una casa solo se ne il proprietario La data di inizio ipoteca deve essere inferiore a quella di fine ipoteca Lidentificativo di ogni persona deve essere univoco (social security number) Una nuova ipoteca pu essere concessa solo quando il reddito del richiedente sufficiente
Una nuova ipoteca pu essere concessa solo quando il valore di cassa della casa sufficiente
Sul diagramma non sono visibili queste informazioni, e non esistono possibili rappresentazioni che le possano esprimere utilizzando solo i diagrammi. Esprimere tali vincoli in un linguaggio ordinario (come sopra) non ancora sufficiente per eliminare ogni tipo di ambiguit e non chiarezza. Aggiungendo invece al modello alcune espressioni OCL possibile renderlo perfettamente leggibile ed interpretabile senza rischio derrore: context Mortgage inv: security.owner = borrower context Mortgage inv: startDate < endDate context Person inv: Person::allInstances()->isUnique(socSecNr) context Person::getMortgage(sum : Money, security : House) pre: self.mortgages.monthlyPayment->sum() <= self.salary * 0.30 context Person::getMortgage(sum : Money, security : House) pre: security.value >= security.mortgages.principal->sum() OCL assume ancora maggiore importanza quando il modello diviene un input per un sistema automatizzato. Esistono vari tool in grado di generare simulazioni, codice, test, traduzioni di modelli in altri linguaggi usando le trasformazioni Model Driven Architecture (MDA). Lautomazione di questi compiti possibile solo se il modello contiene tutte le informazioni necessarie; un tool computerizzato non pu interpretare regole in lingua italiana. I vincoli espressi mediante OCL includono tutte le informazioni necessarie per i tool MDA automatizzati. Questa modalit di implementazione pi veloce ed efficiente e garantisce maggiore consistenza tra UML ed OCL.
Per assicurare lo scambio tra i tool che non possiedono una notazione di modello di elementi, ma una di linee, testo e grafici, esiste un meccanismo di trasformazione da XMI a SVG. SVG un formato XML-based per vettori grafici adottato come una W3C Recommendation. Questo standard in grado di esprimere tutti i diagrammi dellUML, un formato di uso comune per una vasta variet di tool (grafici, desktop ) ed stato creato per adattarsi al web.
Figura 50: processo di creazione del DTD Con un tool di modellazione viene creato un modello XMI[UML] attraverso le regole di produzione dellXMI; successivamente il tool procede nella traduzione del modello appena creato utilizzando le regole del profilo UML per MOF, si ottiene quindi il metamodello XMI[MOF]. Infine le regole di creazione DTD possono essere applicate alla precedente rappresentazione MOF ottenendo cos il documento DTD.
5. XMI
Lidea che sta alla base di questo meccanismo, rendere facile e trasparente la conversione di documenti, in accordo con lo standard UML, tra differenti software tool. Un meccanismo per lo scambio di modelli UML era gi stato specificato in UML 1.x usando XMI (XML Metadata Interchange), esso per non permetteva appieno di effettuare delle trasposizioni complete di modelli. Infatti era possibile solamente il trasporto delle informazioni riguardanti quali elementi fossero contenuti nel modello UML e non i dati relativi al modo in cui gli elementi fossero rappresentati nel diagramma. Questa limitazione non era dovuta da XMI in s, ma dal fatto che il metamodello di UML non definiva un metodo standard per rappresentare la definizione dei diagrammi. Il problema stato risolto con la definizione del nuovo metamodello di UML 2.0: un metamodello MOF-compatibile per le informazioni del diagramma fornito come estensione del metamodello UML, permettendo luso del DTD per XMI. LXMI risultante pu essere utilizzato per la conversione di modelli tra i vari tool, senza perdita di informazioni. Questultimo infatti definisce come creare un DTD o uno schema da un metamodello MOF e come questo pu essere applicato ad XMI.
6. TOOL
In conclusione, analizzeremo tre tool di supporto ad UML 2.0, evidenziandone le caratteristiche e le compatibilit con le nuove specifiche.
6.1 Poseidon
Poseidon un tool sviluppato, da Gentleware, interamente in Java, e tale caratteristica lo rende indipendente dalla piattaforma software e hardware su cui installato. Le caratteristiche fondamentali di questo tool sono: Diagrammi di stato conformi UML 2 Supporto per XMI come formato file standard Abilit di esportare diagrammi come GIF, PS, EPS, e SVG UMLdoc personalizzabile per HTML auto-layout dei diagrammi di reverse engineering copia/incolla/taglia di diagrammi e di elementi del modello semantico
Per quanto riguarda i diagrammi, Poseidon supporta UML 2, ma non include i diagrammi di Struttura Composita e di Temporizzazione citati nella sezione 3. Altri diagrammi sono derivabili da altri: I diagrammi di Comunicazione corrispondono ai diagrammi di collaborazione I diagrammi di Interazione Generale corrispondono ai diagrammi delle attivit I diagrammi di package sono automaticamente generati
Poseidon fornisce la possibilit di importare file java nel programma per il reverse engineering. Questo strumento presente in pi versioni: Community: per studenti, principianti e altri utilizzatori non commerciali. Edizione libera. Standard: Mirato agli analisti, quest'edizione rende il lavoro di design e documentazione dei modelli veloce e facile grazie a Java reverse engineering, UMLdoc, e i vari plug-in. Professional: gli Sviluppatori troveranno una suite piena di caratteristiche potenti come l'integrazione con Eclipse, Java roundtrip engineering, e la generazione di codice per molti altri linguaggi. Enterprise: le Squadre di sviluppatori possono usare le funzioni di collaborazione real-time ed il versioning che permettono con l'ingegneria di roundtrip di Java di sviluppare indipendentemente il software in una stanza o attraverso il globo. Embebbed Enterprise: gli sviluppatori di sistemi embedded possono usare le capacit di squadra dell' Enterprise Edition per la generazione di codice c e c++ specifico per tali sistemi.
Figura 51: ScreenShot di Poseidon Altre funzionalit grafiche sono quelle che compaiono al passaggio del mouse, in figura 52 si possono vedere le varie funzioni offerte per una classe.
Linterfaccia grafica di Poseidon comprende 4 finestre (o pannelli) che mostrano differenti aspetti del modello (vedi figura 51). Sono descritti come segue: 1. DiagrammiMostra una zona editabile associata agli elementi scelti nella finestra di navigazione - per esempio, un diagramma delle classi di uno specifico package Centric (navigazione)Mostra tutte le parti di un modello come package organizzati in strutture ad albero gerarchico DettagliMostra pannelli editabili in cui inserire le caratteristiche scelte (ad esempio, dettagli circa gli Stili, Javadoc, vincoli OCL, linguaggio di programmazione scelto, ecc.). BirdviewControlla continuamente se il modello ben formato secondo le regole generali di progetto del software (e se non lo , genera descrizioni sul da farsi nella finestra Dettagli)
Figura 52: Dettaglio Poseidon La versione corrente 3.1 stata realizzata e rilasciata dopo accurate fasi di test e valutazione da parte degli utenti. Sono stati risolti bug del software. Aggiunta di funzionalit. Aggiunte al Roundtrip. Risolti i problemi con Eclipse (con la versione 3.1 possibile lanciare Poseidon direttamente da Eclipse).
2.
3.
4.
Le quattro finestre si possono nascondere fino a visualizzarne 1 sola (utile nel caso lattenzione sia da portare a solo un aspetto dei 4)
o personalizzazione dei menu e delle toolbars - supporto alla trasformazione MDA o supporto allMDA per trasformare elementi semplici di un modello in obiettivi complessi o facilit di scrittura e modifica dei modelli o trasformazioni integrate per DDL, java, C#, EJB, XSD - Documentazione completa e flessibile o Generatore documentazione RTF guidato o Output flessibile con filtri e criteri di selezione - Forward e reverse code engineering o Supporto per C++, Java, C#, VB.Net, Visual Basic, Delphi, PHP - Modellazione di Database - Supporto allXML schema - Reverse engineer binary files da java e .NET o Supporto per importare file JAR e .NET assemblies - Supporto per il testing - Supporto per il project management - Interfaccia per lo scripting EA per scrivere plugin complessi - Plugin per integrare EA con .NET o Eclipse: o Stretta integrazione tra EA e lo strumento di sviluppo o Forward and Reverse Code Engineering o Navigazione semplice ed efficiente tra codice e modello o Build and run projects direttamente da Enterprise Architect o Possibilit di modifica del codice da EA o Opzioni per selezionare quali nellimportazione/esportazione. classi includere Figura 53: ScreenShot Enterprise Architect 5 In commercio esistono 3 diverse versioni di Enterprise Architect: - Corporate Edition: mirata a grandi team di sviluppo; supporta tutte le caratteristiche delle altre due versioni ed in pi la possibilit di connettersi a SQL Server, MySQL, Oracle9i, PostgreSQL, MSDE, Adaptive Server come repository condiviso. Supporta funzioni avanzate di sicurezza per gli utenti e di login. - Professional Edition: adatta a gruppi di lavoro e sviluppatori medio/piccoli. Supporta progetti condivisi con replicazione e file condivisi su rete. Questa versione ha anche un interfaccia ActiveX per interrogare i progetti Ea ed estrarre informazioni in formato XMI. Ha il completo supporto per il codice e per limportazione/esportazione di schemi di DB, ha la possibilit di sincronizzazione del modello con il codice sorgente.
La figura 53 mostra uno screenshot del tool ed evidenza in modo particolare la possibilit di utilizzare strumenti avanzati per lintegrazione del codice con il modello.
- Desktop Edition: questa versione adatta ad un singolo sviluppatore che produce analisi UML e design model. Include tutte le funzioni della versione professional escluso il code engeneering (importazione/esportazione di codice sorgente), linterfaccia ActiveX e la possibilit di condividere un modello tra molti utenti. - disponibile anche una versione di prova scaricabile dal sito http://www.sparxsystems.com.au/. 6.3 Together Designer
Together designer un valido strumento che riunisce in s tutte le caratteristiche di analisi e modellazione necessarie per: eliminare le ambiguit nella definizione dei requisiti software. per generare in modo semplice il codice, rispettando i requisiti stabiliti. Il software offre inoltre la possibilit di estrarre informazioni di design da unapplicazione esistente al fine di garantire una comprensione, visiva e comune, del modello architetturale. CARATTERISTICHE E VANTAGGI:
Soluzioni di modellazione per analisti e sviluppatori Il software stato creato per soddisfare le esigenze modellanti specifiche di analisti e sviluppatori, permettendo loro di collaborare efficacemente per sviluppare applicazioni di alta qualit in meno tempo. Per un team di sviluppo, lavorare a nuove o gi esistenti applicazioni, migliorando la comunicazione circa il disegno ed il codice, riduce significativamente il rischio di guasto di progetto. Modellazione piattaforma indipendente Together offre una flessibilit tale da poter creare design di progetti indipendentemente dalla piattaforma utilizzata. Il supporto per un vasto numero di linguaggi di programmazione disponibile attraverso lintegrazione di ambienti IDE che permette agli sviluppatori di traformare il design creato in un modello di una specifica piattaforma. Supporto degli standard industriali Supporto allMDA per trasformare modelli generici in modelli complessi di specifiche piattaforme: o Unified Modeling Language (UML) o XML Metadata Interchange (XMI) o Object Constraint Language (OCL) Design patterns Fornisce lutilizzo degli standard patterns di design per creare applicazioni di alta qualit e promuovere la riutilizzazione dei modelli consolidati. Ci permette ai team di lavorare pi efficientemente riducendo la revisione del codice dovuta gli errori di design. Velocizzazione delle operazioni o Generazione automatica del documento o Riutilizzazione di modelli e di definizioni componenti o Propagazione veloce dei cambiamenti con refactoring o Tecnologia LiveSource che permette di mantenere i modelli ed il codice sempre sincronizzati TECNOLOGIE: Modellazione UML o Language-neutral UML 1.5 diagramming o Language-neutral UML 2.0 diagramming o UML modeling with LiveSource o Model differencing o Supporto Multilanguage Modellazione Avanzata o OCL o Refactoring attraverso model differencing o Profiles support (color modeling, business process, software development process) o Import ed export dei modelli
o Creazione di diagrammi personalizzati o Web Services, J2EE, visual XML modelling Generazione dei documenti o Creazione di portali HTML con: applet di navigazione, hyperlinked diagrams e Javadoc-style model/code report o Creazione di files da diagrammi, in formati multipli o Template per documentazioni personalizzate, layout dei diagrammi per la stampa Qualit ed efficienza o Design patterns, incluso il supporto Gang of Four pattern e pattern templates personalizzabili o Condivisione di diagrammi e modelli tra progetti con controllo di versione e funzionalit SCM o Supporto delle API VERSIONI: 1. Together Architect: soluzione per la modellazione multilinguaggio, adatta a software architects che progettano e sviluppano architetture informatiche lavorando in stretto contatto con gli stakeholders. 2. Together Designer: soluzione adatta ad analisti ed a coloro che lavorano in un ambiente in cui i modelli visuali possono ottimizzare la definizione dei requisiti di architetture e codice software. 3. Together Developer: soluzione adatta a sviluppatori di software per ridurre significativamente la complessit delle applicazioni attraverso luso, principalmente, di use-case e sequence diagrams. 4. Together Edition for Eclipse: soluzione sviluppata per lintegrazione dello standard UML in Eclipse; permette di progettare nuove applicazioni, o di estrarre informazioni da applicazioni esistenti. Sito di riferimento: http://www.borland.com/together
7. CONCLUSIONI
Questa versione di UML, interamente riscritta, ha lo scopo di esprimere in modo pi analitico e preciso l'insieme dei metodi in grado di rappresentare rigorosamente molti degli aspetti che si incontrano durante le fasi di analisi e specifica dei requisiti di un problema ed anche nel corso dello sviluppo vero e proprio di software. Essa offre appunto una vasta gamma di diagrammi che, unita all'utilizzo del linguaggio di specifica dei vincoli presentato, semplifica il lavoro che precede le fasi di sviluppo del progetto arrivando a produrre documenti di analisi estremamente chiari e non ambigui per tutti i componenti di un eventuale team. Anche se attualmente si decisamente lontani, l'obiettivo evolutivo di UML rimane la possibilit di divenire un linguaggio di programmazione a tutti gli effetti, che sia semplice e performante allo stesso tempo.
8. REFERENCES
1. 2. 3. 4. 5. 6. Martin Fowler, UML Distilled Third Edition. Addison Wesley. UML 2.0 Infrastructure Specification. OMG standard UML 2.0 Superstructure Specification. OMG standard UML 2.0 OCL Specification. OMG standard UML 2.0 Diagram Interchange Specification. OMG standard http://www.klasse.nl/english/uml/