Homework 5 Corso di Fondamenti di Informatica II BIAR2 (Ing. Informatica e Automatica) e BSIR2 (Ing. dei Sistemi) A.A. 2010/2011 12 Gennaio 2011 Sommario Questo documento fornisce informazioni relative al quinto homework relativo al corso di Fondamenti di Informatica II (AA 2010/2011). 1 Il problema Si vuole realizzare una classe Java che implementa un dizionario mediante BST. In particolare il dizionario deve essere in grado di memorizzare coppie chiave-valore rispettivamente di tipo int e String. 2 Implementazione del risolutore Si richiede di realizzare le seguenti classi: • La classe pubblica Homework5Impl che estende Homework5 e che con- tiene il metodo di risoluzione dell'homework. • La classe interna BSTDictionaryImpl che estende BSTDictionary e che rappresenta un dizionario implementato mediante albero binario di ricerca (BST). 1 2.1 2.1.1 Implementazione La classe risolutore: Homework5Impl Realizzare una classe Homework5Impl che implementa la classe astratta Homework5 (fornita nel materiale di supporto - le Homework5.java) e che ne ridenisce i seguenti metodi: • public BSTDictionary createEmptyDictionary() Il metodo restituisce un nuovo dizionario inizialmente vuoto. Il metodo al suo interno potra' utilizzare la classe BSTDictionaryImpl descritta nella successiva sotto-sezione. • public Set<Integer> commonKeys (BSTDictionary d1, BSTDictionary d2) Il metodo restituisce l'insieme delle chiavi comuni ai due dizionari. In caso di chiavi duplicate in uno o entrambi i dizionari deve restituire un unico valore per la chiave. Il metodo dovra' avere costo lineare rispetto al massimo tra le dimensioni dei due dizionari. 2.1.2 Dizionario (BSTDictionaryImpl) Realizzare la classe interna BSTDictionaryImpl che implementa BSTDictionary e che rappresenta un dizionario implementato mediante BST. In particolare il dizionario accetta chiavi (anche multiple) di tipo intero e valori di tipo String. Per la descrizione dettagliata dei metodi fare riferimento alle API fornite. Rappresentazione dei nodi Per la rappresentazione dei nodi dell'albero BST si deve utilizzare la classe BSTNode fornita nel materiale di supporto e che rappresenta un singolo nodo dell'albero. In ogni nodo le chiavi del sottoalbero sinistro devono essere strettamente minori del valore della chiave del nodo mentre nel sottoalbero destro le chiavi dovranno essere maggiori o uguali alla stessa. In conseguenza di cio' gli eventuali valori con chiave duplicata dovranno essere inseriti nel ramo destro di ciascun nodo. 2 2.2 Classi di supporto Le classi BSTDictionary, BSTNode e Homework5 sono forniti nel materiale di supporto e documentati attraverso le API. 3 Progettazione, test e sottomissione dei contributi 3.1 Validazione dell'input La verica dei contributi inviati verra' fatta utilizzando input di test validi. Lo studente quindi non dovra' preoccuparsi controllare la correttezza dell'input fornito. La verica sara' tesa a controllare che tutti i metodi implementati siano corretti e verra' eettuata costruendo, a partire dai metodi di BSTDictionary alberi di test su cui invocare poi i vari metodi disponibili. 3.2 Vincoli per l'implementazione Anchè il contributo possa essere considerato valido (e quindi sottoposto a valutazione mediante test automatico) è necessario che siano vericate le seguenti condizioni: • Tutto il codice deve essere contenuto nel le Homework5Impl.java Il le deve contenere la classe public Homework5Impl che: ∗ estende la classe astratta Homework5 e ne implementa i metodi astratti ∗ ha come unico costruttore il costruttore senza argomenti. ∗ si trova nel package di default (non devono cioè trovarsi all'interno di nessun package specico ) ∗ puo' contenere classi interne e metodi aggiuntivi rispetto a quelli richiesti ∗ deve contenere la classe interna BSTDictionaryImpl Nel le Homework5Impl.java non deve essere inserita nessuna delle classi e interfacce fornite come materiale di supporto. • Si possono realizzare tutte le Java Foundation Classes classi disponibili in Java 6 SE di Sun. 3 • Qualora fosse necessario rilanciare eccezioni, utilizzare solo eccezioni di Runtime (es. RuntimeException). • Non e' consentito il ricorso a librerie esterne o a metodi nativi. • Non e' consentito l'utilizzo del metodo System.exit(...) per terminare il programma. • Non e' consentito modicare in nessun modo la classe Homework5 e le altre classi di supporto fornite. Il non rispetto di uno dei vincoli precedenti rende automaticamente NON VALIDO il contributo che quindi verra' scartato. 3.3 Consegna dei contributi e valutazione I contributi potranno essere inviati mediante modulo online direttamente dal sito del corso (area Laboratorio) a questo indirizzo. Le date di scadenza sono riportate sulla pagina stessa web. I contributi inviati verranno successivamente valutati attraverso un sistema di valutazione automatico secondo quanto riportato nel regolamento per gli homework. NB: Consegnare solamente il le sorgente Homework4Impl.java, evitando invece si spedire i le .class o i le di supporto forniti. 4