17.04.2015 Views

TD 1 Design Patterns pour les Composants

TD 1 Design Patterns pour les Composants

TD 1 Design Patterns pour les Composants

SHOW MORE
SHOW LESS

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 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!