Programmazione II Esercitazione del 25 marzo 2014 ================================ 1) Il file OrderedIntList.java definisce l'interfaccia OrderedIntList, che costituisce la specifica del tipo di dati astratto da implementare. Leggere con attenzione la specifica. Il file contiene anche la definizione delle classi di eccezioni da usare. 2) I file IntLinkedList.java e IntBST.java contengono ognuno una parte iniziale di un'implementazione del TDA, usando una lista concatenata (IntLinkedList) o un albero binario di ricerca (IntBST). L'esercitazione consiste nel completare almeno una di queste due implementazioni, seguendo i punti successivi. (Suggerimento: IntLinkedList e' leggermente piu' semplice di IntBST). 3) L'implementazione parziale comprende la definizione delle variabili di istanza, il costruttore, e un commento contenente la funzione di astrazione e l'invariante di rappresentazione. Questa parte dell'implementazione NON PUO' ESSERE MODIFICATA. Analizzare con attenzione l'invariante: la rappresentazione puo' contenere elementi duplicati? 4) Fornire l'implementazione di tutti i metodi dell'interfaccia, compreso toString(), che deve realizzare la funzione di astrazione, e repOk(), che deve verificare l'invariante di realizzazione. Durante la scrittura dei metodi, sfruttare un semplice programma di test che crea un insieme ordinato di interi e invoca su di esso i metodi gia' implementati. Per poter compilare ed eseguire questo programma di test, fornire inizialmente un'implementazione parziale dei metodi, per esempio facendo restituire un valore default. 5) Per ogni metodo implementato, dimostrare (con carta e penna) che se l'invariante era vero prima dell'esecuzione del metodo, allora lo e' anche dopo l'esecuzione. 6) Sfruttando la funzione di astrazione, dimostrare la correttezza dell'implementazione di tutte le operazioni. 7) Possibili ulteriori estensioni: 7.1) Scrivere un programma che interattivamente chiede all'utente quali operazioni eseguire su un insieme, stampando dopo ogni operazione il risultato e lo stato dell'insieme. Usare la classe Input.java per input da tastiera. La classe EuroInput.java mostra un esempio di uso. 7.2) Utilizzare le asserzioni di Java per controllare che l'invariante di rappresentazione sia preservato. L'istruzione assert repOk() : "commento"; dove "commento" e' una stringa a piacere, valuta repOk() e lancia un'eccezione se il risultato e' false. Per abilitare le asserzioni, occorre lanciare l'interprete con l'opzione "-ea", es: java -ea IntBSTtest ==============================================