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