Coursdesignpatternmyoussfipartie1introductionetpatternstrategy 141207035625 Conversion Gate01 PDF
Coursdesignpatternmyoussfipartie1introductionetpatternstrategy 141207035625 Conversion Gate01 PDF
Coursdesignpatternmyoussfipartie1introductionetpatternstrategy 141207035625 Conversion Gate01 PDF
Premire partie
Mohamed Youssfi
Laboratoire Signaux Systmes Distribus et Intelligence Artificielle (SSDIA)
ENSET, Universit Hassan II Casablanca, Maroc
Email : [email protected]
Supports de cours : http://fr.slideshare.net/mohamedyoussfi9
Chane vido : http://youtube.com/mohamedYoussfi
Recherche : http://www.researchgate.net/profile/Youssfi_Mohamed/publications
[email protected]
Dfinitions Design patterns
Un Design pattern dcrit la fois
Un problme qui se produit trs frquemment, dans un
environnement,
et larchitecture de la solution ce problme de telle
faon que lon puisse utiliser cette solution des milliers
de fois.
[email protected]
Exigences dun projet informatique
Exigences fonctionnelles:
Une application est cre pour rpondre , tout dabord, aux
besoins fonctionnels des entreprises.
Processus mtier de lentreprise
Exigences Techniques :
Les performances:
La maintenance:
Scurit
Portabilit
Distribution
Architectures orientes services
Capacit de fournir le service diffrents type de clients (Desk TOP,
Mobile, SMS, http)
..
Exigence financires
9
[email protected]
Constat
Il est trs difficile de dvelopper un systme logiciel qui
respecte ces exigences sans utiliser lexprience des autres :
Rutiliser des modles de conceptions (Design Patterns)
Btir les applications sur des architectures existantes:
Architecture JEE
Architecture Dot Net
Ces architectures offrent :
Des Frameworks qui permettent de satisfaire les exigences techniques:
Framework pour lInversion de contrle
Grer le cycle de vie des composants de lapplication
Sparer le code mtier du code technique
Framework ORM (Mapping Objet Relationnel)
Framework MVC WEB
.
Middlewares pour faire communiquer les composants distribus de
lapplication
[email protected]
Concepts fondamentaux de
lorient Objet
Classe
Objet
Hritage
Encapsulation
Polymorphisme
[email protected]
Pourquoi lapproche Oriente Objet a t cre ?
Principalement :
Pour faciliter la rutilisation de lexprience des autres.
Instancier des classes existantes (Composition)
Crer de nouvelles classes drives (Hritage)
Rutilisation des Frameworks
Crer des applications faciles maintenir :
Applications fermes la modification et ouvertes lextension
Crer des applications performantes
Crer des applications scurises
Crer des applications distribues
Sparer les diffrents aspects dune application
Aspects mtiers (fonctionnels)
Aspect Prsentation (Web, Mobile, Desktop, .)
Aspects Techniques
ORM, Gestion des transaction, Scurit, Monte en charge
Distribution
[email protected]
HRITAGE
ET
COMPOSITION
[email protected]
Hritage et composition
Dans la programmation oriente objet,
lhritage et la composition sont deux
moyens qui permettent la rutilisation des
classes
Lhritage traduit le terme Est un ou
Une sorte de
La composition traduit le terme A un ou
A plusieurs .
Voyons partir dun exemple entre lhritage
et la composition de type A un .
Exemple Hritage et composition
public class A { public class B extends A {
int v3=5;
int v1=2;
void meth2(){
int v2=3; System.out.print(super.meth1()*v3);
public int meth1(){ }
}
return(v1+v2);
}
}
public class C { un
int v3=5; C A
A a=new A(); 1
void meth2(){ est un
System.out.print(a.meth1()*v3);
} B
}
Hritage et composition
B b=new B(); C c=new C();
b.meth2(); c.meth2();
:A
v1=2
v2=3
meth1() c:C :A
a= v1=2
b:B v3=5 v2=3
super=
v3=5 meth2() meth1()
meth2()
Porte des Design Patterns
Porte de Classe
Focalisation sur les relations entre classes et
leurs sous-classes
Rutilisation par hritage
Porte dInstance (Objet)
Focalisation sur les relations entre les objets
Rutilisation par composition
Pattern Strategy
Catgorie : Comportement
Objectif s:
Dfinir une famille dalgorithmes, et encapsuler
chacun et les rendre interchangeables tout en
assurant que chaque algorithme puisse voluer
indpendamment des clients qui lutilisent
Raison dutilisation :
Un objet doit pouvoir faire varier une partie de son algorithme
dynamiquement.
Rsultat :
Le Design Pattern permet d'isoler les algorithmes appartenant
une mme famille d'algorithmes.
Diagramme de classes
[email protected]
Implmentation Java du pattern Strategy
Interface Strategy.java
[email protected]
Implmentation Java du pattern Strategy
Implmentation 1 de linterface Strategy.
[email protected]
Utilisation du pattern Strategy
Application.java
public class Application { Excution :
public static void main(String[] args) { Stratgie 1:
Context ctx=new Context(); Application de Strategy 1
System.out.println("Stratgie 1:"); Stratgie 2:
ctx.setStrategy(new StrategyImpl1()); Application de Strategy 2
ctx.appliquerStrategy();
Stratgie 3:
Application de Strategy 3
System.out.println("Stratgie 2:");
ctx.setStrategy(new StrategyImpl2());
ctx.appliquerStrategy();
System.out.println("Stratgie 3:");
ctx.setStrategy(new StrategyImpl3());
ctx.appliquerStrategy();
}
}
[email protected]
EXEMPLE
DAPPLICATION
[email protected]
Rfrence
Simple Application: SuperCanard
Jol travaille pour une socit qui a rencontr un
norme succs avec un jeu de simulation de mare
aux canard SuperCanard .
Le jeu affiche toutes sortes de canards qui nagent
et mettent des sons.
Les premiers concepteurs du systme ont utilis
des techniques OO standard et cr une super
classe Canard dont tous les autres types de canards
hritent.
SuperCanard dans le pass
Joe pense
Nous somme la runion: Il y a quelque chose
qui ne va pas
Que sest t-il pass?
Jel, cest Marie, je suis la Jel a oubli que toutes les sous-
runion des actionnaires. classes de canard ne doivent pas
On vient de passer la dmo voler.
et il y a plein de canard en Quand il a ajout le nouveau
plastique qui volent dans comportement de la super classe
tout lcran. Cest une Canard, il a galement ajout un
plaisanterie ou quoi? Tu as comportement non appropri
peut tre envie de passer du certaines de ses sous-classes;
temps sur Monster.fr? Maintenant, il a des objets volant
inanims dans son programme
SuperCanard
Il y a quelque chose qui ne va pas
OK, On dirait quil y a un lger
dfaut dans ma conception. Je ne
vois pas pourquoi il ne peuvent pas
appeler a une fonctionnalit .
Cest marrant..
CanardEnPlastique Leurre
cancaner() { cancaner() {
//Redfinir pour couiner //Redfinir pour ne rien faire
} }
voler(){ voler(){
// Redfinir pour ne rien faire // Redfinir pour ne rien faire
} }
afficher() { afficher() {
//Aspect dun colvert //Aspect dun colvert
} }
En plus du cot fonctionnel penser la
maintenance
Jel sest rendu compte que lhritage nest
probablement pas la rponse.
En fait, il vient de recevoir une note annonant
que les dirigeant ont dcid de ractualiser le
produit tous les six mois.
Il sait que les spcifications vont changer en
permanence et quil sera peut tre amen
redfinir voller() et cancaner() pour toute sous
classes de Canard qui sera ajoute au
programme.
Il a donc besoin dun moyen plus sain pour que
seuls certains types de canard puissent voler ou
cancaner.
La seule et unique constante du
dveloppement
Quelle est la seule chose sur laquelle vous puissiez toujours compter
en tant que dveloppeur?
Indpendamment de lendroit ou vous travaillez, de lapplication que
vous dveloppez ou du langage dans lequel vous programmez, La seule
vraie constante qui vous accompagnera toujours est:
Principe de conception:
Identifier les aspects qui changent dans
votre application et sparez-les de ceux
qui demeurent constants.
Classe Canard
Comportements qui
varient De Canard
Conception des comportements de Canard
Principe de conception:
Programmer une interface, non une
implmentation
CanardEnPlastique.java
public class CanardEnPlastique extends Canard {
public CanardEnPlastique(){
comportementCancan=new CancanMuet();
comportementVol=new NePasVoler();
}
public void afficher(){
System.out.println("Je suis un canard en plastique");
}
}
public void effectuerVol() {
c- comportementVol.voler();
MiniSimulateur.java 9
4
}
public void effectuerCancan() {
d- comportementCancan.cancaner();
5 8 }
6
:NePasVoler
C:\>java MiniSimulateur
Je suis un vrai Colvert voler() 9-c :Canard :VolerAvecDesAilles
Je vole ! a
can can can 7 compVol: voler() 4-c
coin coin coin!
:CoinCoin compCancan
Je ne sais pas voler! b
cancaner() 8-d nager() :Cancan
effectuerVol()
cancaner() 5-d
effectuerCancan()
public class MiniSimulateur {
public static void main(String[] args) {
1- Canard colvert=new Colvert();
2- colvert.nager();
:Colvert 1
3- colvert.afficher();
4- colvert.effectuerVol();
colvert
5- colvert.effectuerCancan(); afficher()
6- colvert.setComportementCancan(new CoinCoin());
7- colvert.setComportementVol(new NePasVoler());
Constructeur de Colvert :
8- colvert.effectuerCancan(); public Colvert(){
9- colvert.effectuerVol(); a- comportementCancan=new Cancan();
} b- comportementVol=new VolerAvecDesAilles();
} Modifier les comportements de cancan }
et de vol dynamiquement
Vue densemble des comportements encapsuls