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
Scarica

get-data