1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (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 degli anni precedenti (devono rivolgersi alla Prof. Occhiuto) §Gli studenti che hanno frequentato nel possono 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 gruppo (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 2008 §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 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 Obiettivo del Progetto §Progettare un semplice tipo di dato astratto §Partiamo dal problema
11 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)
12 Che cosa e’ un item? Un Libro oppure Una Rivista
13 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)
14 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)
15 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)
16 Proprieta’ degli scaffali I Vogliamo sia nel caso di Libri che di Riviste che gli item siano memorizzati in modo ordinato
17 Libri: ordinamento in base al titolo se titolo uguale in base all’autore se titolo e autore uguali in base all’editore
18 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”, “Einaudi”, 10)
19 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
20 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)
21 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)
22 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 !
23 Proprieta’ degli scaffali III Per motivi di efficienza vogliamo che non compaiano ripetizioni di items (Libri o Riviste)
24 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)]
25 Proprieta’ della Biblio collezione di scaffali di Libri collezione di scaffali di Riviste Ogni scaffale deve avere le proprieta’ viste in precedenza
26 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
27 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]
28 Operazioni §Abbiamo visto le proprieta’ dei dati astratti Biblio §Vediamo le operazioni
29 Inializzazione: parametri §la dimensione degli scaffali (k) §il numero di scaffali dei due tipi (n) §la dimensione e’ >0
30 Operazioni capacity-libro restituisce il numero di occorrenze per Libri ancora liberi capacity-rivista restituisce il numero di occorrenze per Riviste ancora liberi
31 Operazioni number-l §prende come parametro l’autore, il titolo e l’editore restituisce il numero di occorrenze del Libro corrispondente presente in this
32 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
33 Operazioni alllibri restituisce il numero di Libri presenti in this (come numero di occorrenze)
34 Operazioni allriviste restituisce il numero di Riviste presenti in this (come numero di occorrenze)
35 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
36 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
37 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
38 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
39 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)
40 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)
41 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 1=[L1,L2,L3,L] 2=[L4,L5,L6] devono essere shiftati! attenzione alle ripetizioni!!!
42 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
43 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
44 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
45 Modificatori aggiungi-scaffale prende come parametro un intero i >0 aggiunge i Scaffali sia di Libri che di Riviste
46 Modificatori union §prende come parametro una Biblio b §modifica this facendo l’unione con b
47 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
48 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
49 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]
50 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
51 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
52 Implementazione Scegliere la rappresentazione piu’ adeguata per ogni tipo di dato Non ci sono vincoli sul modo in cui realizzarlo (purche’ funzioni)
53 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
54 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?)
55 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)