Ce Support de cours Spring contient :
- Architecture JEE (Over view)
- Spring Overview
- Spring IOC
- Spring MVC
- Spring Integration (RMI, JaxWS, JaxRS, JMS, JMX,...)
- Spring Security
Bon apprentissage à tous
Ce Support explique quelques concepts de base de NodeJS et montre comment mettre en oeuvre la technologie NodeJS pour développer la partie Backend d'une application.
Les vidéos des démonstrations sont publiées sur les adresse suivantes :
- https://www.youtube.com/watch?v=-X_C1tS5-9Y
- https://www.youtube.com/watch?v=rE-xRH28m0s
- https://www.youtube.com/watch?v=tnxjkTvWoKA
Cette série explique les éléments suivants :
- Architecture Web
- Modèles Multi-Threads avec les entrées sorties bloquantes
- Modèles Single Thread avec les entrées sortie non bloquantes
-Technologie Node JS
- Comment créer une simple application Node JS avec java Script
- Architecture du Framwork Express
- Comment créer une application NodeJS avec Type Script
- Comment écrire des tests unitaires avec Jest
- Quelques concepts sur MongoDb
- Comment Créer une API Rest avec NodeJS, Express et MongoDb
- Comment tester l'API Rest
- Comment Créer la partie FrontEnd avec Angular.
Même si la qualité audio n'est pas bonne, ses vidéos peuvent aider ceux qui débutent dans NodeJS en attendant d'autres vidéos avec plus qualité audio et de contenu.
Bonne lecture
Exemple d'application qui montre comment utiliser les bonnes pratiques de JEE pour développer un site web de commerce électronique en utilisant les outils :
- Eclipse comme environnement de développement
- Maven comme outil d’intégration
- JUnit comme Framework des tsts unitaire
- Spring IOC pour l'inversion de contrôle
- Spring MVC pour la couche web
- Spring Security pour la sécurité
- JPA, Hibernate
- Web Service SOAP
- Web Service REST
- Service RMI
Un support de cours complet sur l'architecture JEE et l'industrialisation du génie logiciel. Ce support contient les parties suivantes :
- Tendances du génie logiciel
- Architecture JEE
- Services de l'infrastructure JEE (jdbc, jndi, rmi,servlet, jsp, jstl, jsf,EJB, JaxWS, JaxRS, JMS, JMX, ....)
- Maven : Outil d'industrialisation du génie logiciel
- Junit : Test Unitaires
- Hibernate
- Spring IOC et Spring MVC
- Struts 2
Bon apprentissage à tous
Maven
Support de cours EJB :
- Architecture JEE
- Séparer le code métier et le code technique
- Inversion de contrôle
- EJB session
- EJB Entity
- Mise en oeuvre des projets EJB
- EJB et Web services
- JMS
- MDB
- Gestion de transactions avec EJB
- Application
Séminaire sur Machines, Deep Learning For Web Mobile and Embedded Application with DL4J and TFJS :
Les vidéos de ce séminaire sont publiée sur les adresses suivantes :
- https://www.youtube.com/watch?v=uGSa4NigFKs
- https://www.youtube.com/watch?v=2yRAu78slgc
- https://www.youtube.com/watch?v=1ThjK3xLWII
- https://www.youtube.com/watch?v=N7LCa6aiqFs
Ce séminaire a été animé à l’ENSET de Mohammedia, dans le cadre du Projet Européen H2020 CybSPEED (Cyber Physical Systems for Pedagogical Rehabilitation in Special Education) dans lequel notre laboratoire de recherche SSDIA (Signaux, Systèmes Distribués et Intelligence Artificielle) est partenaire aux cotés des pays partenaires (France, Espagne, Grèce, Bulgarie, Japan et Chillie). Un projet Multi-disciplinaire autour de l'Intelligence Artificielle, visant à créer un robot destiné à assister les personnes à besoins spécifiques, en particulier les personnes atteintes par la maladie de l’autisme. Ce séminaire traite deux thématiques principales Lattice Computing animé par le professeur Vassillis Kaburlasos, EMaTTech, KAVALA, GRECE et Outils de mise en oeuvre de Machines et Deep Learning pour les applications Web Mobiles et embarquées, animé par moi même. Ce séminaire a un caractère de formation, de sensibilisation et de maîtrise des outils de développement des algorithmes de l'IA pour un public hétérogène Multi-disciplinaire (Informatique, Génie Electrique, Génie Mécanique, Ingénierie Pédagogique, Biologie, Chimie, etc..) constitué principalement des doctorants de notre Labo SSDIA, d'autres Labo affiliés au CeDOC de la FST de Mohammedia ainsi que des enseignants chercheurs de l'ENSET, de EMaTTech Kavala, Grèce et d'autres enseignants chercheurs venant de d'autres centres comme CRMF de Marrakech.
Ce séminaire vise particulièrement à expliquer quelques concepts liés à l’intelligence artificielle. Principalement Machines et Deep Learning et comment mettre en œuvre les Frameworks de machines et deep lerning dans des applications Web, Mobile et embarquées en utilisant Principalement Deeplearning4J pour les applications Java coté backend ou coté FrontEnd Desktop, Web ou Mobiles Android, et TensorFlowJS pour les applications Java Scripts coté Browser Web et Coté Applications Mobiles Hybrides ou NodeJS coté Backend.
Cette série de vidéo aborde les éléments suivants :
• Concepes généraux de l’Intelligence Artificielle, L’IA Distribuée et Systèmes Multi Agents
• Concepts fondamentaux de Machines et Deep Learning
• Réseaux de neurones artificiels : MLP, CNN
• Période d’incertitude des réseaux de neurones
• Catalyseur de l’Intelligence Artificielle
o Architectures Parallèles GPU (CUDA, OpenCL)
o Systèmes Distribués
o Application Mobile et IOT
o Algorithmes de MDL
o Framework de MDL
• Machines et Deep Learning avec TensorFlowJS : Architecture
o Architecture et Mise en oeuvre
• Machines et Deep Learning avec le Framework DL4J
o Architecture et Mise en oeuvre
The document discusses distributed computing and caching with Hazelcast. It describes Hazelcast as an open-source Java middleware that allows creating a distributed in-memory data grid (IMDG). Hazelcast partitions and replicates data across nodes to provide scalable distributed data storage and processing. It implements common data structures like maps, queues, sets, and lists in a distributed manner to improve performance and scalability for distributed systems.
Ce support explique les concepts de bases du principe de l'inversion de contrôle et d'injections des dépendances.
Les concepts les plus importants à comprendre par les futurs ingénieurs du génie Logiciel.
Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Se support présente l'outil d'intégration Maven dans le processus d'industrialisation du génie logiciel. Tout ce qu'il faut savoir sur maven.
La deuxième partie de ce cours traite la mise en oeuvre de maven dans des projets basés sur JPA, Hibernate, Spring et Struts.
Bon apprentissage à tous
Exemple d'application qui montre comment utiliser les bonnes pratiques de JEE pour développer un site web de commerce électronique en utilisant les outils :
- Eclipse comme environnement de développement
- Maven comme outil d’intégration
- JUnit comme Framework des tsts unitaire
- Spring IOC pour l'inversion de contrôle
- Spring MVC pour la couche web
- Spring Security pour la sécurité
- JPA, Hibernate
- Web Service SOAP
- Web Service REST
- Service RMI
Un support de cours complet sur l'architecture JEE et l'industrialisation du génie logiciel. Ce support contient les parties suivantes :
- Tendances du génie logiciel
- Architecture JEE
- Services de l'infrastructure JEE (jdbc, jndi, rmi,servlet, jsp, jstl, jsf,EJB, JaxWS, JaxRS, JMS, JMX, ....)
- Maven : Outil d'industrialisation du génie logiciel
- Junit : Test Unitaires
- Hibernate
- Spring IOC et Spring MVC
- Struts 2
Bon apprentissage à tous
Maven
Support de cours EJB :
- Architecture JEE
- Séparer le code métier et le code technique
- Inversion de contrôle
- EJB session
- EJB Entity
- Mise en oeuvre des projets EJB
- EJB et Web services
- JMS
- MDB
- Gestion de transactions avec EJB
- Application
Séminaire sur Machines, Deep Learning For Web Mobile and Embedded Application with DL4J and TFJS :
Les vidéos de ce séminaire sont publiée sur les adresses suivantes :
- https://www.youtube.com/watch?v=uGSa4NigFKs
- https://www.youtube.com/watch?v=2yRAu78slgc
- https://www.youtube.com/watch?v=1ThjK3xLWII
- https://www.youtube.com/watch?v=N7LCa6aiqFs
Ce séminaire a été animé à l’ENSET de Mohammedia, dans le cadre du Projet Européen H2020 CybSPEED (Cyber Physical Systems for Pedagogical Rehabilitation in Special Education) dans lequel notre laboratoire de recherche SSDIA (Signaux, Systèmes Distribués et Intelligence Artificielle) est partenaire aux cotés des pays partenaires (France, Espagne, Grèce, Bulgarie, Japan et Chillie). Un projet Multi-disciplinaire autour de l'Intelligence Artificielle, visant à créer un robot destiné à assister les personnes à besoins spécifiques, en particulier les personnes atteintes par la maladie de l’autisme. Ce séminaire traite deux thématiques principales Lattice Computing animé par le professeur Vassillis Kaburlasos, EMaTTech, KAVALA, GRECE et Outils de mise en oeuvre de Machines et Deep Learning pour les applications Web Mobiles et embarquées, animé par moi même. Ce séminaire a un caractère de formation, de sensibilisation et de maîtrise des outils de développement des algorithmes de l'IA pour un public hétérogène Multi-disciplinaire (Informatique, Génie Electrique, Génie Mécanique, Ingénierie Pédagogique, Biologie, Chimie, etc..) constitué principalement des doctorants de notre Labo SSDIA, d'autres Labo affiliés au CeDOC de la FST de Mohammedia ainsi que des enseignants chercheurs de l'ENSET, de EMaTTech Kavala, Grèce et d'autres enseignants chercheurs venant de d'autres centres comme CRMF de Marrakech.
Ce séminaire vise particulièrement à expliquer quelques concepts liés à l’intelligence artificielle. Principalement Machines et Deep Learning et comment mettre en œuvre les Frameworks de machines et deep lerning dans des applications Web, Mobile et embarquées en utilisant Principalement Deeplearning4J pour les applications Java coté backend ou coté FrontEnd Desktop, Web ou Mobiles Android, et TensorFlowJS pour les applications Java Scripts coté Browser Web et Coté Applications Mobiles Hybrides ou NodeJS coté Backend.
Cette série de vidéo aborde les éléments suivants :
• Concepes généraux de l’Intelligence Artificielle, L’IA Distribuée et Systèmes Multi Agents
• Concepts fondamentaux de Machines et Deep Learning
• Réseaux de neurones artificiels : MLP, CNN
• Période d’incertitude des réseaux de neurones
• Catalyseur de l’Intelligence Artificielle
o Architectures Parallèles GPU (CUDA, OpenCL)
o Systèmes Distribués
o Application Mobile et IOT
o Algorithmes de MDL
o Framework de MDL
• Machines et Deep Learning avec TensorFlowJS : Architecture
o Architecture et Mise en oeuvre
• Machines et Deep Learning avec le Framework DL4J
o Architecture et Mise en oeuvre
The document discusses distributed computing and caching with Hazelcast. It describes Hazelcast as an open-source Java middleware that allows creating a distributed in-memory data grid (IMDG). Hazelcast partitions and replicates data across nodes to provide scalable distributed data storage and processing. It implements common data structures like maps, queues, sets, and lists in a distributed manner to improve performance and scalability for distributed systems.
Ce support explique les concepts de bases du principe de l'inversion de contrôle et d'injections des dépendances.
Les concepts les plus importants à comprendre par les futurs ingénieurs du génie Logiciel.
Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Se support présente l'outil d'intégration Maven dans le processus d'industrialisation du génie logiciel. Tout ce qu'il faut savoir sur maven.
La deuxième partie de ce cours traite la mise en oeuvre de maven dans des projets basés sur JPA, Hibernate, Spring et Struts.
Bon apprentissage à tous
Support Complet sur la technologie EJB 3.1. Ce cours Traite l'architecture JEE. Les différents types EJB (Session, Entity, MDB). Des exemple complets sont aussi présentés.
Applications Android - cours 12 : Persistance de données SQLiteAhmed-Chawki Chaouche
Connaître les sources de données possibles sous Android
Mettre en œuvre l’API Helper pour exploiter une BD SQLite
Persister des données dans une BD SQLite
Quelle place pour le framework Rails dans le développement d'application web5pidou
Cette présentation a été réalisée dans le cadre des Rencontres Mondiales décentralisées du Logiciel Libre (RMLLd) qui se sont déroulées du 1er au 3 Juillet 2011 à Saint-Joseph (Ile de la Réunion).
real-time GPS navigation system: GPS satellite controller on an exploration m...larbaoui
Developed a real-time GPS navigation system: GPS satellite controller on an exploration mission.
-Implemented under the real time operating system QNX
-Implemented in TrueTime (MATLAB/Simulink-based simulator)
Tester unitairement une application javaAntoine Rey
Présente les différents types de tests automatisés, les objectifs des tests unitaires, les stratégies de mise en œuvre, les bonnes pratiques, les difficultés, ce qu'est un mock, différents outils (Unitils, Mockito, DbUnit, Spring Test) et des exemples de tests (DAO et contrôleurs Spring MVC), sans oublier le test de code legacy.
3. PPaatttteerrnn SSttaatt
Le comportement des méthodes d'un objet
dépendent souvent de l‘état de celui-ci.
Cet état est en général représente par les
attributs de l'objet.
Cependant, plus l'objet peut prendre d‘états
comportementaux distincts, plus la
structuration de l'objet est complexe.
Le design pattern état est la meilleure
solution pour bien structurer et représenter
les différents états d'un objet ainsi que les
transitions entre ces états sous une forme
orientée objet.
[email protected]
4. EExxeemmppllee ddee pprroobbllèèmmee
• Un avion peut être dans l'un des trois états suivants :
• soit dans le garage,
4
• soit sur la piste,
• soit en l'air.
• Lorsqu'il est dans le garage, la méthode sortirDuGarage permet de
passer dans l‘état sur la piste .
• Lorsqu'il est sur la piste, la méthode entrerAuGarage permet de passer
dans l‘état dans le garage
• La méthode décoller permet de passer dans l‘état en l'air.
• Lorsqu'il est en l'air, la méthode atterrir permet de passer dans l‘état sur
la piste.
• Les autres combinaisons Etats - Méthodes génèrent une erreur comme par
exemple, invoquer décoller lorsque l'avion est dans le garage.
5. PPaatttteerrnn SSttaatt
Catégorie :
◦ Comportement
Objectif du pattern
◦ CChhaannggeerr llee ccoommppoorrtteemmeenntt dd''uunn oobbjjeett sseelloonn ssoonn ééttaatt
interne.
Résultat :
◦ Le Design Pattern permet d'isoler les
algorithmes propres à chaque état d'un objet.
[email protected]
6. Design pattern EEttaatt oouu SSttaattee
Le pattern Etat permet de déléguer le comportement
d'un objet dans un autre objet. Cela permet de changer
le comportement de l'objet en cours d'exécution et de
simuler un changement de classe.
6
7. RRaaiissoonn dd’’uuttiilliissaattiioonn
Un objet a un fonctionnement différent selon son état interne. Son
état change selon les méthodes appelées.
Cela peut être un document informatique. Il a comme fonctions ouvrir,
modifier, sauvegarder ou fermer. Le
comportement de ces méthodes change selon l'état du document.
LLeess ddiifffféérreennttss ééttaattss iinntteerrnneess ssoonntt cchhaaccuunn rreepprréésseennttéé ppaarr uunnee ccllaassssee
état (ouvert, modifié, sauvegardé et fermé).
Les états possèdent des méthodes permettant de réaliser les
opérations et de changer d'état (ouvrir, modifier,sauvegarder et
fermer). Certains états bloquent certaines opérations (modifier dans
l'état fermé).
L'objet avec état maintient une référence vers l'état actuel. Il présente
les opérations à la partie cliente.
[email protected]
8. RReessppoonnssaabbiilliittééss
ClasseAvecEtat : est une classe avec état. Son
comportement change en fonction de son état. La partie
changeante de son comportement est déléguée à un objet
Etat.
Etat : définit l'interface d'un comportement d'un état.
EEttaattAA,, EEttaattBB eett EEttaattCC :: ssoonntt ddeess ssoouuss--ccllaasssseess ccoonnccrrèètteess
de l'interface Etat. Elles implémentent des méthodes qui
sont associées à un Etat.
[email protected]
10. IImmpplléémmeennttaattiioonn
/* Etat.java */
public abstract class Etat {
protected ClasseAvecEtat classeAvecEtat;
public Etat(ClasseAvecEtat classeAvecEtat) {
this.classeAvecEtat = classeAvecEtat;
}
public abstract void operationEtatA();
public abstract void operationEtatB();
public abstract void operationEtatC();
public abstract void doAction();
}
[email protected]
11. IImmpplléémmeennttaattiioonn
/* ClasseAvecEtat.java */
public class ClasseAvecEtat {
private Etat etat;
public ClasseAvecEtat() { etat=new EtatA(this); }
public void operationEtatA() { etat.operationEtatA();}
public void operationEtatB() { etat.operationEtatB(); }
public void operationEtatC() { etat.operationEtatC(); }
public void doAction() { etat.doAction(); }
public Etat getEtat() { return etat; }
public void setEtat(Etat etat) { this.etat = etat; }
}
[email protected]
12. IImmpplléémmeennttaattiioonn
/* EtatA.java */
public class EtatA extends Etat{
public EtatA(ClasseAvecEtat classeAvecEtat) {super(classeAvecEtat); }
@Override
public void operationEtatA() {
System.out.println(Classe déjà dans l'état A);
}
@Override
public void operationEtatB() {
classeAvecEtat.setEtat(new EtatB(classeAvecEtat));
System.out.println(Changement d'état de A=B);
}
@Override
public void operationEtatC() {
System.out.println(Impossible de passer de A =C);
}
@Override
public void doAction() { System.out.println(Etat courant : A); }
}
[email protected]
13. IImmpplléémmeennttaattiioonn
/* EtatA.java */
public class EtatB extends Etat{
public EtatB(ClasseAvecEtat classeAvecEtat) { super(classeAvecEtat);}
@Override
public void operationEtatA() {
System.out.println(Pas de possible de passer de B vers A);
}
@Override
public void operationEtatB() {
System.out.println(Déjà dans l'état B);
}
@Override
public void operationEtatC() {
classeAvecEtat.setEtat(new EtatC(classeAvecEtat));
System.out.println(Changement d'état de B vers C);
}
@Override
public void doAction() { System.out.println(Etat courant : B); }
}
[email protected]
14. IImmpplléémmeennttaattiioonn
/* EtatC.java */
public class EtatC extends Etat{
public EtatC(ClasseAvecEtat classeAvecEtat) { super(classeAvecEtat); }
@Override
public void operationEtatA() {
System.out.println(Changement d'état de C vers A);
classeAvecEtat.setEtat(new EtatA(classeAvecEtat));
}
@Override
public void operationEtatB() {
System.out.println(Changement d'état de C vers B);
classeAvecEtat.setEtat(new EtatB(classeAvecEtat));
}
@Override
public void operationEtatC() {
System.out.println(Déjà dans l'état C);
}
@Override
public void doAction() { System.out.println(Etat courant : C); }
}
15. IImmpplléémmeennttaattiioonn
/* Application.java */
public class Application {
public static void main(String[] args) {
ClasseAvecEtat obj=new ClasseAvecEtat(); obj.doAction();
System.out.println(-------------);
obj.operationEtatA(); obj.doAction();System.out.println(-------------);
obj.operationEtatC(); obj.doAction();System.out.println(-------------);
obj.operationEtatB(); obj.doAction();System.out.println(-------------);
obj.operationEtatC(); obj.doAction();System.out.println(-------------);
obj.operationEtatA(); obj.doAction();System.out.println(-------------);
}
}
Etat courant : A
-------------
Classe déjà dans l'état A
Etat courant : A
-------------
Impossible de passer de A =C
Etat courant : A
-------------
Changement d'état de A=B
Etat courant : B
-------------
Changement d'état de B vers C
Etat courant : C
-------------
Changement d'état de C vers A
Etat courant : A
-------------
17. PPaatttteerrnn TTeemmppllaattee MMeetthhoodd
Catégorie :
◦ Comportement
Objectif du pattern
◦ Définir le squelette d'un algorithme en déléguant
certaines étapes à des sous-classes.
RRééssuullttaatt ::
◦ Le Design Pattern permet d'isoler les parties
variables d'un algorithme.
Raisons d’utilisation :
◦ Une classe possède un fonctionnement global,
mais les détails de son algorithme doivent être
spécifiques à ses sous-classes.
[email protected]
18. RReessppoonnssaabbiilliittééss
TemplateClass: définit des méthodes
abstraites primitives. La classe implémente le
squelette d'un algorithme qui appelle les
méthodes primitives.
IImmpplleennttaattiioonn11,, IImmpplleemmeennttaattiioonn22 :: ssoonntt
des sous-classes concrète de TemplateClass.
Elle implémente les méthodes utilisées par
l'algorithme de la méthode
operationTemplate() de TemplateClass.
La partie cliente appelle la méthode de
TemplateClass qui définit l'algorithme.
[email protected]
20. IImmpplléémmeennttaattiioonn
/* TemplateClass.java */
package tm;
public abstract class TemplateClass {
public int operationTemplate(){
int a=operationAbs1();
int somme=0;
for(int i=0;ia;i++){
somme+=operationAbs2();
}
return somme;
}
protected abstract int operationAbs1();
protected abstract int operationAbs2();
}
[email protected]
25. PPaatttteerrnn CCoommmmaanndd
Catégorie :
◦ Comportement
Objectif du pattern
◦ EEnnccaappssuulleerr uunnee rreeqquuêêttee ssoouuss llaa ffoorrmmee dd'' oobbjjeett..
◦ Paramétrer facilement des requêtes diverses.
◦ Permettre des opérations réversibles.
Résultat :
◦ Le Design Pattern permet d'isoler une
requête.
[email protected]
26. PPaatttteerrnn CCoommmmaanndd
Raison d’utilisation :
◦ Le système doit traiter des requêtes. Ces requêtes peuvent
provenir de plusieurs émetteurs.
◦ Plusieurs émetteurs peuvent produire la même requête.
◦ Les requêtes doivent pouvoir être annulées.
◦ Cela peut être le cas d'une IHM avec des boutons de commande,
ddeess rraaccccoouurrcciiss ccllaavviieerr eett ddeess cchhooiixx ddee mmeennuu aabboouuttiissssaanntt àà llaa
même requête.
◦ La requête est encapsulée dans un objet : la commande.
◦ Chaque commande possède un objet qui traitera la requête : le
récepteur.
◦ La commande ne réalise pas le traitement, elle est juste porteuse
de la requête.
◦ Les émetteurs potentiels de la requête (éléments de l'IHM) sont
des invoqueurs.
◦ Plusieurs invoqueurs peuvent se partager la même commande.
[email protected]
27. RReessppoonnssaabbiilliittééss
Commande : définit l'interface d'une
commande.
CommandeA et CommandeB : implémentent
une commande. Chaque classe implémente la
méthode executer(), en appelant des méthodes de
ll''oobbjjeett RReecceepptteeuurr..
Invoqueur : déclenche la commande. Il appelle la
méthode executer() d'un objet Commande.
Recepteur : reçoit la commande et réalise les
opérations associées. Chaque objet Commande
concret possède un lien avec un objet Recepteur.
La partie cliente configure le lien entre les
objets Commande et le Recepteur.
[email protected]
37. PPaatttteerrnn MMeeddiiaattoorr
Catégorie :
◦ Comportement
Objectif du pattern
◦ Gérer la transmission d'informations entre des objets
iinntteerraaggiissssaanntt eennttrree eeuuxx..
◦ Avoir un couplage faible entre les objets puisqu'ils n'ont
pas de lien direct entre eux.
◦ Pouvoir varier leur interaction indépendamment.
Résultat :
◦ Le Design Pattern permet d'isoler la
communication entre des objets.
[email protected]
38. PPaatttteerrnn MMeeddiiaattoorr
Raison d’utilisation :
◦ Différents objets ont des interactions. Un
événement sur l'un provoque une action ou des
actions sur un autre ou d'autres objets.
◦ Besoin de centraliser le contrôle et les
ccoommmmuunniiccaattiioonnss ccoommpplleexxeess eennttrree oobbjjeettss
apparentés.
◦ Construire un objet dont la vocation est la
gestion et le contrôle des interactions
complexes entre un ensemble d’objets sans que
les éléments doivent se connaître
mutuellement.
[email protected]
39. RReessppoonnssaabbiilliittééss
Collegue : définit l'interface d'un collègue. Il s'agit
d'une famille d'objets qui s'ignorent entre eux mais
qui doivent se transmettre des informations.
CollegueA et CollegueB : sont des sous-classes
concrètes de l'interface Collegue.
EElllleess oonntt uunnee rrééfféérreennccee ssuurr uunn oobbjjeett MMeeddiiaatteeuurr
auquel elles transmettront les informations.
Mediateur : définit l'interface de communication
entre les objets Collegue.
ConcreteMediateur : implémente la
communication et maintient une référence sur les
objets Collegue.
[email protected]
42. IImmpplléémmeennttaattiioonn
/* mediateur.java */
package med;
import java.util.HashMap;
import java.util.Map;
public abstract class Mediateur {
protected MapString, Collegue collegues=new HashMapString,
Collegue();
public abstract void transmettreMessage(Message m);
public void addCollegue(String ref,Collegue a){
collegues.put(ref, a);
}
}
[email protected]
43. IImmpplléémmeennttaattiioonn
/* Collegue.java */
package med;
public abstract class Collegue {
protected String name;
protected Mediateur mediateur;
public Collegue(String name,Mediateur mediateur) {
this.name=name;
this.mediateur = mediateur;
mediateur.addCollegue(name, this);
}
public abstract void envoyerMessage(Message m);
public abstract void recevoirMessage(Message m);
}
[email protected]
44. IImmpplléémmeennttaattiioonn
/* MediateurImpl.java */
package med;
import java.util.ArrayList; import java.util.List;
public class MediateurImpl1 extends Mediateur {
private ListMessage conversations=new ArrayListMessage();
@Override
public void transmettreMessage(Message m) {
System.out.println(--------- Début Médiateur ----------);
System.out.println(Enregistrement du message);
conversations.add(m);
System.out.println(Transmission du message);
System.out.println(From :+m.getExpediteur());
System.out.println(To:+m.getDestinataire());
Collegue destinataire=collegues.get(m.getDestinataire());
destinataire.recevoirMessage(m);
System.out.println(--------- Fin Médiateur ----------);
}
public void analyserConversation(){
for(Message m:conversations) System.out.println(m.toString());
}
}
[email protected]
45. IImmpplléémmeennttaattiioonn
/* CollegueA.java */
package med;
public class CollegueA extends Collegue {
public CollegueA(String name,Mediateur mediateur) { super(name,mediateur); }
@Override
public void envoyerMessage(Message m) {
System.out.println(----------------------);
System.out.println(Collègue nom=+name+, Envoi de message);
m.setExpediteur(this.name); mediateur.transmettreMessage(m);
[email protected]
System.out.println(----------------------);
}
@Override
public void recevoirMessage(Message m) {
System.out.println(----------------------);
System.out.println(Collègue nom=+name+, Réception du message);
System.out.println(From :+m.getExpediteur());
System.out.println(Contenu:+m.getMessage());
System.out.println(Traitement du message par .....+this.name);
System.out.println(-------------------);
}
}
46. IImmpplléémmeennttaattiioonn
/* CollegueB.java */
package med;
public class CollegueB extends Collegue {
public CollegueB(String name,Mediateur mediateur) { super(name,mediateur); }
@Override
public void envoyerMessage(Message m) {
System.out.println(----------------------);
System.out.println(Collègue nom=+name+, Envoi de message);
m.setExpediteur(this.name); mediateur.transmettreMessage(m);
[email protected]
System.out.println(----------------------);
}
@Override
public void recevoirMessage(Message m) {
System.out.println(----------------------);
System.out.println(Collègue nom=+name+, Réception du message);
System.out.println(From :+m.getExpediteur());
System.out.println(Contenu:+m.getMessage());
System.out.println(Traitement du message par .....+this.name);
System.out.println(-------------------);
}
}
47. IImmpplléémmeennttaattiioonn
/* Application.java */
import med.*;
public class Application {
public static void main(String[] args) {
MediateurImpl1 mediateur=new MediateurImpl1();
Collegue a1=new CollegueA(C1,mediateur);
Collegue a2=new CollegueA(C2,mediateur);
Collegue b1=new CollegueB(C3,mediateur);
a1.envoyerMessage(new Message(je suis à 20 m,C2));
} }
[email protected]
----------------------
Collègue nom=C1, Envoi de message
--------- Début Médiateur ----------
Enregistrement du message
Transmission du message
From :C1
To:C2
----------------------
Collègue nom=C2, Réception du message
From :C1
Contenu:je suis à 20 m
Traitement du message par .....C2
-------------------
--------- Fin Médiateur ----------
----------------------