Tesina di Ingegneria del Software

Transcript

Tesina di Ingegneria del Software
Università degli studi di Modena e Reggio Emilia
Facoltà di Ingegneria Informatica
Tesina di Ingegneria del Software
(Anno accademico 2000 – 2001)
Gestione Automatizzata di una Biblioteca
Notazione: UML
Macchia
Angelo
(1652)
Indice
I
SRS:Specifiche del Problema
5
II Use Case Diagram
9
II.1 Utenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
II.2 Biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
II.3 Diagramma degli attori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
III Class Diagram
13
III.1 Utenti del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
III.2 Package Diagram del sistema
. . . . . . . . . . . . . . . . . . . . . . . . . 14
III.3 Testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
III.4 Acquisto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
III.5 Ordinazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
III.6 Prestito di un Testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
III.7 Class Diagram riassuntivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
IV Sequence Diagram
19
IV.1 Acquisto di un libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
IV.2 Prestito di un libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
V Activity Diagram
23
V.1 Acquisto di un libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
V.2 Prestito di un libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
VI State Diagram
25
VI.1 Stato del dipendente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4
Indice
VII Data Flow Diagram
27
VII.1 Prestito di un libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
A Breve richiami all’UML
29
A.1 Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
A.2 Class Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
A.2.1 Vincoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
A.2.2 Specializzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
A.2.3 Aggregazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
A.2.4 Qualificatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
A.2.5 Associazione di classe . . . . . . . . . . . . . . . . . . . . . . . . . . 35
A.2.6 Object Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
A.3 Sequence Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
A.4 Activity Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
A.5 Sate Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
A.6 Uno strumento non previsto: DFD . . . . . . . . . . . . . . . . . . . . . . 40
Elenco delle figure
43
Indice
Capitolo I
SRS:Specifiche del Problema
1 INTRODUZIONE
1.1 Scopo si vuole progettare un software in grado di gestire una biblioteca automatizzata che tratta testi che possono essere libri o riviste on–line.
1.2 Validità: il sistema si occupa principalmente di gestire un archivio sugli utenti, sui
testi e sui dipendenti della biblioteca ma non si considera di mantenere la “storia”
dei prestiti.
1.3 Definizioni e abbreviazioni:
Tesserati: sono i soli che possono usufruire dei servizi della biblioteca.
Ricercatori: sono a loro volta tesserati ma hanno la possibilità di ordinare dei testi
attualmente non disponibili.
Direttore che controlla l’operato dei dipendenti della biblioteca e gestisce un fondo
monetario per la manutenzione della biblioteca.
Responsabili degli ordini: si occupano di contattare i fornitori per acquistare i libri
ordinati e di registrare le fatture una volta acquistato un testo.
Responsabili del prestito: dipendenti che si occupano di registrare il prestito, notificare l’avvenuta restituzione di un libro e infine di tesserare un nuovo utente della
biblioteca.
1.4 Referenze: Statuto della Biblioteca
2 DESCRIZIONE GENERALE
2.1 Prospettive: il sistema potrà essere ampliato nelle sue funzionalità aggiungendo delle statistiche sugli argomenti maggiormente richiesti al fine di orientare la direzione
nella cura di derminati settori culturali.
2.2 Funzioni
Tesserati: il sistema permette di conoscere quali libri ha in prestito istante per
istante e permette la tesserazione di nuovi utenti.
6
Dipendenti: il sistema permette la registrazione dei dipendenti e di conoscere il loro
stato attuale di carriera.
Testi: il sistema permette la ricerca di libri e di riviste on–line e di sapere se sono
presenti in biblioteca; in caso contrario dà la possibilità di ordinarli e in seguito di
archiviare la fattura d’acquisto.
Fondo: il sistema permette di conoscere la disponibilità economica della biblioteca
per l’acquisto di nuovi testi.
2.3 Utenti
Direttore: sono richieste conoscenze sulla gestione contabile.
Altri utenti: non sono richieste particolari conoscenze per l’utilizzo del software.
3 SPECIFICA DEI REQUISITI
3.1 Requisiti Funzionali
3.1.1 Requisito #1
3.1.1.1 Introduzione: inserimento di un tesserato.
3.1.1.2 Input: cognome, nome, codice fiscale, recapito e categoria di
studio in caso si registri un ricercatore.
3.1.1.3 Processing: il sistema memorizza i dati del tesserato ed elabora
un codice identificativo della tessera.
3.1.1.4 Output: stampa la nuova tessera.
3.1.2 Requisito #2
3.1.2.1 Introduzione: inserimento di un dipendente.
3.1.2.2 Input: cognome, nome, codice fiscale, stipendio mansione.
3.1.2.3 Processing: il sistema memorizza i dati del dipendente.
3.1.2.4 Output: nessuno.
3.1.3 Requisito #3
3.1.3.1 Introduzione: ricerca di un testo.
3.1.3.2 Input: autore, titolo, argomento, casa editrice.
3.1.3.3 Processing: il sistema ricerca il testo e controlla la sua disponibilità.
3.1.3.4 Output: visualizza la collocazione se è disponibile.
3.1.4 Requisito #4
3.1.4.1 Introduzione: Produce le copie di riviste on–line
3.1.4.2 Input: autore, argomento, titolo.
3.1.4.3 Processing: il sistema ricerca la rivista controllando la sua disponibilità e copia l’articolo della rivista su un su un supporto magnetico
esterno.
Capitolo I
SRS:Specifiche del Problema
7
3.1.4.4 Output: nessuno.
3.1.5 Requisito #5
3.1.5.1 Introduzione: acquisto di riviste on–line
3.1.5.2 Input: codice rivista
3.1.5.3 Processing: il sistema acquisisce on–line la rivista attraverso l’interazione con un software (chiamato “Review”) già fornito da una ditta
specializzata nelle spedizioni di riviste per via telematica.
3.1.5.4 Output: visualizza la spesa.
3.1.6 Requisito #6
3.1.6.1 Introduzione: effettua un prestito
3.1.6.2 Input: codice tesserato,collocazione libro
3.1.6.3 Processing: il sistema controlla che il tesserato sia abilitato al
prestito; infatti ogni tesserato può avere in prestito al massimo 3 libri
nello stesso periodo e ogni prestito può ha durata massima 30 giorni non
rinnovabili (cioè se si vuole tenere ancora il libro, lo si deve consegnare e
poi richiedere un nuovo prestito).
3.1.6.4 Output: in caso di fattibilità del prestito si stampa la ricevuta
del prestito con la data di scadenza.
3.1.7 Requisito #7
3.1.7.1 Introduzione: Assunzione di un nuovo dipendente
3.1.7.2 Input: dati dell’utente
3.1.7.3 Processing: inserisce nuovo dipendente considerato come responsabile dei prestiti (primo livello di carriera)
3.1.7.4 Output: stampa la tessera del dipendente
3.1.8 Requisito #8
3.1.8.1 Introduzione: Avanza di carriera [1] un dipendente
3.1.8.2 Input: codice identificativo del dipendente
3.1.8.3 Processing: computa il nuovo stipendio e registra la promozione
del dipendente.
3.1.8.4 Output: visualizza nuovo stipendio
[1]
il dipendente viene assunto come responsabile dei prestiti, poi può essere promosso a responsabile
degli ordini e infine a direttore
SRS:Specifiche del Problema
Capitolo I
8
Capitolo I
SRS:Specifiche del Problema
Capitolo II
Use Case Diagram
Come prima cosa mi accingerò a descrivere i vari casi in cui il software viene utilizzato.
Questa fase è molto utile per mettere a fuoco gli obiettivi del progetto. Visti che questi
ultimi sono l’interesse primario del committente, è opportuna la sua presenza in questa
fase. A tale scopo l’UML mette a disposizione un tipo di grafico molto intuitivo e che
quindi può essere facilmente compreso dal cliente stesso.
II.1
Utenti
Ho innanzitutto analizzato il sistema dal punto di vista degli utenti della biblioteca e ho
ottenuto il grafico in figura II.1.
Ho messo in evidenza come un ricercatore abbia tutte le possibilità d’uso previsto per un
tesserato normale con in più la possibilità di ordinare un testo ma solo se esso non risulta
disponibile. Proprio per rispettare tale vincolo lo use case Ordina testo disponibile dovrà
avere al suo interno il controllo della disponibiltà (come espresso nel grafico tramite la
relazione di “include”). Un discorso analogo è stato fatto nel considerare i casi “copia
rivista on–line” e “richiede prestito libro”; in quest’ultimo caso, inoltre, è stato prevista
una relazione di extends su “limita prestito” per indicare che, oltre a richiedere il libro,
limitare il prestito stesso.
10
Diagramma degli attori
"include"
Ordina testo
indisponibile
Limita
prestito
"include"
"extends"
Richiede
prestito
libro
"include"
Controlla
disponibilità
Ricerca
testo
Ricercatore
Restituisce
libro
Tesserato
normale
Copia rivista
on-line
disponibile
Figura II.1: Use Case Utenti
II.2
Biblioteca
Successivamente ho analizzato il sistema secondo il punto di vista dei dipendenti della
biblioteca analizzando le possibiltà d’uso per ogni tipo di attore. Ho cosı̀ ottenuto il
seguente diagramma.
Registra
prestito
Aggiorna
fondo
Direttore
Notifica
restituzione
"include"
Acquista
oridine
Registra
nuovo tesserato
Responsabile
prestito
Fornitore
Cataloga
nuovi
testi
Responsabile
oridini
Acquista
ordine
rivista
sw: "Review"
Figura II.2: Use Case Biblioteca
Capitolo II
Use Case Diagram
11
Diagramma degli attori
II.3
Diagramma degli attori
Una volta distinti tutti i possibili utenti del sistema, è utile prima di passare al class
diagram classificarli attraverso il seguente diagramma (che non esiste nell’UML).
Persona
Fornitore
il fornitore
è una azienda
Impiegato
Tesserato
Ricercatore
Direttore
R. ordine
R. prestito
Figura II.3: diagramma degli attori del sistema
Use Case Diagram
Capitolo II
12
Capitolo II
Diagramma degli attori
Use Case Diagram
Capitolo III
Class Diagram
III.1
Utenti del sistema
Una prima modellazione delle classi è quella discende direttamente dal diagramma degli
attori (a pagina 11).
Fornitore
Persona
+azienda: string
+PIVA: long
+telefono: string
+indirizzo: string
+addFornitore()
+delFornitore()
+editFornitore()
+nome: string
+cognome: string
+inidirizzo: string
+telefono: string
+stato: string
+addPersona()
+delPersona()
ruolo
{sovrapposto,incompleto}
Tesserato
-codice_tessera: string
+libri_prestati(): integer
+set_tessera()
+get_tessera(): string
Impiegato
-CoficeFiscale: string
+stipendio: integer
+set_cf()
+get_cf(): string
impiego
{disgiunto,completo,
dimaico}
Ricercatore
Direttore
R_ordine
R_prestito
-categoria: string
+set_categoria()
+get_categoria(): string
Figura III.1: Class Diagram Utenti del Sistema
In questo class diagram verranno mantenute le stesse generalizzazioni introdotte dal
diagramma degli attori ma saranno aggiunte le informazioni sul tipo di generalizzazione.
In particolare voglio mettere in evidenza che la gerarchia “ruolo” è incompleta poichè
una persona può essere istanziata anche se non è un tesserato o un impiegato (per esempio
può essere una persona disoccupata che prima di essere assunta sta facendo un periodo
di prova). Questa gerarchia risulta inoltre sovrapposta per dare maggiore flessibilità al
sistema che potrà quindi prevedere un impiegato a sua volta tesserato.
14
Testo
Un altra cosa che voglio mettere in evidenza è che la gerarchia “impiego” è dinamica, per
prevedere la possibiltà di carriera.
III.2
Package Diagram del sistema
A questo punto è possibile individuare alcuni gruppi di classi (o pacchetti) che interagiscono all’interno del sistema.
prestito
testo
acquisto
utentiSistema
ordinazione
Figura III.2: Package Diagram del sistema
Questo diagramma è stato ottenuto generalizzando un abbozzo [1] di class diagram (approccio bottom–up) con lo scopo di trattare i singoli pacchetti (approccio top–down) rendendoli il più possibile elastici, introducendo eventualmente anche delle classi che non
servono per la risoluzione del problema ma che saranno utili per la riusabilità del lavoro
svolto.
III.3
Testo
Trattando in maniera generica la classe Testo mi sono accorto che essa poteva essere
specializzata in “disponibile” o in “indisponibile”.
Un’altra distinzione su Testo all’interno di questo sistema è tra libri e riviste.
Avevo dunque la scelta di classificare in libri e riviste e poi distinguere ognuno di queste
classi in disponibili o indisponibili, oppure distinguere subito secondo la disponibilità e
poi in libri e riviste.
Ho preferito optare per questa seconda possibilità poiché mi sembrava più agevole per le
interazioni con le classi degli altri pacchetti e ho cosı̀ ottenuto il diagramma seguente.
[1]
questo grafico non viene riportato come inizialmente pensato ma presenterò una sua versione più
raffinata in figura III.7 a pagina 17
Capitolo III
Class Diagram
15
Ordinazione
Testo
+Titolo: string
+addTesto()
+delTesto()
+editTesto()
disponibilità
{completo,disgiunto}
T_disponibile
T_indisponibile
+collocazione: string
+get_collocazione(): string
tipologia
{completo,disgiunto}
tipologia
{completo,disgiunto}
Rivista_Indisponibile
Rivista
Libro
Libro_Indisponibile
+tipo: string
+articolo: 1..maxint
+autore: string
+autori: string
+editore: string
+anno: integer
+Num_copie(): integer
Figura III.3: Class Diagram dei Testi
III.4
Acquisto
In questo diagramma viene trattato il problema dell’acquisto di un libro e della registrazione di una fattura da parte di un Responsabile degli ordini.
1..*
Fornitore
Ordinazione
(from ordinazione)
(from utentiSistema)
1..1
0..*
PIVA
Fattura
+data: date
+numero: integer
+importo: integer
+addFattura()
+modFattura()
+delFattura()
1..1
R_ordine
(from utentiSistema)
0..1
registra
0..*
Figura III.4: Class Diagram di Acquisto
La relazione tra Fattura e Ordinazione è stata messa come composizione per evidenziare che
questo legame è sı̀ opzionale (poiché ci può essere una ordinazione ancora non soddisfatta)
ma una volta instaurato l’oggetto di Ordinazione “muore” con questo legame: cioè non
ha senso tenere traccia dell’ordinazione se si cancella la fattura a cui si riferisce. Questo
non avviene per Fornitore oltretutto perché una ordinazione può appartenere ad una sola
fattura, mentre un fornitore può comparire anche su più fatture.
III.5
Ordinazione
Il diagramma diventa semplicemente il seguente.
Class Diagram
Capitolo III
16
Class Diagram riassuntivo
T_indisponibili
(from testo)
0..*
Ordinazione
+data_ordinazione: date
0..*
Ricercatore
(from utentiSistema)
Figura III.5: Class Diagram Ordinazione
III.6
Prestito di un Testo
Libro
0..*
Tesserato
0..*
(from testo)
(from utentiSistema)
0..*
copia
0..*
Prestito
+data_prestito: date
+get_scadenza(): date
Rivista
(from testo)
{prestito::get_scadenza():date
pre: self.data_prestito>=oggi()
post: result=aggiungiGiorni(self.data_prestito,30)}
Figura III.6: Class Diagram Prestito
In questo grafico ho introdotto anche una espressione OCL per determinare la scadenza
del prestito di un libro. Osservo che per quanto riguarda di riviste on–line si parla di copia
più che di prestito e quindi non ha senso porsi il problema della scadenza e di conseguenza
non ho trovato necessario registrare la data di duplicazione della rivista on–line.
III.7
Class Diagram riassuntivo
Per concludere nella pagina successiva un class diagram mostrerà le interazioni tra le varie
classi dei diversi pacchetti
Capitolo III
Class Diagram
Class Diagram
Libro
(from testo)
0..*
Rivista
copia
0..*
0..*
R_prestito
(from testo)
0..*
modifica
+data_prestito: date
+get_scadenza(): date
Prestito
(from utentiSistema)
Tesserato
0..*
0..*
T_disponibile
+collocazione: string
+get_collocazione()
+data: date
+numero: integer
+importo: integer
+addFattura()
+modFattura()
+delFattura()
PIVA
Fattura
0..*
1..1
(from utentiSistema)
Fornitore
(from testo)
T_indisponibili
Testo
Ordinazione
0..*
0..*
0..1
registra
1..*
Ricercatore
(from utentiSistema)
R_ordine
(from utentiSistema)
1..1
+data_ordinazione: date
0..*
+Titolo: string
+addTesto()
+delTesto()
+editTesto()
Class Diagram riassuntivo
17
Figura III.7: Class Diagram Sistema
Capitolo III
18
Capitolo III
Class Diagram riassuntivo
Class Diagram
Capitolo IV
Sequence Diagram
In questo capitolo, come nei successivi non descriverò tutti i possibili casi d’uso tramite i
sequence diagram ma cercherò di analizzare quei casi che ho ritenuto più significativi per
evidenziare le potenzialità dell’UML.
IV.1
Acquisto di un libro
In questa azione intervengono le figure di Responsabile degli ordini e dei Fornitori secondo
le seguenti modalità
• Il responsabile degli ordini considera una ordinazione ancora insoluta.
• Attraverso un opportuno metodo della classe Ordinazione si chiederà al fornitore il
preventivo dell’ordinazione stessa.
• Si aggiorna il fondo monetario e si registra la fattura
Schematizzando queste interazioni ho ottenuto il diagramma in figura IV.1.
Dall’analisi di questo nuovo diagramma si evince la necessità di aggiungere i seguenti
metodi:
1. +preventivo() per la classe Ordinazione
2. +calcola preventivo() per la classe Fornitore
20
Prestito di un libro
una ordinazione
R_ordini
Fornitore
prezzo:=preventivo()
calcola_preventivo()
fondo
add_spesa(prezzo)
new
fattura
kill
Figura IV.1: Sequence Diagram sull’acquisto di un libro
Infine osservo che è necessario aggiungere la seguente classe:
Fondo
-Totale: integer = 0
+add_spesa(prezzo:integer)
+get_totale(): integer
+add_fondo(fondo:integer): integer
IV.2
Prestito di un libro
Nel chiedere un testo, il tesserato farà indirettamente eseguire un particolare metodo della
classe Testo che controllerà se esso è ancora disponibile (ossia se è in biblioteca). In caso
affermativo verrà istanziata un nuovo oggetto della classe T disponibile che il tesserato
provvederà a inviare al responsabile dei prestiti (tramite un opportuno metodo). Sarà
compito di quest’ultimo controllare che il tesserato sia effettivamente abilitato ad ottenere
il prestito (cioè deve avere un numero massimo di libri in prestito in quello stesso periodo).
Dallo studio di questo caso ho ottenuto il diagramma mostrato nella pagine seguente.
Capitolo IV
Sequence Diagram
Sequence Diagram
new
return
T_disponibile : richiesto
[ok] chiedi_testo(richiesto)
[disponibile] new
Testo : testo chiesto
ok:=chk_disponibile()
Tesserato
nuovo prestito
ok2:=controlla_limite()
[ok2] new
R_prestito
stampa_ricevuta()
Prestito di un libro
21
Figura IV.2: Sequence Diagram del prestito di un libro
Capitolo IV
22
Prestito di un libro
Dall’analisi di questo nuovo diagramma si evince la necessità di aggiungere i seguenti
metodi:
1. +chk disponibile() per la classe Testo
2. -disponibile() per la classe Testo
3. +chiedi testo(richiesto:T disponibile) per la classe R prestito
4. -controlla limite() per la classe R prestito
5. -stampa ricevuta() per la classe Prestito
Capitolo IV
Sequence Diagram
Capitolo V
Activity Diagram
In questo capitolo andrò ad analizzare una serie di stati d’azione tramite lo strumento
UML dell’activity diagram. Infatti per attività si intende un processo reale che avviene
nel mondo reale (come chiedere un preventivo) o l’esecuzione di una routine del software
(come un metodo di una classe).
In particolare si è esaminato il caso l’acquisto di un libro e il prestito di un libro a favore
di un tesserato.
V.1
Acquisto di un libro
Analizzando il caso dell’acquisto di un libro ho ottenuto il seguente diagramma:
Considera
una ordinazione
Chiedi preventivo
[else]
[prezzo<fondo]
Acquista
libro
Aggiorna
fondo
Registra fattura
Figura V.1: Activity Diagram Acquisto di un
libro
24
V.2
Prestito di un libro
Prestito di un libro
Nel caso di un prestito di un libro (analizzato per certi aspetti nel capitolo del Sequence
Diagram) il diagramma seguente:
Controlla disponibilità
[else]
[disponibile]
Controlla limite prestito
[fuori_limite]
[else]
Aggiorna
limite
Registra
prestito
Aggiorna
disponibilità
Stampa
ricevuta
Figura V.2: Activity Diagram Acquisto di un libro
Capitolo V
Activity Diagram
Capitolo VI
State Diagram
VI.1
Stato del dipendente
In questo paragrafo ho analizzato lo stato di carriera di un dipendente osservando che si
vuole avere la possibilità di registrare anche i possibili candidati o persone che sono in un
periodo di prova e che non sono attualmente assunti. Queste categorie di persone vengono
considerate dal sistema come disoccupati .
Quando si viene assunti definitivamente si diventa Responsabile prestito poi, in seguito ad
una promozione, Responsabile ordini e infine Direttore.
Dalla mia analisi risulta il seguente diagramma:
licenziamento
assunzione
R_prestito
[età>65]
Disoccupato
do/timbra cartellino
licenziamento
promozione
R_ordine
[età>65]
entry/aumenta stipendio
do/timbra cartellino
entry/ricevi liquidazione
licenziamento
promozione
Direttore
Pensionato
[età>65]
entry/aumenta stipendio
Figura VI.1: State Diagram sullo stato del dipendente
26
Capitolo VI
Stato del dipendente
State Diagram
Capitolo VII
Data Flow Diagram
Anche se questo strumento non esiste nel UML, risulta comunque utile a evidenziare il
flusso di dati tra i vari processi (che possono ad esempio essere dei metodi di classe).
VII.1
Prestito di un libro
Come molti strumenti anche il DFD può avere vari livelli di dettaglio, quindi in questo
caso analizzerò il prestito di un libro riservandomi di dettagliare in seguito il processo
“Gestore Prestito”.
chiede_testo
Getsore prestito
Tesserato
R_prestito
visualizza_esito
collocazione
ricerca
cerca_testo
Db_Testi
Figura VII.1: Data Flow Diagram di un prestito
Dettagliando il processo “Gestore Prestito” ho ottenuto il diagramma nella figura seguente.
Prestito di un libro
28
collocazione
Tesserato
cerca_testo
chiede_testo
visualizza_esito
chk_disponibile
chiede_testo
disponibile
aggiorna
limite
Db_Testi_in_bibleoteca
visualizza_esito
ricerca
Db_Testi
chiedi_testo
controlla
limite
visualizza
richiesta
R_prestito
aggiorna
disponibilità
Gestore
disponibilità
Data Flow Diagram
Capitolo VII
Gestore
tesserato
Db_Stato_tesserato
Db_Testi_in_bibleoteca
Figura VII.2: Data Flow Diagram dettagliato
Appendice A
Breve richiami all’UML
L’UML è un modello semi informale, orientato ad oggetti ed utile specialmente per sistemi
real time.
A.1
Use Cases
La use case è il modello rudimentale utile nella fase iniziale della progettazione. Più
precisamente è un complesso di funzioni elementari che risponde in maniera completa alle
esigenze dell’utente. Per capire meglio il concetto faccio un esempio:
gestione di un contocorrente:
1o scenario [1] : un cliente chiede informazioni sul contocorrente per cambiare un assegno
2o scenario: l’operatore può registrare l’operazione
3o scenario: l’operatore può respingere l’operazione
In questo caso la use case è “cambio assegno” e rappresenta le operazioni appunto necessarie per cambiare un assegno. Il grafico sul quale viene rappresentato è detto UCD (Use
Case Diagram) dove viene disegnato l’attore a forma di omino e la use case racchiusa in
un ovale. In questo esempio diventa l’UCD semplicemente:
cambio assegno
Banchiere
[1]
si dice scenario una sessione di lavoro di un software che ha un inizio e una fine
30
Use Cases
Questo è un esempio molto banale; tuttavia potremmo avere un UCD più complesso
dove ci sono più relazioni tra una use case ed un’altra come vincoli (disegnati frecce
tratteggiate) o specializzazioni (indicate con una freccia continua). Per esempio potremmo
avere qualcosa di simile:
cambio assegno
"include"
stato del c/c
Cassere
"include"
Gestione prestito
Respons.
prestito
"include"
Valorizzazione
Presto
Gestione prestito agricolo
Direttore
oltre alle relazioni di include possiamo avere anche relazioni di extends come nell’esempio
seguente:
Acq. Prodotto
"extends"
cliente regolare
(pagamento,
spedizione)
extension points:pagamento
spedizione, garanzie
"extends"
(garanzie)
Rapporti banca
tuttavia questo tipo di relazione si usa solo qualche volta, giusto per evidenziare aspetti
rispetto al concetto generale; nell’esempio i metodi che meritano di essere ridefiniti sono
i 3 dell’extension points.
Anche se UML non lo prevede, risulta utile fare un grafico dove si distinguono le categorie
di attori, come ad esempio:
Appendice A
Breve richiami all’UML
31
Class Diagram
supporto tecnico
Politig
(fa richieste di
query standard)
Attore
Interno
Tecnico
utente
Esterno
Infine bisogna osservare che nell’UCD non sono solo gli attori che possono interagire con le
use cases, ma anche altri software (racchiusi in un rettangolo) come si evince dal seguente
esempio:
Use Case 1
Attore
Use Case 2
"actor" sw XK41
Use Case 3
A.2
Class Diagram
È un grafico di tipo statico per la modellazione delle classi [2] . Ogni classe è rappresentata
internamente in una scatola con i suoi attributi (dati) e i suoi metodi, come da esempio:
[2]
una classe è un insieme di oggetti che hanno una struttura, un comportamento e delle relazioni simili
Breve richiami all’UML
Appendice A
32
Class Diagram
Conto corrente
identificatore:0..100
fliale:(A,B,C)
fido:0..1000
apri
stampa saldo
prelievo
deposito
Più precisamente in testa a questa scatola ci sta:
1. Uno stereotipo racchiuso tra virgolette (”) e/o la sua icona
2. Il nome della classe in grassetto e centrato
3. Una lista di proprietà della classe separate da virgole e racchiuse tra parentesi graffe
(es. {abstract}).
Possiamo avere delle associazioni tra classi indicate con una linea se è bidirezionale, con
una freccia se è unidirezionale. Sopra questa linea bisogna specificare la molteplicità della
relazione secondo la seguente notazione:
• lower–bound..upper–bound
• il carattere asterisco (*) come upper–bound sta ad indicare +∞
ad esempio la seguente molteplicità:
Conto corrente
+identificatore: 0..100
+filiale: (A,B,C)
+fido: 0..1000
+apri()
+stampa saldo()
+prelievo()
+deposito()
0..*
Cliente
1..1 +Nome:
+Cognome:
-CF:
+set CF()
+get CF()
sta ad indicare che un contocorrente appartenere ad uno e un solo cliente mentre un cliente
può avere a 0 a +∞ conto correnti.
Davanti ai metodi o agli attributi può esserci uno dei tag seguenti:
+ metodo/attributo pubblico
Appendice A
Breve richiami all’UML
33
Class Diagram
# metodo/attributo protetto [3]
– metodo/attributo privato [4]
se non c’è nessun tag allora si tratta di una implementazione
Osservazione: non abbiamo bisogno, come nell’E/R, di cercare la chiave primaria perché
in realtà ad ogni oggetto è associato un object id (interno al sistema e invisibile) e lo stato
dei suoi attributi. Paritamente non abbiamo problemi di normalizzazione.
A.2.1
Vincoli
Possiamo avere la necessità di esprimere dei vicoli sugli attributi di una classe, allora
convenzionalmente racchiudiamo questi vincoli tra parentesi graffe fuori dalla classe e
colleghiamo il vincolo al suo attributo tramite una linea tratteggiata. Ad esempio:
Persona
{Età=Differenza(Nascita-Oggi)}
+Nome: string
+Cognome: string
+Nascita: date
+Età: 0..200
+Nazionalità: string
+Sesso: (M,F)
+Età Media()
A.2.2
Specializzazione
Le classi possono essere specializzate in sottoclassi attraverso una freccia (con punta a
triangolo vuoto) e una etichetta vicino a essa che comprende il nome della partizione della
superclasse che si sta specializzando e uno o più vincoli separati da una virgola, racchiusi
in parentesi graffe. I vincoli più noti sono:
• sovrapposto: se lo stato della partizione può discendere da più sottoclassi
• disgiunto: se lo stato della partizione discende da una sola sottoclasse
• completo: se le sottoclassi rappresentate coprono tutti i casi e non mi aspetto di
cadere al di fuori di essi
• incompleto: se le sottoclassi rappresentate non coprono tutti i casi
[3]
si ricorda che un metodo è protetto quando è visibile solo dalla classe stessa e dalle classi appartenenti
allo stesso package
[4]
un metodo è privato se è visibile solo all’interno della sua classe
Breve richiami all’UML
Appendice A
34
Class Diagram
Possono essere aggiunti anche altri vincoli come il dinamico dell’esempio seguente che sta
ad indicare che lo stato di appartenenza della partizione ad una sottoclasse può variare
dinamicamente nel tempo:
Disoccupato
Persona
+Nome: string
+Cognome: string
+Sesso:
+Professione:
Professione
{dinamico,incompleto}
Sesso
{disgiunto,completo}
Maschio
A.2.3
Studente
Pensionato
Femmina
Aggregazione
È una relazione del tipo parte di. L’Esempio classico è quella del motore e dell’auto:
un motore è parte dell’auto. L’aggregazione è rappresentata attraverso un rombo vuoto
attaccato ad una freccia che lo collega al componente. Nell’esempio dell’auto e del motore:
Auto
Motore
+Matricola: string
Anche sulle aggregazioni si possono inserire vincoli di cardinalità. Un caso particolare
dell’aggregazione è la composizione: cioè quando il componente può fare parte di un
solo oggetto composto e una volta creato il vincolo, il componente muore con il legame.
Un esempio è quella della finestra grafica che ha come componenti 2 scroll bar, un titolo e
un corpo. È chiaro che si tratta di una composizione perché le scroll bars (come anche il
titolo e il corpo) non possono fare parte di più di una finestra grafica e, quando muore la
finestra si deallocano anche gli oggetti che la compongono. Al dire il vero anche l’esempio
dell’auto e del motore sembrerebbe una composizione. Invece un esempio più chiaro di
aggregazione semplice è il giocatore nella squadra se ammettiamo che un giocatore può
giocare in più squadre.
La composizione si annerendo il rombo.
Appendice A
Breve richiami all’UML
35
Class Diagram
A.2.4
Qualificatori
Il Qualificatore è un attributo (o una tupla di attributi) il cui valore mi identifica una
parte degli oggetti della classe che sono proprio quelli associati all’oggetto [5] dall’altra
parte della associazione.
Consideriamo ad esempio:
Banca
Numero_conto
*
0..1
Persona
ho che un numero di conto mi identifica un insieme di oggetti della classe Banca che
possono essere associati (0..1) ad un oggetto della classe Persona.
Come visto in questo esempio il qualificatore è racchiuso in un quadrato sotto (o a sinistra
oppure a destra) la scatola che contiene la classe.
A.2.5
Associazione di classe
È una associazione che ha le proprietà di una classe (come quella di essere associata
ad un’altra classe). Graficamente si disegna con una linea continua tra due classi e dal
centro di questa linea si fa partire una linea ortogonale tratteggiata che si collega alla
classe descrittrice dell’associazione. Nel seguente esempio Proprietà è una associazione di
classe:
Persona
+Nome: String
+Cognome: String
+Nascita: Date
+init()
Casa
1..n
0..n
+Via: String
+Mq: Integer
+Costruita: Date
+valore()
Proprietà
+Data_inizio: Date
+Data_fine: Date
[5]
Notaio
se parliamo di oggetto al singolare vuol dire che la cardinalità da questa parte dell’associazione è 0..1
o1
Breve richiami all’UML
Appendice A
36
A.2.6
Sequence Diagram
Object Diagram
È un caso particolare del diagramma delle classi e viene usato per esprimere qualche
esempio. Si disegna come una classe solo che il nome viene sottolineato e non vengono
mostrati i metodi, ma solo gli attributi nella forma:
Nome=Valore
A.3
Sequence Diagram
Si parla di interaction diagram come un diagramma dove si mostrano le interazioni
tra gli oggetti. Tale diagramma ha due forme che evidenziano aspetti diversi: sequence
diagram (o diagramma delle sequenze) e collaboration diagram.
Nel sequence diagram si mostrano le interazioni tra oggetti ordinate rispetto al tempo.
Più precisamente gli oggetti che partecipano all’interazione sono disegnati su delle “linee
di vita” e i messaggi che si scambiano sono indicati da delle frecce.
La differenza tra sequence diagram e collaboration diagram è che il primo mostra in
esplicito la sequenza di messaggi ed è dunque meglio per le specifiche real–time o per
scenari complessi. Invece il secondo mostra la parentela tra gli oggetti ed è quindi più
indicato per studiare tutti gli effetti di un dato oggetto in un progetto procedurale.
Qui si parlerà del solo diagramma delle sequenze.
Questo diagramma ha due dimensioni: una verticale dove si rappresenta il tempo (attraverso la linea di vita) ed una orizzontale dove vengono rappresentati gli oggetti. Normalmente il tempo procede dall’alto verso il basso. Vicino alle transazioni possono essere
inserite delle etichette per vari scopi come ad esempio quello di marcare il tempo o quello di
spiegare una interazione. Anche sui messaggi vengono inserite delle etichette descrittive.
Linea di vita
Si rappresenta con una linea tratteggiata: nel suo estremo superiore si disegna l’oggetto e il
suo estremo inferiore può rappresentare eventualmente la sua distruzione; in quest’ultimo
caso, l’estremo inferiore verrà marcato con una “X”. Il tratto di tempo in cui l’oggetto
riceve e/o trasmette messaggi, viene indicato sostituendo al tratteggio un rettangolo il cui
asse coincide con la linea di vita.
Appendice A
Breve richiami all’UML
37
Activity Diagram
Per fare un esempio si veda la figura qua accanto.
inizia()
Conto
Messaggi
I messaggi vengono disegnati con una freccia
la quale viene etichettata con il nome dell’operazione o del segnale a cui si riferisce.
Possiamo infine avere le seguenti categorie di
messaggi:
estrai()
promozione()
1) Asincroni: disegnati con mezza freccia
2) Chiamate: disegnate con una freccia normale
Chuiso()
3) Restituzione: disegnato con una freccia
tratteggiata.
Nella figura che seguirà ci sarà un esempio più significativo: si tratta del diagramma di
più 4 oggetti che rappresentano la gestione di un magazzino; se sul messaggio appare un
qualcosa del tipo:
[cond ] message()
−−−−−−−−−−−−−−−−→
vuol dire che se è verificata la condizione cond allora sarà spedito il messaggio message().
I termini new e return sono delle parole chiave che significano rispettivamente la creazione
di un nuovo oggetto e il ritorno di un messaggio.
order entry
order line
order
product
prepara()
prepara()
ok:=check()
poco:=scarta()
[ok] cala()
[poco] new
[ok] new
[NOT ok] new
return
Breve richiami all’UML
ordinazione
spedizione
messaggio
Appendice A
38
A.4
Activity Diagram
Activity Diagram
È un diagramma che rappresenta una serie di stati di attività. Per attività si intende
sia un processo reale che avviene mondo (come ad esempio scrivere una lettera) e sia
l’esecuzione di una routine di un software (come un metodo di una classe).
Si parte (punto di start) dal flusso iniziale che può eventualmente diramarsi (fork), si
compiono le azioni indicate negli stati e infine si termina (punto di stop). Infine ogni flusso
può diramarsi, cioè seguire una strada al posto di un’altra a seconda che una determinata
condizione sia vera o meno. Per disegnare questo grafico si fa uso dei seguenti simboli:
azione
Per chiarire il tutto si osservi il seguente esempio:
Appendice A
Breve richiami all’UML
39
Sate Diagram
Ricavo oridine
soddisfo
ordine
invio
fattura
[urgente]
Spedizione
regolare
Spedizione
espressa
Pagamento
Chiudo ordine
Concludo dicendo che il diagramma delle attività è facoltativo.
A.5
Sate Diagram
Questo grafico si generalizza quello visto in precedenza, poiché si rappresentano i possibili
stati per i quali un oggetto o una interazione può passare.
Ad esempio un oggetto appartenente alla classe Persona può passare per i seguenti stati
fondamentali:
Breve richiami all’UML
Appendice A
40
Uno strumento non previsto: DFD
matrimonio
celibe
[età>=18] matrimonio
sposato
sentenza
separato
[tempo>=3m]
divorziato
do/pago_alimenti
matrimonio
morte coniuge
vedovo
Come si può notare uno stato può avere diversi livelli di dettaglio. Quello più alto è:
Nome stato
nome evento / azione1
nome evento / azione2
..
.
nome evento / azionen
Gli eventi canonici sono:
• entry: esegui azione quando entry nello stato
• do: esegui azione nel mentre che sei nello stato
• exit: esegui azione prima di uscire dallo stato
Infine è doveroso precisare che tutte le azioni sono atomiche.
A.6
Uno strumento non previsto: DFD
Il Data Flow Diagram lo prevede OMT ma non UML. Tuttavia lo vogliamo trattare
perché è molto utile per scomporre funzionalmente un processo [6] che quindi diventa,
con questo strumento, raffinabile per stadi. Per esempio:
[6]
per processo si intende una attività che assume dei dati in ingresso e produca outputs in uscita
Appendice A
Breve richiami all’UML
41
Uno strumento non previsto: DFD
O1
I1
I2
O1
I1
Processo
P1
P3
d23
d12
O2
O2
I3
P2
I2
d24
I3
P4
Oltre al processo il DFD ha le seguenti primitive:
• Agente esterno (es. l’utente o un programma):
• Deposito dati:
Nome
Nome
Si deve tenere presente che gli agenti esterni e i depositi dati non possono scambiarsi
messaggi tra loro, ma solo con processi. Per esempio:
Dati B
Utente
richiesta se
P1
d12
P2
Utente
Dati A
Dati A
Il DFD è precedente all’approccio ad oggetti ma è utile perché i processi diventeranno i
metodi nel diagramma delle classi.
Breve richiami all’UML
Appendice A
42
Appendice A
Uno strumento non previsto: DFD
Breve richiami all’UML
Elenco delle figure
II.1 Use Case Utenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
II.2 Use Case Biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
II.3 diagramma degli attori del sistema . . . . . . . . . . . . . . . . . . . . . . 11
III.1 Class Diagram Utenti del Sistema . . . . . . . . . . . . . . . . . . . . . . . 13
III.2 Package Diagram del sistema
. . . . . . . . . . . . . . . . . . . . . . . . . 14
III.3 Class Diagram dei Testi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
III.4 Class Diagram di Acquisto . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
III.5 Class Diagram Ordinazione . . . . . . . . . . . . . . . . . . . . . . . . . . 16
III.6 Class Diagram Prestito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
III.7 Class Diagram Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
IV.1 Sequence Diagram sull’acquisto di un libro . . . . . . . . . . . . . . . . . . 20
IV.2 Sequence Diagram del prestito di un libro
. . . . . . . . . . . . . . . . . . 21
V.1 Activity Diagram Acquisto di un libro . . . . . . . . . . . . . . . . . . . . 23
V.2 Activity Diagram Acquisto di un libro . . . . . . . . . . . . . . . . . . . . 24
VI.1 State Diagram sullo stato del dipendente . . . . . . . . . . . . . . . . . . . 25
VII.1Data Flow Diagram di un prestito . . . . . . . . . . . . . . . . . . . . . . . 27
VII.2Data Flow Diagram dettagliato . . . . . . . . . . . . . . . . . . . . . . . . 28
44
Elenco delle figure
Elenco delle figure
Bibliografia
§ M. Flower, K. Scott:
“UML distilled”
1997 – Addison Wesley
§ Rational Software Corporation:
“UML Notation Guide”
1997 – http://www.rational.com/uml