TP1 : LES DESIGNS PATTERNS APPLIQUES AUX
SYSTEMES DISTRIBUES
PERIODE 4
MARIEM ZAOUALI | ESPRIMS 1
TP1 : Les designs patterns appliqués aux systèmes
distribués
Problème
Le but de se TP est de développer en Java, une simulation d’application distribuée.
Cette application doit masquer à l’utilisateur, le fait qu’elle se connecte à un serveur
distant et doit gérer tout en toute transparence. On veut que cette application soit
en mesure d’appliquer les bonnes pratiques de développement en suivant les
recommandations suivantes :
• Implémenter le pattern Abstract factory pour la création des demandes de
connexion au serveur distant
• Implémenter le pattern Interceptor
Implémentation du pattern Abstract factory
L’utilité du pattern
Le but de pattern Abstract Factory est de créer une famille d’objets sans avoir besoin
de connaître l’implémentation concrète permettant la création de l’objet. Ceci veut
dire que votre programme va pouvoir vous donner vers la fin un groupe d’objets sans
avoir à passer par l’instruction « new ». Elle est encapsulée.
Le diagramme de classES
Figure 1 Diagramme de classes du pattern Abstract Factory
Les participants au pattern sont les suivants :
TP1 : LES DESIGNS PATTERNS APPLIQUES AUX
SYSTEMES DISTRIBUES
PERIODE 4
MARIEM ZAOUALI | ESPRIMS 2
• AbstractFactory (FabriqueCnx): est une interface spécifiant les signatures e
méthodes créant différents produits :
o ConcreteFactoryA, ConcreteFactoryB (FabriqueCnxTcp,
FabriqueCnxUdp) sont les classes concrètes implantant les méthodes
créant les produits pour chaque famille de produit. Connaissant la
famille et le produit, elles sont capables de créer une instance du
produit pour cette famille.
• ProductA, ProductB (CnxServeurRPC, CnxSGBD) sont deux classes abstraites
des produits indépendamment de leur famille. Leurs familles sont introduites
dans leurs sous-classes concrètes ; Les classes concrètes sont :
CnxServeurRPC_TCP, CnxSGBD_TCP, CnxServeurRPC_UDP, CnxSGBD_UDP
• FactoryProvider est la classe qui fournira l’instance de la fabrique pour créer
les instances des objets.
Implémentation
NB : On rappelle que TCP est un mode de connexion synchrone
entre un client serveur, UDP est un mode de connexion asynchrone.
Ouvrir votre IDE pour écrire un programme en Java en suivant les instructions dans le
tableau 1 :
La classe/interface Le code à écrire
FabriqueCnx Une interface contenant les deux
méthodes createCnxServeurRPC et
createCnxSGBD
FabriqueCnxTcp, FabriqueCnxUdp Implémente l’interface Fabrique Cnx.
Dans ces deux classes, il faut
implémenter les méthodes qui font
l’affichage suivant (respectivement
dans la classe/méthode
corresponsante) :
Configuration de l’adresse du
serveruRPC/SGBD
Configuration du port
Etablissement de la connexion TCP/UDP
Connexion établie avec succès.
CnxServeurRPC, CnxSGBD Deux interfaces
CnxServeurRPC_TCP, CnxSGBD_TCP,
CnxServeurRPC_UDP, CnxSGBD_UDP
Implémentent les interfaces
précédentes, de sorte que chaque
interface est implémentée par deux
classes concrètes
FactoryProvider La méthode getFactory(int param)
TP1 : LES DESIGNS PATTERNS APPLIQUES AUX
SYSTEMES DISTRIBUES
PERIODE 4
MARIEM ZAOUALI | ESPRIMS 3
Si ce param == 1 : créer un objet de
type FabriqueCnx qui lance une
instanciation de FabriqueCnxTcp
Si ce param == 2 : créer un objet de
type FabriqueCnx qui lance une
instanciation de FabriqueCnxUDP
main Ajouter deux variables int statiques :
nbreCnxServeur=2 et nbreCnxSGBD =3
Dans la fonction main :
1. Créer une instance du Factory
provider qui s’appelle fa.
2. Demander à l’utilisateur quel
type de connexion il veut établir
3. Appeler maintenant getFactory()
4. Créer deux tableaux : le premier
s’appelle CnxSerTab de type
CnxServeurRPC et de taille
nbreCnxServeur, le deuxième
tableau s’appelle CnxSGBDTab
de type CnxSGBD et de taille
nbreCnxSGBD
5. Boucler, dans chaque tableau,
en appelant sur fa, la méthode
de création du produit (soit celle
qui crée CnxServeurRPCTCP ou
UDP ou celle qui crée
CnxSGBDTCP ou UDP)
Implémentation du pattern interceptor
L’utilité du pattern
Ce pattern est utilisé lorsque des systèmes ou des cadres logiciels veulent offrir un
moyen de modifier ou d'augmenter leur cycle de traitement habituel.
TP1 : LES DESIGNS PATTERNS APPLIQUES AUX
SYSTEMES DISTRIBUES
PERIODE 4
MARIEM ZAOUALI | ESPRIMS 4
Le diagramme de classes
Figure 2 Diagramme de classes du design pattern Interceptor
Les participants au pattern sont les suivants :
• Filter - va exécuter une tâche avant ou après l’exécution d’un gestionnaire
de requêtes
• Filter Chain - gère plusieurs filtres et les exécute suivant un ordre sur une
cible(target).
• Target - Target exécute les requêtes
• Filter Manager - gère les filtres et Filter Chain.
• Client - Client est l’objet qui envoie la requête à la cible (Target).
Implémentation
Continuez dans le même programme en suivant les instructions dans le tableau 2 :
La classe/interface Le code à écrire
Filter Une interface
AuthenticationFilter, DebugFilter Implémentent l’interface Filter. Dans ces
deux classes, implémenter
execute(String request) par des
messages d’affichage :
Un filtre Debug/authentification a été
ajouté + request !
Filter Chain Créer deux attributs privés :
Filters de type List<Filter>
TP1 : LES DESIGNS PATTERNS APPLIQUES AUX
SYSTEMES DISTRIBUES
PERIODE 4
MARIEM ZAOUALI | ESPRIMS 5
Target de type Target
addFilter(Filter filter) appelle la méthode
de la List filters pour ajouter filter
execute(String request) : va parcourir la
List Filters, et lance pour chaque case, la
méthode execute en passant request
en paramètre
en sortant de la boucle, appellez sur
l’objet target, la fonction executez en
prenant en paramètre, le paramètre
request
setTarget(Target target), affecte l’objet
target à l’attribut target de la classe.
Target Dans la méthode execute(String
request), faites l’affichage suivant
En cours d’exécution de + request
FilterManager Contient un objet de type FilterChain,
un constructeur avec un paramètre
Target : on instance l’objet de type
FilterChain sur lequel on appelle
setTarget.
Deux autres procédures à ajouter :
setFilter(Filter filter) qui appelle la
méthode addFilter de l’attribut
filterChain.
La procédure filterRequest qui appelle
la méthode execute de filterChain
main 1. Instancier un FilterManager (dans
ce constructeur, on appelle new
Target())
2. Appeler sur l’objet de Filter
manager deux fois la méthode
setFilter, pour ajouter un filtre de
type AuthenticationFilter puis un
autre de type DebugFilter
3. Appeler filterRequest
Le lien entre les deux manipulations
Votre tâche maintenant est de modifier le main, de sorte que vous ne permettez au
filterManager de commencer son traitement que lorsque votre connexion au
ServeurRPC ou SGBD est réussie et qu’il reste encore des instances disponibles.

Tp1 design patternappliques

  • 1.
    TP1 : LESDESIGNS PATTERNS APPLIQUES AUX SYSTEMES DISTRIBUES PERIODE 4 MARIEM ZAOUALI | ESPRIMS 1 TP1 : Les designs patterns appliqués aux systèmes distribués Problème Le but de se TP est de développer en Java, une simulation d’application distribuée. Cette application doit masquer à l’utilisateur, le fait qu’elle se connecte à un serveur distant et doit gérer tout en toute transparence. On veut que cette application soit en mesure d’appliquer les bonnes pratiques de développement en suivant les recommandations suivantes : • Implémenter le pattern Abstract factory pour la création des demandes de connexion au serveur distant • Implémenter le pattern Interceptor Implémentation du pattern Abstract factory L’utilité du pattern Le but de pattern Abstract Factory est de créer une famille d’objets sans avoir besoin de connaître l’implémentation concrète permettant la création de l’objet. Ceci veut dire que votre programme va pouvoir vous donner vers la fin un groupe d’objets sans avoir à passer par l’instruction « new ». Elle est encapsulée. Le diagramme de classES Figure 1 Diagramme de classes du pattern Abstract Factory Les participants au pattern sont les suivants :
  • 2.
    TP1 : LESDESIGNS PATTERNS APPLIQUES AUX SYSTEMES DISTRIBUES PERIODE 4 MARIEM ZAOUALI | ESPRIMS 2 • AbstractFactory (FabriqueCnx): est une interface spécifiant les signatures e méthodes créant différents produits : o ConcreteFactoryA, ConcreteFactoryB (FabriqueCnxTcp, FabriqueCnxUdp) sont les classes concrètes implantant les méthodes créant les produits pour chaque famille de produit. Connaissant la famille et le produit, elles sont capables de créer une instance du produit pour cette famille. • ProductA, ProductB (CnxServeurRPC, CnxSGBD) sont deux classes abstraites des produits indépendamment de leur famille. Leurs familles sont introduites dans leurs sous-classes concrètes ; Les classes concrètes sont : CnxServeurRPC_TCP, CnxSGBD_TCP, CnxServeurRPC_UDP, CnxSGBD_UDP • FactoryProvider est la classe qui fournira l’instance de la fabrique pour créer les instances des objets. Implémentation NB : On rappelle que TCP est un mode de connexion synchrone entre un client serveur, UDP est un mode de connexion asynchrone. Ouvrir votre IDE pour écrire un programme en Java en suivant les instructions dans le tableau 1 : La classe/interface Le code à écrire FabriqueCnx Une interface contenant les deux méthodes createCnxServeurRPC et createCnxSGBD FabriqueCnxTcp, FabriqueCnxUdp Implémente l’interface Fabrique Cnx. Dans ces deux classes, il faut implémenter les méthodes qui font l’affichage suivant (respectivement dans la classe/méthode corresponsante) : Configuration de l’adresse du serveruRPC/SGBD Configuration du port Etablissement de la connexion TCP/UDP Connexion établie avec succès. CnxServeurRPC, CnxSGBD Deux interfaces CnxServeurRPC_TCP, CnxSGBD_TCP, CnxServeurRPC_UDP, CnxSGBD_UDP Implémentent les interfaces précédentes, de sorte que chaque interface est implémentée par deux classes concrètes FactoryProvider La méthode getFactory(int param)
  • 3.
    TP1 : LESDESIGNS PATTERNS APPLIQUES AUX SYSTEMES DISTRIBUES PERIODE 4 MARIEM ZAOUALI | ESPRIMS 3 Si ce param == 1 : créer un objet de type FabriqueCnx qui lance une instanciation de FabriqueCnxTcp Si ce param == 2 : créer un objet de type FabriqueCnx qui lance une instanciation de FabriqueCnxUDP main Ajouter deux variables int statiques : nbreCnxServeur=2 et nbreCnxSGBD =3 Dans la fonction main : 1. Créer une instance du Factory provider qui s’appelle fa. 2. Demander à l’utilisateur quel type de connexion il veut établir 3. Appeler maintenant getFactory() 4. Créer deux tableaux : le premier s’appelle CnxSerTab de type CnxServeurRPC et de taille nbreCnxServeur, le deuxième tableau s’appelle CnxSGBDTab de type CnxSGBD et de taille nbreCnxSGBD 5. Boucler, dans chaque tableau, en appelant sur fa, la méthode de création du produit (soit celle qui crée CnxServeurRPCTCP ou UDP ou celle qui crée CnxSGBDTCP ou UDP) Implémentation du pattern interceptor L’utilité du pattern Ce pattern est utilisé lorsque des systèmes ou des cadres logiciels veulent offrir un moyen de modifier ou d'augmenter leur cycle de traitement habituel.
  • 4.
    TP1 : LESDESIGNS PATTERNS APPLIQUES AUX SYSTEMES DISTRIBUES PERIODE 4 MARIEM ZAOUALI | ESPRIMS 4 Le diagramme de classes Figure 2 Diagramme de classes du design pattern Interceptor Les participants au pattern sont les suivants : • Filter - va exécuter une tâche avant ou après l’exécution d’un gestionnaire de requêtes • Filter Chain - gère plusieurs filtres et les exécute suivant un ordre sur une cible(target). • Target - Target exécute les requêtes • Filter Manager - gère les filtres et Filter Chain. • Client - Client est l’objet qui envoie la requête à la cible (Target). Implémentation Continuez dans le même programme en suivant les instructions dans le tableau 2 : La classe/interface Le code à écrire Filter Une interface AuthenticationFilter, DebugFilter Implémentent l’interface Filter. Dans ces deux classes, implémenter execute(String request) par des messages d’affichage : Un filtre Debug/authentification a été ajouté + request ! Filter Chain Créer deux attributs privés : Filters de type List<Filter>
  • 5.
    TP1 : LESDESIGNS PATTERNS APPLIQUES AUX SYSTEMES DISTRIBUES PERIODE 4 MARIEM ZAOUALI | ESPRIMS 5 Target de type Target addFilter(Filter filter) appelle la méthode de la List filters pour ajouter filter execute(String request) : va parcourir la List Filters, et lance pour chaque case, la méthode execute en passant request en paramètre en sortant de la boucle, appellez sur l’objet target, la fonction executez en prenant en paramètre, le paramètre request setTarget(Target target), affecte l’objet target à l’attribut target de la classe. Target Dans la méthode execute(String request), faites l’affichage suivant En cours d’exécution de + request FilterManager Contient un objet de type FilterChain, un constructeur avec un paramètre Target : on instance l’objet de type FilterChain sur lequel on appelle setTarget. Deux autres procédures à ajouter : setFilter(Filter filter) qui appelle la méthode addFilter de l’attribut filterChain. La procédure filterRequest qui appelle la méthode execute de filterChain main 1. Instancier un FilterManager (dans ce constructeur, on appelle new Target()) 2. Appeler sur l’objet de Filter manager deux fois la méthode setFilter, pour ajouter un filtre de type AuthenticationFilter puis un autre de type DebugFilter 3. Appeler filterRequest Le lien entre les deux manipulations Votre tâche maintenant est de modifier le main, de sorte que vous ne permettez au filterManager de commencer son traitement que lorsque votre connexion au ServeurRPC ou SGBD est réussie et qu’il reste encore des instances disponibles.