Sapienza - Università di Roma Facoltà di Ingegneria dell Informazione Corso di Laurea in Ingegneria Informatica

Documenti analoghi
SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Progettazione del Software

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Il PROCESSO UNIFICATO

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Università di Roma La Sapienza A.A Facoltà di Ingegneria Sede di Latina

Corso di Informatica 1 Esercitazione n. 4

Algoritmi e soluzione di problemi

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmi e Oggetti Software

Principi di Progettazione del Software a.a Introduzione al corso Prof. Luca Mainetti Università del Salento

Principi di Progettazione del Software a.a " Introduzione al corso! Prof. Luca Mainetti! Università del Salento!

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Progetto E versione del 12 marzo 2007

Indice. Prefazione. 3 Oggetti e Java 53

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi

SOMMARIO DIAGRAMMI DI ATTIVITÀ INGEGNERIA DEL SOFTWARE. Introduzione. Concetti base. Introduzione. Concetti base

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

La programmazione ad oggetti: chiamate di metodi. Overloading. This

testo Saveris Web Access Software Istruzioni per l'uso

24 - Possibili approfondimenti

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

SOMMARIO DIAGRAMMI DI ATTIVITÀ

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

SOMMARIO. DIAGRAMMI DI ATTIVITÀ INGEGNERIA DEL SOFTWARE Università degli Studi di Padova. Introduzione. Concetti base.

Linguaggi di programmazione

Progetto PI , passo A.2 versione del 10 aprile 2007

Laboratorio di Progettazione di Sistemi Software UML per Design Patterns e Refactoring

Analisi e diagrammi di struttura: esercizi

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Rappresentazione con i diagrammi di flusso (Flow - chart)

Il concetto di calcolatore e di algoritmo

Laboratorio di Matematica e Informatica 1

Programmazione Orientata agli Oggetti in Linguaggio Java

Microsoft Visio 2002 UML Sergio Colosio

Programmi e Oggetti Software

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Basi di Dati Ingegneria Informatica e delle Telecomunicazioni

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

ACCESSO AI SERVIZI RISERVATI DI RTRT

UML I diagrammi implementativi

Linguaggi Regolari e Linguaggi Liberi

Progetto PI , passo A.1 versione del 10 aprile 2007

Laboratorio di Reti, Corsi A e B. Text-Twist. Progetto di Fine Corso A.A. 2016/17

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Guida SWI-Prolog. Installazione. SWI-Prolog può essere scaricato dal sito web:

Tecniche e strumenti per la validazione di codice Java: un esempio applicativo

MODELLO e RAPPRESENTAZIONE

Progetto sito web Gigli Elisa

14 - Metodi e Costruttori

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Problemi, algoritmi e oggetti

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Corso di Laurea in Scienze Chimiche Per capire e migliorare il mondo intorno a noi

PROGRAMMA EFFETTIVAMENTE SVOLTO

Laurea triennale - Comunicazione&DAMS - UNICAL. Dr. Marco Manna 1

Guida all iscrizione on-line dei tornei di R3 Sport

Esercizio 1: soluzione

La nostra finestra dovrebbe essere come mostra la figura: Diamo innanzitutto un occhiata alle componenti principali di input/output:

Progetto PI , passo A.1 versione del 6 febbraio 2007

Corso di Fondamenti di Informatica I

Esempio: L EURO-CONVERTITORE (1) Scopo

Traccia delle soluzioni. Si consideri il seguente enunciato: Spett Ditta,

Tesi di Laurea Triennale in Ingegneria Informatica REALIZZAZIONE DI UN APPLICATIVO PER LA GESTIONE DI FOGLI DI LAVORO INTEGRATO IN OUTLOOK 2010

Sintesi delle differenze

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Espressioni logiche. Espressioni logiche. Operatori logici. Operatori logici. Operatori logici. Espressioni Logiche e Istruzione di Test

Algoritmi e Programmi

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

5 - Istruzioni condizionali

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Definizione di classi

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Come scaricare sul Desktop i dati necessari allo svolgimento di un esercitazione link Esegui l applicazione dalla posizione corrente

Guida introduttiva. Introduzione a Impress Presentazioni con OpenOffice.org

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 2/07/2012 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Sistemi Software UML per Design Patterns e Refactoring

Laboratorio di Informatica

Introduzione al Calcolo Scientifico

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazione 15. Il problema dello Sleeping Barber

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Studente (Cognome Nome):

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

CORSO DI PROGRAMMAZIONE

NERDISMO. Grande gioco: gioco a squadre, tutti contro tutti. Possibilmente pari per le squadre.

Gestione di files Motivazioni

Tema di Progetto n 1

La simulazione è l'imitazione di un processo o di un sistema reale per un

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Transcript:

Sapienza - Università di Roma Facoltà di Ingegneria dell Informazione Corso di Laurea in Ingegneria Informatica Esercitazioni di Progettazione del Software - A.A. 2009/2010 Prova al calcolatore del 18 giugno 2010 Requisiti L applicazione da realizzare riguarda la simulazione di una gara ciclistica. Ogni gara è caratterizzata dal nome (stringa) e dalla distanza partenza-traguardo, misurata in chilometri (reale). Ad una gara partecipano almeno due ciclisti, ciascuno caratterizzato dal proprio nome. Un ciclista può partecipare ad al più una gara per volta. Per ogni gara e per ciascun ciclista che vi partecipa, è d interesse conoscere quanti chilometri il ciclista ha percorso nella gara. Tra i ciclisti che partecipano ad una gara, alcuni sono vincitori (è considerato anche il pari merito), stabiliti al termine della gara in base al numero di chilometri percorsi. Ogni gara ha almeno un vincitore. In Figura 1(a) è mostrato il diagramma delle classi corrispondente al dominio. La gara si svolge come segue. I ciclisti sono inizialmente nello stato pronto, in attesa del segnale di partenza (evento start). Quando ricevono il segnale, entrano nello stato ingara ed iniziano a correre (evento corri). Durante la gara, finché nessun partecipante ha raggiunto o superato il traguardo (condizione!arrivato), ciascun ciclista si comporta come segue: quando è nello stato ingara o int esta, se è tra i partecipanti che hanno percorso il maggior numero di chilometri (condizione primo) possono essercene diversi a pari merito allora entra (o rimane) nello stato int esta; quando è nello stato ingara o int esta, se non è tra i partecipanti che hanno percorso il maggior numero di chilometri (condizione!primo) allora entra (o rimane) nello stato ingara; da entrambi gli stati ingara e int esta, quando qualcuno (incluso egli stesso) raggiunge o supera il traguardo (condizione arrivato), entra nello stato f inito. I ciclisti, ad ogni passo, avanzano con un ritmo che dipende dallo stato in cui si trovano: nello stato ingara, un ciclista avanza di una distanza d = l/100 (1 + r), dove l è la distanza partenzatraguardo della gara, ed r un valore reale casuale nell intervallo [0, 1); 1 nello stato int esta, un ciclista avanza di una distanza d = l/100 (1.1 r), con l ed r definiti come al punto precedente (quando è in testa, il ciclista procede più lentamente perché non può seguire la scia del ciclista che lo precede). In Figura 1(b) è mostrato il diagramma degli stati e delle transizioni relativo alla classe Ciclista. L applicazione deve: 1 Si ricorda che il metodo statico random() della classe Math resituisce un double scelto casualmente nell intervallo [0, 1). 1

(a) Diagramma UML delle classi (b) Diagramma UML degli stati e delle transizioni della classe Ciclista (c) Diagramma UML delle attività

creare una nuova gara a partire da dati (nome e distanza partenza-traguardo) forniti in input; creare i ciclisti (almeno 2) ed iscriverli alla gara, a partire da dati (nome) forniti in input; simulare la gara, visualizzandone l evoluzione mediante opportuna interfaccia grafica; al termine della simulazione, aggiornare i vincitori della gara e stamparne i nomi. In Figura 1(c) è riportato il diagramma delle attività corrispondente. La prova consiste nel completare o modificare il codice fornito insieme al testo, in modo da soddisfare i requisiti sopra riportati. Seguendo le indicazioni riportate nei commenti al codice, si chiede di intervenire sulle seguenti classi: ListenerFinestraPrincipale (package gui): dell attività principale. alla pressione del pulsante deve corrispondere l avvio Gara (package ciclisti) CiclistaFired (package ciclisti.ciclista) AttivitaPrincipale (package attivita composte) IscriviCiclista (package attivita atomiche) ManagerPartecipa (package ciclisti.partecipa) Tempo a disposizione: 3 ore. Gli elaborati non accettati dal compilatore saranno considerati insufficienti. Per facilitare la comprensione del codice e lo svolgimento della prova, nel seguito sono riportati i documenti di specifica risultanti dalle fasi di analisi e di progetto. Analisi Specifica del diagramma degli stati e delle transizioni della classe Ciclista InizioSpecificaStatiClasse Ciclista Stato: {pronto, ingara, intesta, finito} Variabili di stato ausiliarie: Stato iniziale: stato = pronto InizioSpecificaTransizioniClasse Ciclista Transizione: pronto -> ingara start/corri{dest:this} Evento: start Condizione: -- nuovoevento = corri{mitt=this, dest=this} and l.kmp ercorsi = 0 Transizione: ingara -> ingara corri[!primo!arrivato]/corri{dest:this} Condizione: ([!primo!arrivato])

Sia l P artecipa l.ciclista = this. l P artecipa (l.gara = l.gara) l.kmp ercorsi < l.gara.distanza --!arrivato l P artecipa l.ciclista this l.gara = l.gara l.kmp ercorsi < l.kmp ercorsi --!primo. nuovoevento = corri{mitt=this, dest=this} and l / P artecipa and l P artecipa l.ciclista = l.ciclista l.gara = l.gara l.kmp ercorsi = l.kmp ercorsi + (l.gara.distanza/100) (1 + rand([0, 1))) Transizione: intesta -> intesta corri[primo!arrivato]/corri{dest:this} Condizione: ([primo!arrivato]) Sia l P artecipa l.ciclista = this. l P artecipa (l.gara = l.gara) l.kmp ercorsi < l.gara.distanza --!arrivato l P artecipa (l.ciclista this l.gara = l.gara) l.kmp ercorsi l.kmp ercorsi -- primo nuovoevento = corri{mitt=this, dest=this} and l / P artecipa and l P artecipa l.ciclista = l.ciclista l.gara = l.gara l.kmp ercorsi = l.kmp ercorsi + (l.gara.distanza/100) (1.1 rand([0, 1))) Transizione: ingara -> intesta corri[primo!arrivato]/corri{dest:this} Condizione: ([primo!arrivato]) -- Analoga alla condizione di intesta -> intesta -- Analoga all azione di ingara -> ingara Transizione: intesta -> ingara corri[!primo!arrivato]/corri{dest:this} Condizione: ([!primo!arrivato]) -- Analoga alla condizione di ingara -> ingara -- Analoga all azione di intesta -> intesta Transizione: ingara -> finito, intesta -> finito corri[arrivato] Condizione: ([arrivato]) Sia l P artecipa l.ciclista = this. l P artecipa (l.gara = l.gara) l.kmp ercorsi l.gara.distanza -- arrivato -- Attività di I/O InizioSpecificaAttivitàAtomica InserisciDatiGara InserisciDatiGara ():(Gara) Legge nome e distanza partenza-traguardo di una gara, forniti in input dall utente. result è la gara creata a partire dai dati inseriti. InizioSpecificaAttivitàAtomica InserisciDatiCiclista InserisciDatiCiclista ():(Ciclista)

Legge il nome del ciclista, fornito in input dall utente. result è il ciclista creato a partire dai dati inseriti. InizioSpecificaAttivitàAtomica ChiediSeAltroCiclista ChiediSeAltroCiclista ():(Bool) Chiede all utente se vuole iscrivere un altro ciclista alla gara. result è true in caso affermativo, false altrimenti. InizioSpecificaAttivitàAtomica VisualizzaGara VisualizzaGara (g:gara):() mostra la finestra di visualizzazione della gara InizioSpecificaAttivitàAtomica ProclamaVincitori ProclamaVincitore (g:gara):() Stampa i nomi dei vincitori della gara g Attività Atomiche InizioSpecificaAttivitàAtomica IscriviCiclista IscriviCiclista (c:ciclista,g:gara) : () -- viene creato un link l di tipo P artecipa tale che l.kmp ercorsi = 0, l.gara = g, l.ciclista = c InizioSpecificaAttivitàAtomica AvviaGara AvviaGara(g:Gara):() -- inizializza l Environment, inserendovi tutti i ciclisti partecipanti alla gara g (come Listener) a cui invia l evento start; -- successivamente, attiva i Listener. InizioSpecificaAttivitàAtomica TestFine TestFine(g:Gara):(Bool) -- result è true se tutti i partecipanti alla gara g sono nello stato finito, -- e false altrimenti. InizioSpecificaAttivitàAtomica AggiornaVincitori TestFine(g:Gara):() Per ogni link l di tipo P artecipa tale che l.gara = g, se l.kmp ercorsi = max{m.kmp ercorsi m P artecipa m.gara = g} allora l V incitore

Attività Composte InizioSpecificaAttività AttivitaPrincipale AttivitaPrincipale():() Variabili Processo: gara: Gara -- gara corrente ciclista: Ciclista -- ciclista corrente altro: Bool -- altro ciclista da aggiungere? incorso: Bool -- la gara è ancora in corso? Inizio Processo: InserisciDatiGara():(gara); InserisciDatiCiclista():(ciclista); IscriviCiclista(ciclista,gara):(); do{ InserisciDatiCiclista():(ciclista); IscriviCiclista(ciclista,gara):(); ChiediSeAltroCiclista():(altro); }while{altro} VisualizzaGara(gara):(); AvviaGara(gara):(); do{ -- Attendi qualche (e.g., 100) millisecondo TestFine():(inCorso); }while{incorso} AggiornaVincitori(gara):(); ProclamaVincitori(gara):(); Progetto Responsabilità sulle Associazioni R: Requisiti; O: Specifica delle Operazioni/Attività; M: Vincoli di Molteplicità Associazione Classe Ha Responsabilità partecipa Gara SÌ (O,M) Ciclista SÌ (O,M) vincitore Gara SÌ (O,M) Ciclista NO

Strutture di Dati Rappresentiamo le collezioni omogenee di oggetti mediante le classi Set ed HashSet del Collection Framework di Java. Tabelle di Gestione delle Proprietà delle Classi UML Riassumiamo le scelte differenti da quelle di default mediante la tabella delle proprietà immutabili e la tabella delle assunzioni sulla nascita. Classe UML Gara Ciclista Proprietà Immutabile nome distanza nome Proprietà Classe UML Nota alla nascita Non nota alla nascita - - - Altre Considerazioni Non dobbiamo assumere una particolare sequenza di nascita degli oggetti Non esistono valori di default per qualche proprietà che siano validi per tutti gli oggetti.