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
Scarica

Lucidi