Esercizi Programmazione e Progettazione Software
1. Una biblioteca utilizza un software per cercare i libri che ha in archivio. Un libro è rappresentato da una classe che contiene titolo, autore ed anno di pubblicazione. L'insieme dei libri è invece memorizzato in una classe Library che li tiene in un container stl a vostra scelta. Il costruttore della classe Library carica i dati dei libri da file ed inizializza tutti i dati membri, è necessario fornire solo la definizione di tale metodo ma non la sua implementazione.
Implementare la classe Libro ed i seguenti metodi della classe Library:
a) Ricercare se un libro è in biblioteca. Tale operazione supponiamo sia comune e deve essere implementata in modo efficiente.
b) Eliminare un libro.
c) Stampa dei libri in ordine alfabetico di titolo. Tale operazione supponiamo sia comune e deve essere implementata in modo efficiente.
2) a) Una classe Classifier implementa un classificatore di testo. Il costruttore della classe prende un insieme di parole (keywords) ognuna con associato un valore di rilevanza. Un documento è rappresentato da un insieme di parole memorizzato in un contenitore stl a vostra scelta. Un metodo Classify prende un documento in ingresso e decide se esso appartiene alla classe. In particolare, il documento appartiene alla classe se la somma delle rilevanze delle keywords contenute nel documento supera un certo valore N. Implementare la classe Classifier in modo efficiente e fornire un test per la classe stessa.
b) Fornire un semplice Makefile per compilare i sorgenti implementati e generare l'eseguibile (assumendo che ci sia un file classifier_main.cc contenente il main che non dovete realizzare).
3) Un sito di e-commerce vuole realizzare un sistema di notifica per i suoi utenti. Un utente osserva alcuni oggetti e vuole essere notificato quando il loro prezzo varia.
a) Realizzare le classi per implementare questo sistema (incluse le classi Oggetto ed Utente più altre eventuali).
b) Aggiungere una funzionalità che permette all'utente di specificare un prezzo target per ogni oggetto. Se il prezzo scende sotto il target stabilito, l'utente compra in modo automatico l'oggetto con un metodo void Utente::Compra(const Oggetto& oggetto), che non è necessario implementare. Fornire solo le differenze rispetto al punto a), non riscrivere l'intero sistema.