Azienda 1
Si vuole sviluppare un sistema informativo per la gestione dei dati sul personale di una certa azienda costituita da diversi dipartimenti. Durante la fase di raccolta dei requisiti è stata prodotta la specifica dei requisiti mostrata di seguito. Si chiede di iniziare la fase di Analisi dei requisiti ed in particolare di:
- raffinare la specifica dei requisiti eliminando inconsistenze, omissioni o ridondanze e produrre un elenco numerato di requisiti il meno ambiguo possibile
- produrre un diagramma UML delle classi concettuale che modelli i dati di interesse, utilizzando solo i costrutti di
classe,associazione,attributo
Requisiti
I dati di interesse per il sistema sono impiegati, dipartimenti, direttori dei dipartimenti e progetti aziendali.
-
Di ogni impiegato interessa conoscere il nome, il cognome, la data di nascita e lo stipendio attuale, il dipartimento al quale afferisce (esattamente uno, con la rispettiva data di afferenza).
-
Di ogni dipartimento interessa conoscere il nome, il numero di telefono del centralino
- Di ogni dipartimento interessa conoscere inoltre il direttore, che è uno degli impiegati dell’azienda.
-
Il sistema deve permettere di rappresentare i progetti aziendali nei quali sono coinvolti i diversi impiegati.
-
Di ogni progetto interessa il nome ed il budget.
-
Ogni impiegato può partecipare ad un numero qualsiasi di progetti.
UML (opzione 1)
Osservazioni
Questa è l'opzione più "complessa"
- Un dipartimento non deve avere per forza un dirigente assegnato (quindi
0..1) - Un impiegato può dirigere più dipartimenti (non afferisce al dipartimento che dirige, ci potrebbe essere un dipartimento apposta per i dirigenti, quindi
0..*) - La classe
Afferenzaci serve per tenere uno storico dei dipartimenti in cui ha lavorato un impiegato - Usiamo la classe
Partecipazioneper i progetti perché un impiegato può lavorare ad un progetto più volte in periodi diversi di tempo (N.B. è fondamentale avere come attributidata_inizioedata_fine, altrimenti l'utilizzo della classe non regge in questo contesto) - Usare il tipo
Stringaper l'attributotelefononon va bene, ma la soluzione originale lo includeva e preferisco attenermi a quella
classDiagram
class Impiegato {
nome: Stringa
cognome: Stringa
data_di_nascita: Data
stipendio: Razionale >= 0
}
class Impiegato["fa:fa-users Impiegato"]
class Dipartimento {
nome: Stringa
telefono: Stringa
}
class Dipartimento["fa:fa-building Dipartimento"]
class Afferenza {
data: Data
}
class Progetto {
nome: Stringa
budget: Razionale >= 0
}
class Progetto["fa:fa-wrench Progetto"]
class Partecipazione {
data_inizio: Data
data_fine: Data
}
Impiegato "1..1" -- "0..*" Partecipazione : impiegato_partecipante
Partecipazione "0..*" -- "1..1" Progetto : progetto_partecipazione
Impiegato "0..1" -- "0..*" Dipartimento : dirige
Afferenza "1..*" -- "1..1" Impiegato : impiegato_afferente
Afferenza "0..*" -- "1..1" Dipartimento : dipartimento_afferenza
UML (opzione 2)
Osservazioni
Questa è l'opzione più "minimale"
- Un dipartimento non deve avere per forza un dirigente assegnato (quindi
0..1) - Un impiegato può dirigere al più un dipartimento
- L'impiegato afferisce ad un solo dipartimento, quindi possiamo mettere la
data_di_afferenzacome attributo dell'impiegato - Un dipendente o partecipa ad un determinato progetto o non vi partecipa, la relazione è binaria e non serve una classe
- Usare il tipo
Stringaper l'attributotelefononon va bene, ma la soluzione originale lo includeva e preferisco attenermi a quella
classDiagram
class Impiegato {
nome: Stringa
cognome: Stringa
data_di_nascita: Data
stipendio: Razionale >= 0
data_di_afferenza: Data
}
class Impiegato["fa:fa-users Impiegato"]
class Dipartimento {
nome: Stringa
telefono: Stringa
}
class Dipartimento["fa:fa-building Dipartimento"]
class Progetto {
nome: Stringa
budget: Razionale >= 0
}
class Progetto["fa:fa-wrench Progetto"]
Impiegato "0..*" -- "0..*" Progetto : partecipa a
Impiegato "0..1" -- "0..1" Dipartimento : dirige
Impiegato "0..*" -- "1..1" Dipartimento : afferisce a