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 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 (anche se non hanno frequentato)
4 Quando si puo’ consegnare il progetto? § Entro il 30 giugno §Entro il 10 settembre §Orale: le date verranno comunicate al momento della consegna
5 Come? §Il progetto puo’ essere svolto in gruppi di al max. due persone §L’orale sara’ comunque individuale §Devono essere spediti per tutti i files (incluso il testing) §Programma “Funzionante”
6 Cosa dovete fare? §Prima Parte §Tipo di dato Lista Ordinata con elementi di tipo Comparable
7 Specifica public class OrderedList { // OVERVIEW: `e una lista modificabile ordinata di oggetti //omogenei di tipo Comparable. Oggetto tipico [x1,..., xn] con xi < xj se i < j // Il confronto fra gli elementi è effettuato con il loro metodo compareTo public OrderedList ( ) { // EFFECTS: inizializza this alla lista ordinata vuota}
8 public void addEl (Comparable el) throws NullPointerException, DuplicateException, ClassCastException { // MODIFIES: this // EFFECTS: se el è in this, solleva DuplicateException; se el è null solleva NuIlPointerException; se el non è confrontabile con gli altri elementi in this solleva ClassCastException; altrimenti, aggiunge el a this} public void removeEl(Comparable el) throws NullPointerException, { // MODIFIES: this // EFFECTS: se el è in this, lo rimuove, altrimenti se el è null solleva NuIlPointerException} public boolean IsIn (Comparable el) throws NullPointerException{ // EFFECTS: se el è null solleva NuIlPointerException, se el è in this, restituisce true altrimenti restituisce false}
9 public Comparable first () throws EmptyException{ // EFFECTS: se this è vuoto solleva EmptyException, altrimenti // ritorna il primo elemento di this} public OrderedList rest () throws EmptyException{ // EFFECTS: se this è vuoto solleva EmptyException, altrimentiritorna la lista ottenuta da this togliendo il primo elemento} public int size () { // EFFECTS: ritorna il numero di elementi di this} public String toString (){\\EFFECTS: standard} public void Empty () { //MODIFIES: this // EFFECTS: modifica this rendendola vuota}
10 Prima Parte §Implementazione di OrderedList usando una lista concatenata §Attenzione: sfruttare il piu’ possibile l’ordinamento nell’implementazione dei metodi
11 Seconda Parte §Vogliamo usare OrderedList per realizzare una applicazione in cui serve il concetto di ordinamento §Tipo l’Elenco del Telefono che abbiamo visto
12 Elenco di Pazienti §Vogliamo un tipo di dato Elenco i cui oggetti memorizzano le seguenti informazioni: il nome del dottore (di tipo String) e la lista di attesa dei pazienti §I pazienti sono caratterizzati dal nome (di tipo String) e da un valore di tipo intero che indica l’urgenza
13 Idea §Vogliamo che nella lista di attesa i pazienti siano ordinati in base all’urgenza: (a,x) < (b,y) se y < x (a,x)< (b,y) se x=y e a < b (ordine tra stringhe)
14 Specifica §Progettare la specifica della classe Elenco e della classe Paziente §Per Paziente non si richiedono operazioni (solo il costruttore e l’ordinamento) §Per Elenco oltre al costruttore vogliamo le seguenti operazioni
15 Metodi d’istanza §per cercare un paziente con un dato nome §per leggere e/o rimuovere il primo paziente § per inserire un paziente nella lista di attesa con una certa urgenza §per rimuovere un certo paziente con un dato nome §per rimuovere dalla lista di attesa tutti i pazienti che hanno urgenza > di un certo parametro intero n
16 Implementazione §Implementare le due classi usando una struttura dati OrderedList per realizzare la lista di attesa della classe Elenco §Nella progettazione della classe Paziente bisogna tenere conto del fatto che vogliamo memorizzare gli elementi usando OrderedList
17 Nota §Per le classi Elenco e Paziente e’ necessario corredare i metodi degli opportuni commenti che esprimano il loro significato) §Eventualmente anche commentare il significato delle varie scelte di progetto (p.e. var. d’istanza)