T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 1/21 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso di Progettazione del Software Proff. Toni Mancini e Monica Scannapieco Dipartimento di Informatica e Sistemistica Università di Roma La Sapienza E.P.2 Progetti universitari (SOLUZIONE) versione del February 26, 2008
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 2/21 Requisiti: Progetti universitari Si vuole progettare una applicazione che gestisce i progetti di un dipartimento universitario. Del progetto interessano il nome, la durata in anni (un intero) e l anno in cui il progetto è stato finanziato. I progetti di distinguono in progetti nazionali, finanziati da fondi italiani, e progetti europei, finanziati da fondi della Comunità Europea. Dei progetti italiani interessa il nome del fondo specifico di finanziamento (una stringa). Dei progetti europei, interessa un codice identificativo denominato codiceist (un intero). Inoltre i progetti europei sono soggetti a 2 o più review meeting. Dei review meeting interessano un codice identificativo (un intero), la data di inizio, la data di fine ed il luogo in cui il meeting si svolge. Si noti che ogni review meeting è relativo ad un unico progetto europeo. Ai progetti lavorano dei partecipanti, che sono caratterizzati dal nome, dal cognome e dal ruolo all interno del dipartimento (una stringa). Un partecipante può lavorare in diversi progetti (almeno uno), e un progetto ha tipicamente diversi partecipanti (almeno uno). Inoltre, è di interesse conoscere il numero di mesi uomo che ciascun partecipante impegna in ciascun progetto (un intero). Infine, ad un progetto possono essere associati degli eventi di disseminazione, ad esempio workshop, conferenze etc. Degli eventi di disseminazione interessano il nome, una descrizione (una stringa), il luogo e la data in cui l evento si svolge. Un evento è relativo ad un unico progetto.
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 3/21 Requisiti: Progetti universitari (cont.) Il direttore del dipartimento, vuole poter effettuare alcune verifiche sui progetti. In particolare: dato un progetto, calcolare il numero totale dei mesi uomo di tutti i suoi partecipanti che rivestono il ruolo di ordinario ; dato un progetto, se è un progetto europeo, si vuole restituire una stringa che contiene la data del primo review meeting a cui il progetto è stato sottoposto; altrimenti, se il progetto è italiano, la stringa restituita deve essre la stringa nulla. dato un insieme di partecipanti I, si vuole conoscere l insieme dei progetti a cui partecipano tutti gli elementi di I. dato un progetto, si vuole conoscere, tra i suoi partecipanti, quelli che hanno l impegno massimale.
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 4/21 Fase di Analisi
Diagramma degli use case T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 5/21
Diagramma delle classi T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 6/21
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 7/21 Specifica degli use case InizioSpecificaUseCase ControlloProgetti TotaleMesiUomoOrdinari (prj: Progetto): intero 0 pre: nessuna post: Detto prj.impegno l insieme dei link di tipo Impegno in cui prj è coinvolto, sia IO prj.impegno definito come: IO = {l prj.impegno l.partecipante.ruolo = ordinario }. result è pari a Σ l IO (l.mesiuomo). PrimoReviewMeeting pre: nessuna (prj: Progetto): Stringa post: Se prj è di classe Europeo, result è pari alla stringa contenente la valutazione dell espressione min (l.reviewmeeting.datainizio), l prj.relativo dove l operazione di calcolo del minimo fa riferimento all ordinamento totale < tra date determinato dall operazione Data.prima(Data) presente nella specifica del tipo di dato Data (cf. slides fase di Analisi). Altrimenti, result è pari alla stringa vuota.
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 8/21 Specifica degli use case (cont.) FineSpecifica (I: Insieme(Partecipante)): Insieme(Progetto) pre: nessuna ProgettiComuni post: result è pari all insieme \ part I {prj part, prj part.impegno} dove part.impegno è pari all insieme dei link di tipo Impegno in cui part è coinvolto. (prj : Progetto): Insieme(Partecipante) pre: nessuna PartecipantiAdImpegnoMassimale post: result è pari all insieme contenente tutti e soli gli oggetti part di classe Partecipante tali che: Esiste un link di tipo Impegno tra part e prj con valore per l attributo MesiUomo pari ad m; Non esiste un link di tipo Impegno tra prj ed un oggetto part part con valore dell attributo MesiUomo maggiore di m.
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 9/21 Fase di Progetto
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 10/21 Corrispondenza tra tipi UML e tipi Java Tipo UML Tipo Java Note Stringa String intero int intero > 0 int Verifica ammissibilita sul lato server Data Data Disponibile, usiamo vers. senza side-effect Insieme(... ) HashSet<... > Implementa l interf. Set Disponibile
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 11/21 Gerarchie is-a e spec. classi Ristrutturazione gerarchie is-a: la classe Progetto è abstract. Specifica realizzativa delle classi: non ci sono classi con operazioni.
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 12/21 Specifica realizzativa dello use-case SpecificaRealizzativaUseCase ControlloProgetti +TotaleMesiUomoOrdinari(prj: Progetto): int pre: nessuna algoritmo: result = 0; per ogni link l in prj.impegno { se l.partecipante.ruolo = ordinario allora result += l.mesiuomo } ritorna result;
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 13/21 pecifica realizzativa dello use-case (cont.) +PrimoReviewMeeting(prj: Progetto) : String pre: nessuna; algoritmo: se prj non e di classe Europeo, allora ritorna ""; altrimenti: sia L = prj.relativo (ovvero l insieme di link relativo che coinvolgono prj); sia primol = un elemento arbitrario di L; sia result = primol.reviewmeeting; per ogni altro l in L { se l.reviewmeeting.datainizio.prima(result.datainizio) allor result = l.reviewmeeting; } } ritorna result.datainizio convertito a String;
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 14/21 pecifica realizzativa dello use-case (cont.) +ProgettiComuni(P: Set<Partecipante>): Set<Progetto> pre: nessuna algoritmo: sia primop = un elemento arbitrario di P; sia result = insieme vuoto di progetti; per ogni l in primop.impegno { result = result U l.progetto; } // result ora e l insieme di tutti i progetti di primop per ogni altro p in P (diverso da primop) { sia prj_p = insieme vuoto di classe Progetto per ogni l in p.impegno { prj_p = prj_p U l.progetto; } // prj_p e l ins. di tutti i progetti di p per ogni prj in result { se prj non appartiene a prj_p { result = result - { prj } } // tolgo da result i progetti che non impegnano p } } ritorna result;
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 15/21 pecifica realizzativa dello use-case (cont.) +PartecipantiAdImpegnoMassimale(prj : Progetto): Set<Partecipante> pre: nessuna algoritmo: sia result = insieme vuoto di oggetti di classe Partecipante; sia MesiUomoMax = 0; per ogni l in prj.impegno { se l.mesiuomo = MesiUomoMax allora result = result U {l.partecipante}; altrimenti se l.mesiuomo > MesiUomoMax allora { svuota result; result = result U {l.partecipante}; MesiUomoMax = l.mesiuomo; } altrimenti (l.mesiuomo < MesiUomoMax) non fare nulla; FineSpecifica
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 16/21 Gestione propr. locali e glob. d. classi Classe Partecipante Classe Evento Classe Progetto Nome,Cognome: immutabili, noti alla nascita Ruolo: mutabile, noto alla nascita Impegno: mutabile, non noto alla nascita Tipologia,Nome: immutabili, noti alla nascita Luogo,Data: mutabili, noti alla nascita associato: immutabile, noto alla nascita Nome, AnnoFinanziamento: immutabili, noti alla nascita Durata: mutabile, noto alla lascita Impegno: mutabile, non noto alla nascita Classe Nazionale Classe Europeo FondiFinanziamento: mutabile, noto alla nascita CodiceIST: immutabile, noto alla nascita relativo: mutabile, non noto alla nascita
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 17/21 Gest. propr. locali e glob. d. classi (cont.) Classe ReviewMeeting id: immutabile, noto alla nascita DataInizio,Luogo,DataFine: mutabili, noti alla nascita relativo: immutabile, noto alla nascita Associazione Impegno MesiUomo: mutabile, noto alla nascita Nota: E sufficiente esplicitare queste decisioni nel diagramma realizzativo delle classi!
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 18/21 Vincoli sull evoluz. d. propr. mutabili Il valore delle proprietà mutabili può variare arbitrariamente, tranne che per le seguenti: Associazione Relativo: i link non possono essere eliminati.
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 19/21 Progetto dei diagrammi degli stati Non sono stati definiti diagrammi degli stati in fase di Analisi.
T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 20/21 Responsabilità sulle associazioni Dai requisiti, dalla specifica delle operazioni di classi e di use case, e delle molteplicità nel diagramma delle classi emerge che: Associazione Classe Ha resp? Motivo impegno Partecipante SI vincolo 1..*, u.c. op. 3 Progetto SI vincolo 1..*, u.c. op. 1 & 4 associato Evento SI vincolo 1..1 Progetto NO relativo ReviewMeeting SI vincolo 1..1 Europeo SI vincolo 2..*, u.c. op. 2
Diagramma delle classi realizzativo T. Mancini & M. Scannapieco E.P.2 Progetti universitari (SOLUZIONE) February 26, 2008 p. 21/21