Programmazione e Progettazione Software Compito 23/07/2012
1) a) Si implementi una classe Lista che premetta di memorizzare qualsiasi oggetto usando i templates. Non usare la classe STL di libreria ma implementarla fin dal basso livello (usando puntatori). L'interfaccia della classe deve permettere le seguenti operazioni:
◦ Aggiungere un elemento in posizione N
◦ Eliminazione di tutti gli elementi
◦ Operator== che ritorna true se e solo se due liste sono uguali
b) Spiegare se si ritiene necessario fornire un copy costructor e operator= per la classe Lista c) Fornire un unittest per la classe realizzata.
d) Rendere qualsiasi Lista o sua sottoclasse copiabile usando il Design Pattern “Prototype”.
e) Implementare una sottoclasse di Lista che permette la rimozione di un elemento in coda alla lista.
2) Realizzare una classe Classifier che implementa un classificatore di testo che deriva da una classe astratta ClassifierBase che definisce l'interfaccia del classificatore.
Il costruttore della classe Classifier prende un insieme di parole chiave ognuna associata ad una categoria. Il classificatore prende in ingresso un documento testuale e risponde con le categorie a cui appartiene. La classificazione avviene controllando le parole nel documento.
Ogni volta che una parola chiave viene trovata nel documento, la categoria associata alla parola chiave deve essere una di quelle ritornate dal metodo di classificazione. Non devono essere ritornate categorie per le quali non sono state trovate parole chiave ed ogni categoria deve essere presente una sola volta tra quelle ritornate.
a) Definire un'opportuna interfaccia in ClassifierBase.
b) Definire la classe Documento.
c) Implementare la classe Classifier ed il metodo di classificazione in particolare.