Evoluzione di UML Andrea Bencini
Scopo della Tesi Questa tesi ha lo scopo di approfondire i cambiamenti che sono stati fatti durante gli anni su UML. La tesi si propone di essere un utile strumento per chi, conoscitore di una versione di UML, volesse conoscere ed apprendere le più importanti novità introdotte nelle versioni successive. La particolare attenzione riservata ai cambiamenti grafici permette all’osservatore di un modello di risalire velocemente alla versione di UML utilizzata per lo sviluppo dello stesso e di conoscerne quindi in anticipo le eventuali limitazioni espressive.
Origine di UML I primi linguaggi di modellazione orientati agli oggetti cominciarono ad apparire tra la metà degli anni 70 e la fine degli anni 80 con vari esperimenti che adottavano approcci differenti all’analisi e alla progettazione Object-Oriented. Tra il 1989 e il 1994 il numero di linguaggi di modellazione passò da 10 a più di 50, ma nessuno di questi riusciva a soddisfare pienamente le esigenze degli utenti. I metodi più diffusi erano comunque il metodo Booch’93 di Booch, il metodo OMT-2 (Object Modelling Technique) di Rumbaugh e il metodo OOSE (Object- Oriented Software Engineering) di Jacobson.
UML 1.1
UML 1.2 La versione 1.2 venne resa disponibile dalla OMG nel Luglio del Apportò modifiche editoriali, tese a migliorare l’organizzazione del documento e a eliminare errori grammaticali e di stampa, ma non sostituì la versione 1.1 che rimase lo standard ufficiale di UML. La versione 1.2 non è stata ufficialmente approvata, poiché non apporta cambiamenti di alcun tipo
UML 1.3 Dopo l’adozione di UML 1.1 nel novembre 1997, la OMG istituì una “Revisions Task Force (RTF)” per valutare i commenti del pubblico e provvedere a una revisione della specifica tesa all’eliminazione di bug, incoerenze, ambiguità, ed omissioni. I membri della RTF emisero diversi rapporti preliminari, che terminarono nel 1999 con la proposta di una nova specifica: UML 1.3. La versione 1.3 di UML va considerata come una versione interna e non standard ufficiale della OMG. Aggiunti gli stati di sync per la sincronizzazione di attività concorrenti Ridefinite le relazioni dei casi d’uso: generalizzazione, include ed estende Viene aggiunta la specifica di XMI 1.0. Vengono definiti gli stati di sottoattività Nei diagrammi di collaborazione e di sequenza, vengono distinte due forme: la forma descrittore e la forma istanza
UML 1.4 Rilasciato nel 2001 Nei diagrammi di collaborazione è ora possibile contenere anche vincoli Diagrammi di Sequenza spezzati Cambia leggermente la notazione grafica dei componenti Definiti anche gli artefatti per specificare i componenti fisici (file sorgenti, file eseguibili, e script) che implementano i componenti. Aggiunta la visibilità di package (simbolo “ ~ ”) adatta ai modelli riguardanti l’implementazione Java. Aggiunta la proprietà di ordinamento per gli attributi (“ordinati” o “non ordinati” ).
UML 1.5 Il principale cambiamento nella specifica della versione 1.5 è stata l’aggiunta della semantica delle Azioni. Un passo necessario per rendere UML un linguaggio di programmazione in attesa di UML 2.0. Una azione primitiva è una azione che non può essere decomposta in altre azioni. Le azioni primitive comprendono funzioni matematiche, azioni che lavorano su oggetti in memoria, e azioni riguardanti l'interazione tra oggetti, come lo scambio di messaggi. Una procedura è gruppo di azioni con un input e un output. Per adattarsi alle elaborazioni concorrenti, la semantica di UML definisce le azioni come elementi eseguiti tutti in maniera concorrente, se non altrimenti specificato da un flusso di dati o da flusso di controllo.
UML 1.5: Azioni Gruppi di Azioni: raggruppano azioni in unità più larghe per essere usate in procedure, condizioni, e cicli Azioni Condizionali: prevedono l’esecuzione condizionata di sotto-azioni a seconda di un risultato di un test eseguito a tempo di esecuzione Azioni Cicliche: permettono l’esecuzione ripetuta di una sotto-azione in base al risultato di un test eseguito ripetutamente a tempo di esecuzione. L’output di una iterazione è usato come input per la successiva iterazione
UML 1.5: Azioni Azioni di lettura e azioni di scrittura. Le prime prendono valori mentre le seconde modificano valori o creano e distruggono oggetti e collegamenti. Azioni computazionali trasformano un insieme di valori di input per produrre un insieme di valori di output Azione di Mappatura: applica una sottoazione in parallelo ad ogni elemento di una collezione di dati, restituendo un output che è una collezione di dati della stessa dimensione e forma.
UML 1.5: Azioni Azione Filtro: sceglie un sottoinsieme degli elementi della collezione di ingresso e restituisce una nuova collezione della stessa forma, in base al risultato “booleano” di una sottoazione applicata ad ogni elemento. Azione Iterata: applica una sottoazione in maniera ripetuta ad ogni elemento della collezione, accumulando i risultati in variabili del ciclo "loop". Azione di Riduzione: applica ripetutamente una sottoazione a coppie di elementi adiacenti sostituendoli col risultato della operazione. L'azione continua fino a che il risultato finale non è composto da un singolo elemento.
If factor = 2 then…
UML 2.0 UML 2.0 rappresenta la più grande novità da quando l’UML è stato originariamente approvato. La specifica ufficiale dell’ Unified Modeling Language versione 2.0 è attesa per il 30 Aprile Non si tratta di una semplice correzione e evoluzione delle specifiche precedenti, ma di una vera e propria nuova specifica con novità importanti in ogni sua parte.
UML 2.0: Le Request For Proposals Per la definizione di UML 2.0, la OMG ha creato quattro Request For Proposals (RFP) complementari: UML 2.0 Infrastructure UML 2.0 Superstructure UML 2.0 Object Constraint Language UML 2.0 Diagram Interchange. Queste quattro parti, dovranno essere completamente adeguate per formare un solo standard UML 2.0.
UML 2.0: Novità Potenziata l’estensione nei casi d’uso Potenziati i diagrammi di classe Nuova visualizzazione delle interfacce Definiti i Gruppi di Generalizzazioni Definite Corsie gerarchiche e a più dimensioni Aggiunti i Frammenti Combinati nei Diagrammi di Sequenza Nuovi vincoli temporali nei Diagrammi di Sequenza Aggiunti i Diagrammi Temporali Diagrammi di Collaborazione vengono rinominati in Diagrammi di Comunicazione Nuova grafica per i Componenti Le azioni vengono integrate nei diagrammi di attività Nuova gestione delle Eccezioni Aggiunte le Regioni di Espansione per raggruppare le azioni
UML 2.0: Estensione nei Casi d’uso Il caso d’uso “Perform ATM Transaction” ha un punto di estensione Selection”. Questo caso d’uso è esteso attraverso questo punto di estensione dal caso d’uso “On- Line Help” ogni volta che l’esecuzione di “Perform ATM Transaction” si trova nella posizione indicata dal punto di estensione “Selection” e l’utente seleziona il tasto HELP
Azioni nei Diagrammi di Attività UML 2.0 effettua una fusione tra i diagrammi di attività e le azioni, e le attività vengono separate dalla semantica dei diagrammi di stato. Le azioni prendono il posto degli stati di azione e degli stati di sottoattività. Le attività sono una struttura di ordine superiore composte da una sequenza di azioni L’attività gestisce la coordinazione della esecuzione delle azioni, utilizzando metodi di controllo di flusso e dei dati. Le azioni possono ora visualizzare le pre e le post- condizioni come note attaccate alla azione. Una pre- condizione a una azione indica cosa deve essere verificato prima che inizi l’azione. Una post-condizione è una restrizione che diventa vera dopo che l’azione è stata completata.
UML 2.0: Azioni
UML 2.0: Le eccezioni
UML 2.0: Regione di Espansione
Il modo parallelo permette a una regione di espansione di eseguire le interazioni in modo indipendente, sovrapponendole nel tempo. Se la collezione degli elementi in ingresso è ordinata, gli elementi vengono fatti eseguire alla regione in base a questo ordine. Nel modo iterativo, l’esecuzione della regione avviene in modo sequenziale, ogni esecuzione comincia solo dopo che la precedente è terminata. Se la collezione degli elementi in ingresso è ordinata, gli elementi vengono fatti eseguire alla regione in base a questo ordine. Nel modo stream, tutti gli elementi di ingresso entrano nella regione di espansione nello stesso momento come un flusso. La regione viene quindi eseguita una sola volta; gli elementi, se ordinati, mantengono il loro ordine nella esecuzione.
UML 2.0: Gruppi di Generalizzazione
La classe “persona” può essere specializzata o da “persona di sesso femminile”, o da “persona di sesso maschile”. Questo gruppo di generalizzazione è “{completo, disgiunto}” visto che una persona è necessariamente o uomo o donna. Inoltre una persona può essere impiegata. In questo caso il vincolo è {incompleto, disgiunto} poiché esistono anche persone che non rientrano nella categoria di impiegati. E’ possibile raggruppare gli oggetti per categorie o per classi, permettendo importanti e potenti tecniche di organizzazione.
UML 2.0: Corsie
UML 2.0: Interfacce
UML 2.0: Componenti
UML 2.0: Diagrammi di Comunicazione
UML 2.0: Tempo nei Diagrammi di Sequenza L’utente “:User” manda un messaggio Code e la cui durata viene misurata e memorizzata in “d”. “:ACSystem” manderà indietro due messaggi all’utente: CardOut è vincolato a durare tra 0 e 13 unità di tempo. In aggiunta, l’intervallo tra l’invio di Code e la ricezione di OK è vincolato a durare tra “d” e “3*d”. Si può notare anche l’osservazione del tempo “t” all’invio del segnale di OK e di come questo sia usato per vincolare il tempo di ricezione di CardOut.
UML 2.0: Frammenti Combinati Uno dei cambiamenti più evidenti nei diagrammi di sequenza, è l’aggiunta dei Frammenti Combinati per gestire comportamenti iterativi, condizionali. Questo permette di esprimere algoritmi abbastanza completi nei diagrammi di sequenza. Sono stati quindi eliminati i vecchi sistemi per marcare le iterazioni. Un frammento combinato è composto da un operatore di iterazione e da un corrispondente operando di iterazione. La semantica varia a seconda dell’operatore di iterazione
UML 2.0: Frammenti Combinati
UML 2.0: Diagrammi Temporali
Conclusioni L’UML si muove rapidamente per fornire un ambiente di modellazione visuale capace di esprimere le attuali tecnologie software. L’evoluzione di UML è stata sempre guidata dalla comunità degli utenti utilizzatori. Le modifiche di UML 2.0 apportano un grande cambiamento alla semantica e alla visualizzazione grafica dei modelli. UML 2.0 acquisisce una maggiore capacità di modellare graficamente gli algoritmi dei linguaggi di programmazione. Vengono inseriti anche nuovi e più potenti forme per il riuso dei modelli. La strada seguita permette comunque ad UML di adattarsi direttamente alle necessità dell’industria e di rimanere il linguaggio di modellazione visuale standard anche per i prossimi anni.