Ingegneria del Software - Esercitazione 4
Prima parte
Il seguente diagramma delle classi UML rappresenta una soluzione basata sul design pattern Observer
in cui sono presenti il soggetto concreto ClockTimer e due osservatori concreti,
ovvero un orologio analogico AnalogClock e un orologio digitale
DigitalClock:
Il soggetto concreto impartisce ogni secondo una notifica di aggiornamento che deve essere recepita dai due
osservatori, i quali visualizzeranno l'ora aggiornata mediante il metodo Draw().
Implementare in C# la soluzione rappresentata nel diagramma, definendo i metodi Draw()
delle classi AnalogClock e DigitalClock in maniera semplice,
ovvero senza disegnare effettivamente sullo schermo i due orologi, ma scrivendo semplicemente dei messaggi
testuali che contengono l'ora.
Realizzare inoltre una classe di test per verificare il corretto funzionamento della soluzione implementata.
Seconda parte
Realizzare una seconda versione della soluzione utilizzando il meccanismo dei
delegati ed
eventi specifico
del linguaggio C#.
Realizzare una quarta versione impiegando un oggetto
System.Timers.Timer
come cuore della classe
ClockTimer - anziché usare un
thread - e proteggendo opportunamente
le regioni critiche di tale classe per evitare l'accesso contemporaneo ai metodi
GetTime()/SetTime e
Start()/Stop() da parte di più thread.
Finalità dell'esercizio
Implementazione di un design pattern (Observer)
Uso dei thread
Uso dei delegati/eventi in C#
Delimitazione di regioni critiche thread-safe