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:

  1. raffinare la specifica dei requisiti eliminando inconsistenze, omissioni o ridondanze e produrre un elenco numerato di requisiti il meno ambiguo possibile
  2. 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 Afferenza ci serve per tenere uno storico dei dipartimenti in cui ha lavorato un impiegato
  • Usiamo la classe Partecipazione per i progetti perché un impiegato può lavorare ad un progetto più volte in periodi diversi di tempo (N.B. è fondamentale avere come attributi data_inizio e data_fine, altrimenti l'utilizzo della classe non regge in questo contesto)
  • Usare il tipo Stringa per l'attributo telefono non va bene, ma la soluzione originale lo includeva e preferisco attenermi a quella
impiegato_partecipante
1..1
0..*
progetto_partecipazione
0..*
1..1
dirige
0..1
0..*
impiegato_afferente
1..*
1..1
dipartimento_afferenza
0..*
1..1
Impiegato
nome: Stringa
cognome: Stringa
data_di_nascita: Data
stipendio: Razionale >= 0
Dipartimento
nome: Stringa
telefono: Stringa
Afferenza
data: Data
Progetto
nome: Stringa
budget: Razionale >= 0
Partecipazione
data_inizio: Data
data_fine: Data

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_afferenza come 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 Stringa per l'attributo telefono non va bene, ma la soluzione originale lo includeva e preferisco attenermi a quella
partecipa a
0..*
0..*
dirige
0..1
0..1
afferisce a
0..*
1..1
Impiegato
nome: Stringa
cognome: Stringa
data_di_nascita: Data
stipendio: Razionale >= 0
data_di_afferenza: Data
Dipartimento
nome: Stringa
telefono: Stringa
Progetto
nome: Stringa
budget: Razionale >= 0