TD 1 Design Patterns pour les Composants
TD 1 Design Patterns pour les Composants
TD 1 Design Patterns pour les Composants
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
M1 – STL - <strong>Composants</strong> UPMC Février-Juin 2007<br />
T D 1<br />
D e s i g n P a t t e r n s p o u r l e s<br />
C o m p o s a n t s<br />
Dans ce <strong>TD</strong>, nous étudions la mise en oeuvre deux <strong>Design</strong> <strong>Patterns</strong> vus en cours:<br />
– Pattern Services Requis/Fournis <strong>pour</strong> l'abstraction/découplage<br />
– Pattern Communication Événementielle des Javabeans (variante de l'Observer) <strong>pour</strong> la<br />
communication 1 vers N<br />
Nous mettons en oeuvre ces deux patterns dans le cadre d'un serveur d'application de données<br />
météorologiques. L'architecture du système est séparée en trois parties:<br />
1) <strong>les</strong> fournisseurs de services de données, sur <strong>les</strong> stations météorologiques<br />
2) <strong>les</strong> serveurs qui rassemblent et diffusent <strong>les</strong> informations météo<br />
3) <strong>les</strong> clients du système<br />
Le découplage entre <strong>les</strong> parties 1) et 2) fait intervenir le design pattern Services Requis/Fournis<br />
La communication entre <strong>les</strong> parties 2) et 3) utilise le modèle événementiel des Javabeans<br />
E X E R C I C E 1 : S E R V I C E S M É T É O<br />
Question 1: Interfaces de service<br />
Dans le package meteo.service, définir deux interfaces de service TemperatureService et<br />
VentService permettant de récupérer des informations sur respectivement:<br />
1) la température enregistrée sur une station météo, en degrés celsius (type double)<br />
2) la vitesse (double en km/h) et la direction (int en degrés à partir du nord 0) du vent<br />
Définir également <strong>les</strong> interfaces de réquisition de ces services (méthode bind).<br />
Question 2 : Fournisseurs de service<br />
Décrire une définition de composant (classe Java) StationVent fournissant le service<br />
VentService. On supposera que la vitesse du vent se trouve dans l'intervalle 0-250km/h.<br />
Remarque 1 : <strong>les</strong> valeurs de direction et de vitesse de vent seront choisies au hasard.<br />
Remarque 2 : on supposera l'existence d'un deuxième fournisseur de service StationTemp.<br />
- 1/3 -
M1 – STL - <strong>Composants</strong> UPMC Février-Juin 2007<br />
Question 3 : Client de service<br />
Définir le composant MeteoServeur client des deux services météo.<br />
Ajouter une méthode step() de fonctionnement unitaire et effectuant l'interrogation des services<br />
(à chaque pas (« step »), on récupérera <strong>les</strong> informations météo et on <strong>les</strong> stockera dans des attributs.<br />
Question 3 : Programme principal<br />
Décrire le programme principal permettant de relier <strong>les</strong> fournisseurs et clients des services météo.<br />
E X E R C I C E 2 : C L I E N T S T V O N E E T N R V R A D I O<br />
Dans ce deuxième exercice, nous réalisons l'infrastructure de communication entre le serveur<br />
Météo et ses clients. Pour rendre la communication la plus souple possible, la station Météo et <strong>les</strong><br />
clients interagissent via la mode de communication « 1 vers N » des Javabeans.<br />
Question 1 : Evénements et interfaces d'écoute (listener)<br />
Dans le paquetage meteo.events, Définir deux nouveaux types d'événement : TemperatureEvent<br />
et VentEvent permettant d'acheminer <strong>les</strong> informations météo du serveur vers <strong>les</strong> clients.<br />
Définir également <strong>les</strong> deux interfaces d'écoute correspondantes.<br />
Question 2 : Clients<br />
Définir deux clients <strong>pour</strong> le serveur de Météo. Le premier, TVOne, ne s'intéressera qu'aux<br />
températures alors que le deuxième, NRVRadio, s'intéresse également aux informations sur le vent.<br />
Remarque: <strong>les</strong> clients se contenteront d'afficher des informations sur la sortie standard.<br />
Question 2 : Enregistrement des listeners et émission des<br />
événements<br />
Ajouter, dans la classe du serveur de météo, le code d'enregistrement (et de désenregistrement) des<br />
listeners <strong>pour</strong> <strong>les</strong> événements de température et de vent.<br />
Ajouter également deux méthodes sendTemperatureEvent et sendVentEvent réalisant l'envoi des<br />
événements vers <strong>les</strong> clients.<br />
- 2/3 -
M1 – STL - <strong>Composants</strong> UPMC Février-Juin 2007<br />
Question 3 : Fonctionnement du serveur<br />
Modifier la méthode step() du serveur de météo <strong>pour</strong> ajouter l'émission d'événements de<br />
température et/ou de vent en fonction des valeurs reçues.<br />
Remarque: on émettra un événement de météo uniquement si la valeur récupérée est différente de<br />
l'ancienne valeur stockée sur le serveur.<br />
Question 4 : Programme principal<br />
Modifier le programme principal de l'exercice 1 <strong>pour</strong> ajouter <strong>les</strong> deux clients ainsi que leur<br />
enregistrement auprès du serveur.<br />
- 3/3 -