Richiami su:
Mostra la sequenza temporale dei messaggi che gli oggetti si scambiano per portare a termine una funzionalità.
E’ un diagramma di interazione: evidenzia come una funzionalità è realizzata tramite la collaborazione di un insieme di oggetti.
E’ uno dei principali input da fornire ai programmatori per l’implementazione di uno scenario.
E’ utilizzato in analisi e poi ad un maggior livello di dettaglio in design.
La ricezione di un messaggio determina l’attivazione di un metodo
La vita degli oggetti
<<create>>
.Si indicano con una cornice intorno ad una parte del Sequence, per indicare che quella sezione è opzionale o viene ripetuta.
Rappresentazioni:
if -> OPT [condition]
if/else -> ALT [condition], separati da linea orizzontale tratteggiata
cicli -> LOOP [condition o items su cui cicclare]
Se un Sequence è troppo complesso o fa riferimento ad un altro Sequence, si può utilizzare il REF, con:
Durante l’analisi i Sequence Diagram sono usati per individuare:
Disegnare Sequence Diagram è un’attività laboriosa, quindi:
Convenzioni per utilizzare i Sequence Diagrams in fase di Analisi:
Descrive:
Definisce la visione statica del sistema.
È il modello principe di UML, perché definisce gli elementi base del sistema sw da sviluppare.
Un class diagram può essere definito a livello:
1. concettuale (o di Analisi):
2. di specifica implementativa:
Un oggetto ha due principali tipi di proprietà:
Una classe rappresenta un’astrazione di oggetti simili: oggetti che hanno le stesse proprietà: attributi e operazioni.
I termini oggetto e istanza (di classe) sono interscambiabili.
In UML una classe è composta da tre parti:
Un attributo è una proprietà di un oggetto:
Un attributo contiene un valore per ogni istanza:
In UML, per ciascun attributo si può specificare il tipo ed un eventuale valore iniziale:
Un’operazione è un’azione che un oggetto esegue su un altro oggetto e che determina una reazione.
Le operazioni operano sui dati incapsulati dell’oggetto.
Tipi di operazione
Operazioni di base per una classe di oggetti (realizzate con modalità diverse a seconda dei linguaggi).
Per ciascuna operation si può specificare il solo nome o la sua signature, indicando il nome, il tipo, parametri e, in caso di funzione, il tipo ritornato.
Stesse convenzioni dette per gli attributi (Camel Case).
E’ possibile specificare la visibilità di attributi e operazioni.
In UML è possibile specificare tre livelli di visibilità:
E’ possibile definire una “stringa di proprietà” per specificare particolari caratteristiche delle features di una classe. Si indica tra parentesi graffe affianco alla definizione della feature. Per gli attributi, property-string può assumere uno dei seguenti 3 valori:
1- changeable: nessuna limitazione per la modifica del valore dell’attributo (default);
2- addOnly: per attributi con molteplicità maggiore di 1 possono essere aggiunti ulteriori valori, ma una volta creato un valore non può essere né rimosso né modificato;
3- readonly: il valore non può essere modificato.
Per i metodi, property-string può assumere uno dei seguenti valori:
1- isQuery: l’esecuzione dell’operazione lascia lo stato del sistema immutato
2- sequential: i chiamanti devono coordinare l’oggetto dall’esterno in modo che vi sia un sol flusso per volta verso l’oggetto; in presenza di più flussi di controllo, non è garantita la semantica e l’integrità dell’oggetto
3- guarded: la semantica e l’integrità dell’oggetto è garantita in presenza di flussi di controllo multipli dalla sequenzializzazione di tutte le chiamate a tutte le operation guarded dell’oggetto;
4- concurrent: la semantica e l’integrità dell’oggetto è garantita in presenza di flussi di controllo multipli trattando la operation come atomica. Chiamate multiple da flussi di controllo concorrente possono presentarsi contemporaneamente ad un oggetto o ad una sua operation concurrent ed essere eseguite correttamente con corretta semantica
Le ultime tre proprietà riguardano la concorrenza di una operation esono rilevanti solo in presenza di più processi o threadS.
Attributi:
visibilità nome: tipo molteplicità = default {property-string}
Es: – titolo : String [1]
= "Sw Engineering" {ReadOnly}
Metodi:
visibilità nome (elenco parametri): tipo di ritorno{property-string}
Es: + getSaldo(data: Date)
: double {isQuery}
In UML, le interconnessini tra oggetti/classi sono rappresentate attraverso “relazioni”.
UML definisce 3 tipi di relazioni:
Un sistema OO è costituito da classi che collaborano tra loro scambiandosi messaggi.
Quando è in esecuzione un sistema OO è popolato da istanze di classi.
Quando un’istanza di classe passa messaggi a un’altra classe si sottintende l’esistenza di un’associazione tra le due classi.
Indicano relazioni tra classi
Adornments:
La molteplicità indica
Aggregazione: è la relazione “parte di”. Es: un’azienda ha delle persone che vi lavorano. I vari oggetti “persona” continuano ad avere dignità ed esistenza propria anche al di là dell’oggetto azienda.
La distruzione dell’oggetto “azienda” non comporta automaticamente quella delle sue parti. La relazione di aggregazione è un’associazione speciale che aggrega gli oggetti di una classe componente in un unico oggetto della classe. La si puo’ leggere come “è fatto da” in un verso e “è parte di” nell’altro verso.
Composizione: è una relazione più forte, l’oggetto parte appartiene ad un solo tutto e le parti hanno lo stesso ciclo di vita dell’insieme.
All’atto della distruzione dell’oggetto principale si ha la propagazione della distruzione agli oggetti parte. Es: un’azienda ha dei dipendenti che vi lavorano. In tal caso, a differenza dell’esempio precedente, non ha senso che i vari oggetti “dipendente” abbiano vita propria senza un oggetto “azienda” associato. Una relazione di composizione è un’aggregazione forte. Le parti componenti non esistono senza il contenitore. Ciascuna parte componente ha la stessa durata di vita del contenitore. Una parte può appartenere ad un solo tutto per volta.
La relazione di generalizzazione rappresenta una tassonomia delle classi:
Può essere letta come:
L’ereditarietà è un meccanismo di condivisione delle proprietà degli oggetti in una gerarchia di generalizzazione.
Tutte le features di una superclasse sono ereditati dalle sottoclassi:
Anche le relazioni di una superclasse valgono per le sottoclassi.
L’Ereditarietà consente di organizzare concetti in gerarchie:
Generalizzazione: attività di modellazione che identifica concetti astratti da quelli di più basso livello. Es. Stiamo facendo reverse-engineering di un sistema di gestione delle emergenze e analizzando le videate per la gestione di incidenti autostradali e incendi. Osservando concetti comuni, creiamo un concetto astratto Emergenze.
Specializzazione: attività che identifica concetti più specifici da quelli di più ad alto livello. Es. Stiamo costruendo un sistema di gestione delle emergenze e stiamo discutendo le funzionalità con il cliente: il cliente introduce prima il concetto di incidente, quindi descrive tre tipi di incidenti: disastri, emergenze, incidenti a bassa priorità.
Come risultato sia della specializzazione che della generalizzazione abbiamo la specifica di ereditarietà tra concetti.
Relazione semantica in cui un cambiamento sulla classe indipendente può influenzare la classe dipendente.
Un’interfaccia viene modellata allo stesso modo in cui viene modellato il comportamento una classe e rappresenta un insieme di operazioni che una classe offre ad altre classi
Un’interfaccia non ha attributi ma soltanto operazioni (metodi).
In UML per rappresentare le interfacce si utilizza un rettangolo con lo stereotipo «interface» o un piccolo cerchio (notazione lollipop, “a lecca-lecca”).
La relazione tra una classe ed un’interfaccia viene definita realizzazione.
Linea tratteggiata con un triangolo largo aperto costruito sul lato dell’interfaccia o con una linea nella notazione compatta lollipop.
Una classe astratta definisce un comportamento “generico”.
Definisce e può implementare parzialmente il comportamento, ma molto della classe è lasciato indefinito e non implementato.
Dettagli specifici sono demandati alle sottoclassi specializzanti.
Le classi astratte sono indicate ponendo il nome in corsivo.
1. Introduzione all'Ingegneria del Software – La qualità del Software
2. Il Ciclo di vita del Software: i modelli di Processo
3. Concetti e strumenti di base per il Project Management
5. Introduzione ad UML: Gli Use Case Diagrams
6. Il documento dei Requisiti Software
7. UML: I Sequence Diagrams ed i Class Diagrams