1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
2 Modalita’ d’Esame §esame = progetto finale + orale l prove di verifica intermedia l non *necessarie*, verranno comunque considerate come parte fondamentale per il voto finale l analogamente alla valutazione del rendimento dimostrato durante le esercizitazioni in Laboratorio
3 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)
4 Modalita’ per lo svolgimento del progetto §Gli studenti degli anni precedenti (devono rivolgersi alla Prof. Occhiuto) §Gli studenti che hanno frequentato nel devono svolgere il progetto che verra’ presentato oggi
5 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
6 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
7 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
8 Validita’ del progetto § Fino a settembre §Sessione invernale: nuovo progetto da concordare volta per volta (richiedendolo al docente)
9 Inoltre §Devono essere spediti per tutti i files classe.java in un archivio.zip o.gz indicando il nome (i nomi) dei partecipanti
10 Cosa deve contenere? §Programma “Funzionante” §Una relazione che spieghi le principali scelte di progetto
11 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
12 Data §Vogliamo che memorizzi giorno, mese, anno 1<=giorno<=30 1<=mese <= <=anno
13 Merce §Vogliamo che memorizzi: codice (di tipo intero) per identificare il prodotto numero pezzi (maggiore di zero) la scadenza
14 Scadenza La scadenza e’ (in alternativa) una data o infinito (non ha scadenza)
15 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
16 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
17 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
18 Esempio 1/12/2007 < infinito 6/11/2007< infinito 1/12/2007 < 17/12/2007 6/11/2007<1/1/2008
19 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
20 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)
21 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
22 Esempio (123,4,1\12\2009) (125,400,1\11\2008) (125,400,1\11\2009)
23 Proprieta’ del magazzino III Per motivi di efficienza vogliamo che non compaiano ripetizioni di merci che hanno lo stesso codice del prodotto e scadenza
24 Esempio: ripetizioni (125,300,1\11\2009) (125,400,1\11\2009) Non e’ una rappresentazione efficiente. Meglio usare (125, 700,1\11\2009)
25 Operazioni sul magazzino Vogliamo una serie di operazioni per ---creare un Magazzino ---aggiornare la data corrente ---inserire nuova merce ---verificare la disponibilita’ dei prodotti
26 Inializzazione: parametri §la data corrente iniziale §la dimensione (fissa) e >0
27 Operazioni get-data restituisce la data corrente get-size restituisce la dimensione
28 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)
29 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
30 Operazioni allpezzi restituisce il numero di pezzi presenti nel magazzino (di tutti i prodotti)
31 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
32 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
33 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)
34 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)
35 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)
36 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)
37 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)
38 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)
39 Modificatori removeall prende come parametro il codice di un prodotto cod rimuove dalla lista della merce tutta la merce di prodotto cod
40 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
41 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)
42 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
43 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
44 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
45 Implementazione Scegliere la rappresentazione piu’ adeguata per ogni tipo di dato Non ci sono vincoli sul modo in cui realizzarlo (purche’ funzioni)
46 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?)
47 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)
48 Ricevimento §Non ci saranno piu’ lezioni §Per qualsiasi informazione (salvo dal 10 al 24 giugno)