1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 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 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)
4 Modalita’ per lo svolgimento del progetto §Gli studenti degli anni precedenti (devono rivolgersi alla Prof. Occhiuto) §Gli studenti che hanno frequentato nel devono svolgere il progetto che verra’ presentato oggi
5 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
6 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
7 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)
8 Inoltre §Devono essere spediti per tutti i files § Programma “Funzionante” §Corredato da una relazione che spieghi le principali scelte di progetto
9 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
10 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.
11 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), ….
12 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
13 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)
14 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
15 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
16 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
17 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
18 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),
19 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
20 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
21 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
22 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
23 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
24 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
25 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)
26 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)
27 Ricevimento §Non ci saranno piu’ lezioni (ma io verro’ comunque varie volte a fare gli esami) §Per qualsiasi problema: