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
2005-2006 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)
 Tutti gli altri devono svolgere il progetto
individualmente
5
Modalita’ per i gruppi
 Al momento della consegna deve essere
comunicato al docente chi sono gli appartenenti al
gruppo
 La prova orale deve essere individualmente da
parte di 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 8 luglio
Sessione autunnale: da fissare (settembre)
Orali: da concordare volta per volta (vedi
pagina web del corso)
7
Inoltre
 Devono essere spediti per e-mail tutti i files
 Programma “Funzionante”
 Corredato da una relazione che spieghi le
principali scelte di progetto
8
Problema
 Vogliamo progettare un tipo di dato astratto
Agenda
• Memorizza i 12 mesi, e per ognuno i 30
(per semplicita’) giorni
• Per ogni giorno memorizza una Lista
Ordinata di Appuntamenti
9
Appuntamento
 Memorizza l’ora (int) e il nome della
persona (String)
• In particolare vogliamo che in ogni appuntamento
l’ora sia tra 0 e 24.
10
Lista di appuntamenti
• La lista deve essere ordinata in ordine crescente in
base all’ora
(9.00,Fabio), (11.00,Andrea), ….
• Si richiede che non ci siano nella lista due appuntamenti
in un intervallo minore di 30 minuti
• Esempio:
(9.00,Fabio), (9.15,Andrea), ….
11
Agenda
• Per capire come deve essere progettato il tipo di dato e
quali tipi di dato ausiliari servono
• Operazioni che richiediamo
-per crearla
-per modificarla
-per cercare informazioni
• Saranno realizzate da opportuni costruttori e metodi
d’istanza che costituiscono la specifica della classe
Agenda, tipo di dato modificabile
12
Agenda: creazione ed
inserimento
• Creazione: crea una agenda vuota (e.g. la lista degli appuntamenti per
ogni giorno e mese e’ vuota)
• inserisci:
-dati come parametro l’ora (int) o ed il nome (String) n
dell’appuntamento, ed il giorno g e mese m (int)
-inserisce l’appuntamento (o,n) nella lista del giorno g e mese m
(in modo ordinato)
-dovranno essere usate opportune eccezioni quando non puo’ essere
inserito (p.e. c’e’ gia’ un appuntamento per quell’ora)
13
Agenda: ricerca
• cercanome:
-dati come parametro l’ora (int) o dell’appuntamento, ed il giorno g
e mese m (int)
-restituisce il nome s dell’appuntamento (o,s) del giorno g e mese m
(se esiste)
-altrimenti solleva una opportuna eccezione
• cercaora: -dati come parametro il nome (String) n dell’appuntamento,
ed il giorno g e mese m (int)
-restituisce l’ora o dell’appuntamento (o,n) del giorno g e mese m
(se esiste)
-altrimenti solleva una opportuna eccezione
14
Agenda: ricerca
• next:
-dati come parametro il giorno g e mese m (int)
-restituisce il primo appuntamento del giorno g e mese m(se esiste)
-altrimenti solleva opportune eccezioni
• cercaall:
-dati come parametro il giorno g e mese m (int), ed un nome n
(String)
-restituisce il primo appuntamento con nome n, a partire dal giorno
g e mese m (se esiste)
-altrimenti solleva opportune eccezioni
15
Agenda: ricerca
• prossima:
-dati come parametro il giorno g e mese m (int)
-restituisce la prima ora libera del giorno e mese m (se esiste)
-altrimenti solleva opportune eccezioni
16
Agenda: operazioni per
modificarlo
• cambianome:
-dati come parametro l’ora (int) o dell’appuntamento, ed un nome s
(String), il giorno g e mese m (int), ed un nome n (String)
- modifica l’appuntamento (o,s) del giorno g e mese m (se esiste),
rimpiazzandolo con (o,n)
-altrimenti solleva una opportuna eccezione
• cambiaora: dati come parametro l’ora (int) o dell’appuntamento, ed un
nome s (String), il giorno g e mese m (int), ed un intero n
- modifica l’appuntamento (o,s) del giorno g e mese m (se esiste),
rimpiazzandolo con (n,s)
-altrimenti solleva una opportuna eccezione
17
Agenda: operazioni per
modificarlo
• rimuovi:
-dati come parametro l’ora (int) o dell’appuntamento, ed un nome s
(String), il giorno g e mese m (int)
- rimuove l’appuntamento (o,s) del giorno g e mese m (se esiste),
-altrimenti non fa nulla
• rimuoviprimo: dati come parametro il giorno g e mese m (int)
- rimuove il primo appuntamento del giorno g e mese m (se esiste),
18
Tipi di Dato Ausiliari
• Dipende da come si vuole implementare l’Agenda
• Appuntamento: per memorizzare le informazioni relative ad un
appuntamento (ora,nome)
• Giorno: per memorizzare la lista ordinata di appuntamenti relativa ad
un dato giorno
19
Appuntamento
• E’ un tipo record (ora,nome): bisogna garantire i vincoli sui valori di
ora
• Che operazioni servono (realizzate da opportuni costruttori e metodi
d’istanza)?
• Dipende dall’uso che ne dovete fare per risolvere il problema
dell’Agenda
20
Giorno
• Deve memorizzare le informazioni relative alla lista di appuntamenti di
un singolo giorno
• Gli appuntamenti sono ordinati in base all’ora
• Devono valere i vincoli visti in precedenza
• Che operazioni servono (realizzate da opportuni costruttori e metodi
d’istanza)?
• Dipende dall’uso che ne dovete fare per risolvere il problema
dell’Agenda
21
Come procedere?
• Partire da una specifica delle tre classi, Agenda, Giorno,
Appuntamento
• Specifica: costruttori, metodi, pre e post condizioni
• I commenti ai metodi sono parte integrante del progetto
22
Implementazione
•
Scegliere la rappresentazione piu’ adeguata per ogni tipo di dato
•
Esempio: Agenda deve memorizzare 12 mesi, ognuno con 30 giorni
POSSIBILE SCELTA: array di Giorni
•
Esempio: Giorno deve memorizzare una lista di appuntamenti
POSSIBILE SCELTA: lista concatenata ordinata
23
Implementazione
•
La rappresentazione per ogni tipo di dato deve essere private
•
Scelta la rappresentazione passare all’implementazione dei metodi
•
Possono essere necessarie modifiche, aggiunte nei metodi delle classi tra loro
collegate (raffinamenti successivi)
ESEMPIO: una delle richieste per Agenda richiede di aggiungere una
operazione in piu’ in Giorno
24
Relazione
 Deve contenere una breve descrizione dei
tipi di dato scelti per realizzare l’agenda
 Puo’ essere inclusa nei commenti al codice
(se fatti in modo serio)
25
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)
26
Ricevimento
 Non ci saranno piu’ lezioni (ma io verro’
comunque varie volte a fare gli esami)
 Per qualsiasi problema:
[email protected]
27
Scarica

PowerPoint Presentation - Type inference as abstract interpreter