Laboratorio di Introduzione alla Programmazione II MODULO 3 crediti Esame e voto unico (su 6 crediti totali) 1 Modalita’ d’Esame esame = progetto finale + orale prove di verifica intermedia non *necessarie*, verranno comunque considerate come parte fondamentale per il voto finale analogamente alla valutazione del rendimento dimostrato durante le esercizitazioni in Laboratorio 2 Chi puo’ presentare il progetto Gli studenti che hanno *frequentato* Sulla pagina web la lista degli studenti che hanno frequentato l’80 % delle lezioni Gli studenti lavoratori e/o gli studenti degli anni precedenti (anche se non hanno frequentato) 3 Modalita’ per lo svolgimento del progetto Gli studenti degli anni precedenti (devono rivolgersi alla Prof. Occhiuto) Gli studenti che hanno frequentato nel 2006-2007 devono svolgere il progetto che verra’ presentato oggi 4 Modalita’ per lo svolgimento del progetto Come deve essere svolto? Dipende dalla valutazione ottenuta durante l’anno Gli studenti che hanno ottenuto una valutazione sufficiente (vedi pagina WEB) possono svolgere il progetto in gruppi (di due, tre persone al massimo) Tutti gli altri devono svolgere il progetto individualmente 5 Modalita’ per i gruppi Il progetto deve essere consegnato una sola volta Al momento della consegna deve essere comunicato al docente chi sono gli appartenenti al gruppo La prova orale deve essere sostenuta individualmente da ogni partecipante al gruppo Puo’ essere svolta in momenti diversi 6 Quando si puo’ consegnare il progetto? Ad ogni sessione d’esame Sessione estiva: entro 13 luglio 2007 Sessione autunnale: da fissare (settembre) Orali: da concordare volta per volta Tutte le informazioni sono disponibili sulla pagina web del corso 7 Validita’ del progetto Fino a settembre Sessione invernale: nuovo progetto da concordare volta per volta (richiedendolo al docente) 8 Inoltre Devono essere spediti per e-mail (levifran @di.unipi.it) tutti i files classe.java • in un archivio .zip o .gz • indicando il nome (i nomi) dei partecipanti 9 Cosa deve contenere? Programma “Funzionante” Una relazione che spieghi le principali scelte di progetto 10 Problema Vogliamo progettare un tipo di dato astratto Magazzino • Un oggetto di tipo Magazzino memorizza le seguenti informazioni -la data corrente -la lista della merce disponibile nel magazzino -la dimensione del magazzino 11 Data Vogliamo che memorizzi giorno, mese, anno • 1<=giorno<=30 • 1<=mese <=12 • 2007<=anno 12 Merce Vogliamo che memorizzi: • codice (di tipo intero) per identificare il prodotto • numero pezzi (maggiore di zero) • la scadenza 13 Scadenza • La scadenza e’ (in alternativa) una data o infinito (non ha scadenza) 14 Proprieta’ del magazzino • Un oggetto di tipo Magazzino memorizza le seguenti informazioni -la data corrente (giorno,mese,anno) -la lista della merce disponibile nel magazzino -la dimensione 15 Proprieta’ del magazzino I • Vogliamo che non sia presente merce scaduta! • Ogni merce presente nel magazzino deve avere una scadenza che e’ uguale o maggiore della data corrente 16 Scadenza: ordinamento Vogliamo un ordinamento tra le scadenze: --ogni data e’ minore di infinito --infinito e’ minore di infinito --tra date vale l’ordinamento cronologico 17 Esempio 1/12/2007 < infinito 6/11/2007< infinito 1/12/2007 < 17/12/2007 6/11/2007<1/1/2008 18 MERCE SCADUTA •Ogni merce presente nel magazzino deve avere una scadenza che e’ uguale o maggiore della data corrente Data corrente: 30/5/2007 Merce : codice 125 pezzi 400 data 1\5\2007 19 Proprieta’ del magazzino II • Vogliamo che il numero di pezzi totali delle merci presenti nel magazzino sia minore o uguale della dimensione dimensione: 5 (123,4,1\12\2009), (125,400,1\11\2008) 20 Proprieta’ del magazzino III • Vogliamo che la lista della merce disponibile sia ordinata (per motivi di efficienza) • Come? • In base al codice del prodotto (in ordine crescente) • A parita’ di codice in base alla scadenza (quella che scade prima deve venire prima) in ordine crescente 21 Esempio (123,4,1\12\2009) (125,400,1\11\2008) (125,400,1\11\2009) 22 Proprieta’ del magazzino III • Per motivi di efficienza vogliamo che non compaiano ripetizioni di merci che hanno lo stesso codice del prodotto e scadenza 23 Esempio: ripetizioni (125,300,1\11\2009) (125,400,1\11\2009) Non e’ una rappresentazione efficiente. Meglio usare (125, 700,1\11\2009) 24 Operazioni sul magazzino • Vogliamo una serie di operazioni per ---creare un Magazzino ---aggiornare la data corrente ---inserire nuova merce ---verificare la disponibilita’ dei prodotti 25 Inializzazione: parametri la data corrente iniziale la dimensione (fissa) e >0 26 Operazioni • • get-data restituisce la data corrente get-size restituisce la dimensione 27 Operazioni pezzi prende come parametro il codice di un prodotto cod • restituisce il numero di pezzi del prodotto cod presenti nel magazzino (indipendendente dalla scadenza) 28 Operazioni pezzi-data prende come parametro il codice di un prodotto cod ed una data x • restituisce il numero di pezzi del prodotto cod presenti nel magazzino che hanno scadenza maggiore o uguale ad x 29 Operazioni allpezzi • restituisce il numero di pezzi presenti nel magazzino (di tutti i prodotti) 30 Operazioni allpezzi-data prende come parametro una data x • restituisce il numero di pezzi presenti nel magazzino (di tutti i prodotti) presenti nel magazzino che hanno scadenza maggiore o uguale ad x 31 Operazioni di modifica cambia-data • prende come parametro una data x • se x e’ minore o uguale alla data corrente solleva InvalidDataException (controllata) • se x e’ maggiore della data corrente aggiorna la data corrente con x, e modifica la lista della merce disponibile, rimuovendo quella scaduta 32 Esempio (123,4,1\12\2009) (125,400,1\11\2008) (125,400,1\11\2009) Data nuova 1\1\2009 (123,4,1\12\2009) (125,400,1\11\2009) 33 Modificatori insert prende come parametro una Merce x • se la scadenza di x e’ minore della data corrente solleva InvalidDataException • se il numero di pezzi di x supera il limite sulla dimensione del magazzino solleva SizeException (controllata) • altrimenti, inserisce x nella lista della Merce disponibile (in base all’ordinamento) 34 Esempio: inserimento (125,300,1\11\2009) (127,400,1\11\2009) Inseriamo (126, 700,1\11\2009): (125,300,1\11\2009) (126, 700,1\11\2009) (127,400,1\11\2009) 35 Esempio: ripetizioni (125,300,1\11\2009) (125,400,1\12\2009) Inseriamo (125, 700,1\11\2009): (125,1000,1\11\2009) (125,400,1\12\2009) 36 Modificatori remove prende come parametro il codice di un prodotto cod e un numero di pezzi x • se la lista della merce non contiene almeno x pezzi di prodotto cod solleva l’eccezione NotFoundException (controllata) • altrimenti rimuove dalla lista della merce x pezzi di prodotto cod (a partire da quelli con scadenza minore) 37 Esempio: rimozione (125,300,1\11\2009) (125,500,1\12\2009) (127,100,1\12\2007) Rimuoviamo 600 pezzi di 125: (125,200,1\12\2009) (127,100,1\12\2007) 38 Modificatori removeall prende come parametro il codice di un prodotto cod • rimuove dalla lista della merce tutta la merce di prodotto cod 39 In aggiunta get-merce prende come parametro una scadenza s • se s e’ minore della data corrente solleva InvalidDataException • altrimenti restituisce le lista della merce presente nel magazzino con scadenza s 40 Esempio (125,300,1\12\2007) (125,500,1\12\2009) (127,100,1\12\2007) Parametro 1\12\2007 : restituisce (125,300,1\12\2007) (127,100,1\12\2007) 41 Proprieta’ del magazzino Devono essere garantite per costruzione Costruttori Metodi d’istanza che realizzano le operazioni segnalano (p.e. tramite opportune eccezioni) le situazioni in cui la modifica non puo’ essere effettuata perche’ viola le condizioni 42 Come procedere? • Partire dalla specifica del tipo di dato principale Magazzino • Specifica: costruttori, metodi e descrizione informale (pre e post condizioni) • Devono realizzare le richieste descritte in precedenza • I commenti alle classi sono parte integrante del progetto 43 Tipi di dato ausilari • La specifica del magazzino si basa su alcuni tipi di dato ausiliari: Data, Merce, Scadenza • E’ necessario darne specifica ed implementazione • Lo stato degli oggetti deve memorizzare le informazioni richieste • Quali Operazioni? A scelta: ---pensare ad un insieme di operazioni significativo ---semplifichino e supportino la realizzazione del tipo di dato principale • Scelte di progetto spiegate e motivate nella relazione 44 Implementazione • Scegliere la rappresentazione piu’ adeguata per ogni tipo di dato • Non ci sono vincoli sul modo in cui realizzarlo (purche’ funzioni) 45 Verranno apprezzate • Uso delle liste concatenate (per esempio per memorizzare la lista della merce nel magazzino) • L’implementazione sfrutti l’ordinamento per motivi di efficienza • L’uso dell’ereditarieta’ (data, scadenza?) 46 Testing Deve essere realizzato tramite un opportuno metodo main (in modo standard) Deve essere inviato insieme ai files del progetto NOTA: il progetto deve essere inviato una ed una sola volta nella versione finale (funzionante) 47 Ricevimento Non ci saranno piu’ lezioni Per qualsiasi informazione (salvo dal 10 al 24 giugno) [email protected] 48