Laboratorio di Introduzione alla Programmazione II MODULO 3 crediti Esame e voto unico (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 degli anni precedenti (devono rivolgersi alla Prof. Occhiuto) Gli studenti che hanno frequentato nel 2007-2008 possono svolgere il progetto che verra’ presentato oggi 3 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 gruppo (di due, tre persone al massimo) Tutti gli altri devono svolgere il progetto individualmente 4 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 5 Quando si puo’ consegnare il progetto? Ad ogni sessione d’esame Sessione estiva: entro 13 luglio 2008 Sessione autunnale: da fissare (settembre) Orali: da concordare volta per volta Tutte le informazioni sono disponibili sulla pagina web del corso 6 Validita’ del progetto Fino a settembre Sessione invernale: nuovo progetto da concordare volta per volta (richiedendolo al docente) 7 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 8 Cosa deve contenere? Programma “Funzionante” Una relazione che spieghi le principali scelte di progetto 9 Obiettivo del Progetto Progettare un semplice tipo di dato astratto Partiamo dal problema 10 Problema Vogliamo progettare un tipo di dato astratto Biblio • Un Biblio rappresenta -un insieme di Scaffali numerati 1,........,n n fisso (parametro) -ogni Scaffale puo’ contenere al massimo k items k fisso(parametro) 11 Che cosa e’ un item? Un Libro oppure Una Rivista 12 Libro Vogliamo che memorizzi • titolo, autore,editore • numero di copie disponibili (>0) (“Le affinita’ elettive”, “Goethe”, “Einaudi”, 20) (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 2) 13 Rivista Vogliamo che memorizzi • titolo, autore,editore • numero • numero di copie disponibili (>0) (“Science of Computer Programming”, “Milner”, “Elsevier Science”, 3, 20) (“Science of Computer Programming”, “Milner”, “Elsevier Science”, 4, 10) 14 Proprieta’ degli scaffali • Vogliamo per costruzione delle proprieta’ degli scaffali • Ogni scaffale contiene SOLO LIBRI o SOLO RIVISTE • Per semplicita’ assumiamo che 1) scaffali tra L1 e Ln contengono libri 2) scaffali tra R1e Rn e n contengono riviste n (parametro) 15 Proprieta’ degli scaffali I • Vogliamo sia nel caso di Libri che di Riviste che gli item siano memorizzati in modo ordinato 16 Libri: ordinamento • in base al titolo • se titolo uguale in base all’autore • se titolo e autore uguali in base all’editore 17 Esempio (“Le affinita’ elettive”, “Goethe”, “Einaudi”, 20) > (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 2) (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 2) > (“Do the androids dream of electric sheeps?”, “Dick”, “Einaudi”, 10) 18 Riviste: ordinamento • • • • in base al titolo se titolo uguale in base all’autore se titolo e autore uguali in base all’editore se titolo, autore, editore uguali in base al numero 19 Esempio (“Science of Computer Programming”, “Milner”, “Elsevier Science”, 3, 20) < (“Science of Computer Programming”, “Milner”, “Elsevier Science”, 4, 10) (“Science of Computer Programming”, “Milner”, “Elsevier Science”, 3, 20) < (“Theoretical Computer Science”, “harel”, “Elsevier Science”, 4, 100) 20 Proprieta’ degli scaffali II • Vogliamo che il numero di pezzi totali degli item presenti in ogni scaffale sia minore o uguale della dimensione (k parametro fisso) 21 Esempio: dimensione 20 [ (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 2), (“Le affinita’ elettive”, “Goethe”, “Einaudi”, 10)] [ (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 11), (“Le affinita’ elettive”, “Goethe”, “Einaudi”, 10)] OUT OF BOUNDS ! 22 Proprieta’ degli scaffali III • Per motivi di efficienza vogliamo che non compaiano ripetizioni di items (Libri o Riviste) 23 Esempio: ripetizioni [ (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 2), (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 10)] Non e’ una rappresentazione efficiente. Meglio usare [ (“Do the androids dream of electric sheeps?”, “Dick”, “Feltrinelli”, 12)] 24 Proprieta’ della Biblio • collezione di scaffali di Libri • collezione di scaffali di Riviste • Ogni scaffale deve avere le proprieta’ viste in precedenza 25 Proprieta’ della Biblio • Inoltre per entrambe le collezioni vogliamo --l’ultimo item dello scaffale i precede o e’ uguale al primo item dello scaffale i+1 --lo scaffale i puo’ contenere items solo se tutti gli scaffali j con j<i sono pieni 26 Esempio 1=[L1,L2,L3,L4] 2=[L5,L6] deve essere L5 <L6 e la dimensione 4 (assumendo i libri con occorrenze 1) Se la dimensione e’ 5==> 1=[L1,L2,L3,L4,L5] 2=[L6] 27 Operazioni Abbiamo visto le proprieta’ dei dati astratti Biblio Vediamo le operazioni 28 Inializzazione: parametri la dimensione degli scaffali (k) il numero di scaffali dei due tipi (n) la dimensione e’ >0 29 Operazioni capacity-libro • restituisce il numero di occorrenze per Libri ancora liberi capacity-rivista • restituisce il numero di occorrenze per Riviste ancora liberi 30 Operazioni number-l prende come parametro l’autore, il titolo e l’editore • restituisce il numero di occorrenze del Libro corrispondente presente in this 31 Operazioni number-r prende come parametro l’autore, il titolo, l’editore ed il numero • restituisce il numero di occorrenze della Rivista corrispondente presente in this 32 Operazioni alllibri • restituisce il numero di Libri presenti in this (come numero di occorrenze) 33 Operazioni allriviste • restituisce il numero di Riviste presenti in this (come numero di occorrenze) 34 Operazioni scaffale-l prende come parametro un titolo, un autore, un editore ed un numero di occorrenze x • restituisce il numero di uno scaffale in cui si trovano almeno x occorrenze del libro corrispondente • se non ci sono restituisce 0 35 Operazioni scaffale-r prende come parametro un titolo, un autore, un editore, un numero ed un numero di occorrenze x • restituisce il numero di uno scaffale in cui si trovano x occorrenze della rivista corrispondente • altrimenti restituisce 0 36 Operazioni libro-titoli prende come parametro un autore • restituisce il numero di titoli differenti di Libri di tale autore • se non ce ne sono restituisce 0 37 Operazioni rivista-titolo prende come parametro un autore ed un titolo • restituisce il numero di numeri differenti di Riviste tale autore e titolo • se non ce ne sono restituisce 0 38 Modificatori insert-l prende come parametro un titolo, un autore, un editore, un numero di occorrenze x • se il numero di pezzi di x supera il limite sulla dimensione della Biblio solleva SizeException (controllata) • altrimenti, inserisce il Libro (come abbiamo descritto in precedenza) 39 Modificatori insert-r prende come parametro un titolo, un autore, un editore, un numero, un numero di occorrenze x • se il numero di pezzi di x supera il limite sulla dimensione della Biblio solleva SizeException (controllata) • altrimenti, inserisce la rivista (come abbiamo descritto in precedenza) 40 Esempio: inserimento 1=[L1,L2,L3,L4] 2=[L5,L6] (assumendo i libri con occorrenze 1 e la dimensione 4) Se devo inserire L tale che L3<L<L4 =====> 1=[L1,L2,L3,L] 2=[L4,L5,L6] devono essere shiftati! attenzione alle ripetizioni!!! 41 Modificatori remove-l prende come parametro un titolo, un autore, un editore ed un numero di pezzi x • se gli scaffali di Libri non contengono almeno x occorrenze del libro corrispondente solleva l’eccezione NotFoundException (controllata) • altrimenti rimuove dagli scaffali x occorrenze del Libro corrispondente 42 Modificatori remove-r prende come parametro un titolo, un autore, un editore, un numero ed un numero di pezzi x • se gli scaffali di Riviste non contengono almeno x occorrenze della rivista corrispondente solleva l’eccezione NotFoundException (controllata) • altrimenti rimuove dagli scaffali x occorrenze della Rivista corrispondente 43 Modificatori svuota-scaffale prende come parametro il numero i di uno scaffale di Libri o Riviste • elimina tutto il contenuto dello scaffale • se non esiste lo scaffale i-esimo solleva una opportuna eccezione 44 Modificatori aggiungi-scaffale prende come parametro un intero i >0 • aggiunge i Scaffali sia di Libri che di Riviste 45 Modificatori union prende come parametro una Biblio b modifica this facendo l’unione con b 46 Subset subset prende come parametro una Biblio b restituisce -1 se this e’ un sottoinsieme di b, resituisce 0 se sono uguali, 1 se b e’ sottoinsieme di this solleva un’ eccezione se non sono confontabili ATTENZIONE (L1,x) appartiene {(L1,y)} se x <=y 47 Proprieta’ della Biblio Devono essere garantite per costruzione Costruttori Metodi d’istanza modificatori Per esempio se si svuota lo scaffale 3, gli items degli scaffali successivi devono essere spostati 48 Esempio: rimuoviamo lo scaffale 1 1=[L1,L2,L3,L4] 2=[L5,L6,L7,L8] 3=[L9,L10,L11,L12] (assumendo i libri con occorrenze 1 e la dimensione 4) 1=[L5,L6,L7,L8] 2=[L9,L10,L11,L12] 49 Come procedere? • Partire dalla specifica del tipo di dato principale Biblio • 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 50 Tipi di dato ausilari • La specifica del magazzino si basa su alcuni tipi di dato ausiliari: Libro e Rivista • 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 51 Implementazione • Scegliere la rappresentazione piu’ adeguata per ogni tipo di dato • Non ci sono vincoli sul modo in cui realizzarlo (purche’ funzioni) 52 Verranno apprezzate • Uso delle liste concatenate (per esempio per memorizzare la collezione degli scaffali sia di Libri che di Riviste) • Se ci sono h scaffali uno potrebbe usare un array di dimensione h • In posizione i-esima una lista ordinata di Libri potrebbe rappresentare lo scaffale i-esimo • Un po’ complesso spostare le cose da uno scaffale all’altro!! • Piu’ semplice usare una lista concatenata in cui i nodi riportano l’info sul numero di scaffale in cui siamo 53 Verranno apprezzate • L’uso dell’ereditarieta’: e’ evidente che i tipi di dato Libro e Rivista hanno qualcosa in comune (si possono usare tipi e sottotipi?) • Analogamente : le due collezioni di scaffali hanno qualcosa in comune (si possono realizzare nello stesso modo?) 54 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) 55