Ingegneria del Software - Esercitazione 5

Prima parte

Partendo dalla soluzione della esercitazione precedente, si vuole realizzare una libreria dinamica chiamata ClockTimerLibrary[.dll] per gestire più orologi in maniera sincronizzata.
In particolare la libreria sarà realizzata come un progetto contenente la classe ClockTimer, creata nell'ultima versione della esercitazione precedente, e la classe TimeSpanEventArgs, usata per comunicare l'ora attraverso gli eventi NotifyTick del soggetto ClockTimer. Le due classi ClockTimer e TimeSpanEventArgs dovranno essere pubbliche ed appartenere al namespace Clocks.
 
Le classi rimanenti sono AnalogClock e DigitalClock che rappresentano gli osservatori del timer definito in libreria, e la classe Program che contiene la funzione di avvio Main().
Tali classi dovranno invece rimanere all'interno di un progetto di tipo console, che potrebbe anche essere il progetto originale della soluzione precedente, dal quale verranno rimosse le classi ClockTimer e TimeSpanEventArgs, e che verrà rinominato ClockShell.
Al progetto ClockShell dovrà chiaramente essere collegata la libreria ClockTimerLibrary, per poter continuare ad avere un riferimento alle suddette classi.

Seconda parte

Nella stessa soluzione in cui sono presenti la libreria e il progetto console, si vuole aggiungere un terzo progetto di tipo Windows Form chiamato ClockGUI.
La finestra principale di tale progetto dovrà contenere una casella di testo ed un bottone per inserire ed impostare l'ora di partenza oltre ad un bottone Start e un bottone Stop utili ad avviare/arrestare un oggetto di classe ClockTimer, ove la classe sarà sempre referenziata attraverso un collegamento alla libreria ClockTimerLibrary.
 
All'interno di tale progetto, inoltre, dovranno essere ridefinite due classi chiamate AnalogClock e DigitalClock, come nel progetto per console, ma dovranno essere implementate in maniera tale da rappresentare l'ora corrente su componenti visuali presenti nella stessa form principale.
Per quanto riguarda DigitalClock, l'ora potrà essere scritta su una etichetta di testo.
La rappresentazione delle lancette di ore, minuti e secondi di AnalogClock, invece, è piuttosto complessa, quindi possiamo decidere di usare una rappresentazione alternativa semplificata. Ad esempio la stessa rappresentazione che usiamo per DigitalClock.
 
Ai due clock saranno infine associate due checkbox attraverso le quali sarà possibile agganciarsi e sganciarsi dagli eventi notificati da ClockTimer.

Finalità dell'esercizio

Implementazione librerie dinamiche
Implementazione applicazioni visuali
Separazione logica funzionale (libreria) da presentazione (console e GUI)

Soluzione