![]() ![]() |
|
![]() ![]() |
La sottomissione di un progetto di qualità sufficientemente
buona è un requisito
necessario per il superamento del corso (assieme alle firme
di frequenza e al superamento dei compitini).
Il progetto ha lo scopo di valutare la capacità degli studenti nel progettare e realizzare un programma Java, semplice ma di dimensioni maggiori di quelli fatti durante le esercitazioni del corso. Di norma il progetto viene assegnato a gruppi di due persone. Solo in casi eccezionali (es. studenti lavoratori) è possibile chiedere di svilupparlo individualmente. La valutazione del progetto sarà basata su:
Il docente ha la facoltà di chiedere agli studenti di rivedere il progetto e risottometterlo, nel caso il progetto non rispetti le specifiche date, oppure la qualità del progetto renda impossibile una valutazione ragionevole. Valutazione: Ai fini della votazione finale, la valutazione del progetto produce di norma un incremento nell'intervallo [-3, +3] rispetto alla media dei voti dei due compitini (eccezioni sono possibili a discrezione del docente). Per gli studenti con media maggiore o uguale di 28, un incremento che superi il 30 non matura automaticamente la lode, che rimane a discrezione del docente. |
![]() ![]() |
|
![]() ![]() |
Di norma il progetto viene assegnato a gruppi di due persone, e solo in
casi eccezionali può essere chiesto da un singolo studente. Il progetto può essere richiesto anche da studenti che non abbiano superato con successo il primo o il secondo compitino (o le corrispondenti prove di recupero). La discussione del progetto sarà possibile solo dopo aver superato entrambi i compitini. Il progetto deve essere richiesto per email al docente del corso di appartenenza, a partire dal 3 giugno 2008 e non oltre il 28 luglio 2008. Il mail deve avere come oggetto [LIP-07] Richiesta progetto fine corso, e deve contenere nome, cognome e numero di matricola dei/l richiedenti/e. Al momento dell'assegnazione del progetto, il docente controllerà che i richiedenti abbiano assolto agli eventuali obblighi di frequenza, e fisserà la data di consegna, che di norma sarà dopo un mese (escluso il mese di agosto: ad esempio, un progetto assegnato il 15 di luglio avrà come scadenza il 15 di settembre). Dopo la consegna il docente correggerà il progetto, e fisserà con gli studenti che lo hanno sottomesso un appuntamento per la discussione.
|
![]() ![]() |
|
![]() ![]() |
La realizzazione del progetto deve produrre, oltre ai sorgenti Java:
Il progetto deve essere sottomesso sia in copia elettronica (tramite email con oggetto [LIP-07] Consegna progetto) che in copia cartacea entro la data fissata dal docente al momento della assegnazione. |
![]() ![]() |
|
![]() ![]() |
|
![]() ![]() |
|
![]() ![]() |
Quello che segue è un esempio (semplificato) di quello che potrebbe essere un tipico testo di progetto.
Scrivere un programma per la manipolazione e l'elaborazione di sequenze di valori numerici, che possono essere interi o valori in virgola mobile. Il programma deve consentire all'utente di generare una sequenza di valori numerici casuali, di salvare una sequenza di numeri in un file, di caricare una sequenza leggendola da un file, di stampare una sequenza, di calcolare la media e la varianza di una sequenza, e, nel caso di sequenze di interi, di calcolare la frequenza con cui ogni elemento compare nella sequenza. L'interazione con l'utente, di tipo testuale, avviene tramite più menu di opzioni, comprendenti almeno quelli descritti di seguito. All'avvio del sistema, un menu iniziale offre la possibilità di creare una sequenza di numeri casuali (interi o in virgola mobile), di caricare una sequenza di numeri da un file, il cui nome viene chiesto all'utente, oppure di uscire dal sistema. La sequenza che viene creata o caricata da file diviene la sequenza corrente. Quando la sequenza corrente è stata correttamente creata o caricata, il sistema visualizza un menu che permette di selezionare le operazioni da eseguire su di essa. Se la sequenza è di numeri in virgola mobile, il menu deve consentire di calcolarne la media o la varianza; di visualizzare la sequenza su schermo; di salvare la sequenza in un file, il cui nome viene chiesto all'utente; e di ritornare al menu iniziale per caricare una nuova sequenza. Se la sequenza corrente è di numeri interi, oltre alle operazioni appena elencate il menu deve consentire anche il calcolo delle fequenze. Altri requisiti:
|
![]() ![]() |
|
![]() ![]() |
La fase di progettazione deve portare all'individuazione delle classi
rilevanti per l'applicazione. Nel semplice progetto in esame, si
potrebbero considerare le classi SequenzaInt (sequenze di
interi) e SequenzaDbl
(sequenze di double): queste classi potrebbero essere, ad esempio, in
relazione di ereditarietà, oppure potrebbero estendere entrambe
una superclasse comune, ...
Altre classi che vanno individuate in questa fase riguardano la struttura complessiva del progetto: si ricordi che il progetto deve realizzare un sistema per elaborare sequenze numeriche, un menu di accesso alle funzionalità, e una classe SequenceImp che realizzi la API specificata dall'interfaccia Sequence. È evidente dalla specifica che il sistema può essere utilizzato con due modalità diverse: da un utente a terminale, oppure da un programma java che usi la API. Si può anche pensare che in futuro il sistema venga utilizzato con altre modalità (ad esempio via rete tramite RMI, oppure attraverso una interfaccia WEB,...). In ogni caso, le funzionalità di "manipolazione di sequenze di numeri" offerte dal sistema, come descritte nel testo del progetto, non dovrebbero cambiare.
|
![]() ![]() |
|
![]() ![]() |
Queste considerazioni portano in modo naturale ad un importante
requisito, del tutto generale:
Questa strutturazione si ottiene utilizzando classi diverse per la logica del progetto e per ognuno dei moduli che ne consentono l'accesso. In generale ognuna di queste parti può essere costituita da più classi. Ad esempio, una tipica struttura del progetto potrebbe essere la seguente: ![]() In relazione a questa struttura, si seguano con scrupolo i seguenti suggerimenti: La classe Sistema deve fornire tutti i metodi che realizzano le funzionalità del sistema richiesto. I metodi di Sistema non devono fare assunzioni su chi li invoca, quindi non possono contenere operazioni di lettura da tastiera e di scrittura su schermo. Questi metodi possono solo restituire un valore come risultato, oppure lanciare un'opportuna eccezione.
La classe Menu gestisce
i menu per l'interazione con l'utente, che in generale saranno
realizzati con dei cicli e degli switch. Non usare la ricorsione
per realizzare i menu. Si ricorda di gestire in modo corretto i casi limite nei metodi che scrivete. Ad esempio, se un metodo elabora una sequenza di valori, considerare sempre il caso di sequenza vuota. |