Download - Patterns Cours 1 IntroPatterns
-
Page 1
ESIEE 1
Cours 1 : Introduction aux patrons
Notes de cours, elles ne remplacent la lecture douvrages ou de tutoriels sur ce sujet cf. bibliographie
jean-michel Douin, douin au cnam point frversion : 3 Septembre 2009
ESIEE 2
Sommaire
Conception laide de patrons (design pattern).
BlueJ : www.patterncoder.org
-
Page 2
ESIEE 3
Principale bibliographie utilise pour ces notes
[Grand00] Patterns in Java le volume 1
http://www.mindspring.com/~mgrand/ [head First]
Head first : http://www.oreilly.com/catalog/hfdesignpat/#top [DP05]
Lextension Design Pattern de BlueJ : http://hamilton.bell.ac.uk/designpatterns/ Ou bien en http://www.patterncoder.org/
[Liskov] Program Development in Java, Abstraction, Specification, and Object-Oriented Design, B.Liskov avec J. GuttagAddison Wesley 2000. ISBN 0-201-65768-6
[divers] Certains diagrammes UML : http://www.dofactory.com/Patterns/PatternProxy.aspx informations gnrales http://www.edlin.org/cs/patterns.html
ESIEE 4
Java : les objectifs, rappel
Simple sr Orient Objet Robuste Indpendant d une architecture Environnement riche Technologie Transversale
un langage de programmation
-
Page 3
ESIEE 5
Design Pattern
En quelques mots
Moyen daccomplir quelque chose
Une mthode prouve, rutilise
Un code simple, propre et peu perfectible
Un jargon pour discuter du savoir faire
intra discipline
ESIEE 6
Pattern pourquoi ?
Patterns ou Modles de conception rutilisables
Un modle == plusieurs classes == Un nom de Pattern
-> Assemblage de classes pour un discours plus clair
Les librairies standard utilisent ces Patterns LAPI AWT utilise le patron/pattern composite ??? Les vnements de Java utilisent le patron Observateur ??? etc.
Une application = un assemblage de plusieurs patterns Un rve ?
-
Page 4
ESIEE 7
La bibliothque graphique du JDK utilise un composite ?
Le pattern Composite ?, usage dun moteur de recherche sur le web
ESIEE 8
la bibliothque graphique utilise bien un Composite :
ContainerButtonLabel
Component
java.awt.Component java.awt.Button java.awt.Container
-
Page 5
ESIEE 9
la place de
ESIEE 10
Pattern Patrons, sommaire
Historique
Classification
Les fondamentaux
Quelques patrons en avant-premire Adapter, Proxy
-
Page 6
ESIEE 11
Patrons/Patterns pour le logiciel
Origine C. Alexander un architecte 1977, un langage de patrons pour l architecture 250 patrons
Abstraction dans la conception du logiciel [GoF95] la bande des 4 : Gamma, Helm, Johnson et Vlissides
23 patrons/patterns
Une communaut PLoP Pattern Languages of Programs
http://hillside.net
ESIEE 12
Introduction
Classification habituelle
Crateurs Abstract Factory, Builder, Factory Method Prototype Singleton
Structurels Adapter Bridge Composite Decorator Facade Flyweight Proxy
ComportementauxChain of Responsability. Command Interpreter IteratorMediator Memento Observer StateStrategy Template Method Visitor
-
Page 7
ESIEE 13
Patron dfini par J. Coplien
Un pattern est une rgle en trois parties exprimant une relation entre un contexte, un problme et une solution ( Alexander)
ESIEE 14
Dfinition d un patron
Contexte Problme Solution
Patterns and software : Essential Concepts and Terminology par Brad Appleton
http://www.cmcrossroads.com/bradapp/docs/patterns-intro.html
Diffrentes catgories Conception (Gof) Architecturaux(POSA/GoV, POSA2 [Sch06]) Organisationnels (Coplien www.ambysoft.com/processPatternsPage.html) Pdagogiques(http://www.pedagogicalpatterns.org/)
-
Page 8
ESIEE 15
Les fondamentaux [Grand00] avant tout
Constructions
Delegation
Interface
Abstract superclass
Immutable
Marker interface
ESIEE 16
Delegation
Ajout de fonctionnalits une classe
Par lusage dune instance dune classe Une instance inconnue du client
Gains Couplage plus faible Slection plus fine des fonctionnalits souhaites
-
Page 9
ESIEE 17
Delegation : un exemple classique
import java.util.Stack;public class Pile{private final Stack stk;public Pile(){ stk = new Stack();}public void empiler(T t){stk.push(t);}
}public class Client{public void main(String[] arg){Pile p = new Pile();p.empiler(4);
}}
ESIEE 18
Delegation : souplesse import java.util.List;import java.util.LinkedList;public class Pile{private final List stk;public Pile(){ stk = new LinkedList();}public void empiler(T t){stk.addLast(t);}
}
public class Client{public void main(String[] arg){Pile p = new Pile();p.empiler(4);
}}
Client inchang
-
Page 10
ESIEE 19
Dlgation / Hritage
Petite discussion
Avantages/inconvnients Dlgation prfre
mais
ESIEE 20
Dlgation : une critique
public class Pile{
private final List stk;
public Pile(){ stk = new LinkedList();}
}
Lutilisateur na pas le choix de limplmentation de la Liste
-
Page 11
ESIEE 21
Interface
La liste des mthodes respecter Les mthodes quune classe devra implmenter
Plusieurs classes peuvent implmenter une mme interface
Le client choisira une implmentation en fonction de ses besoins
Exemple Collection est une interface
ArrayList, LinkedList sont des implmentations de Collection
Iterable est une interface Linterface Collection extends cette interface et propose la mthode
public Iterator iterator();
ESIEE 22
Interface : java.util.Iterator
interface Iterator{E next();boolean hasNext();void remove();
}
Exemple :Afficher le contenu dune Collection nomme collection
Iterator it = collection.iterator();while( it.hasNext()){System.out.println(it.next());
}
-
Page 12
ESIEE 23
Usage des interfaces un filtre : si la condition est satisfaite alors retirer cet lment
public static void filtrer( Collection collection, Condition condition){
Iterator it = collection.iterator(); while (it.hasNext()) {
T t = it.next(); if (condition.isTrue(t)) {
it.remove(); }
} }
public interface Condition{public boolean isTrue(T t);
}
Collection et Condition sont des interfaces
discussion
ESIEE 24
Exemple suite
Usage de la mthode filtrer retrait de tous les nombres pairs dune liste dentiers
Collection liste = new ArrayList();liste.add(3);liste.add(4);liste.add(8);liste.add(3);System.out.println("liste : " + liste);
Utile.filtrer(liste,new EstPair());System.out.println("liste : " + liste);
-
Page 13
ESIEE 25
Exemple suite bis
Usage de la mthode filtrer retrait de tous les tudiants laide dune expression rgulire
Collection set = new HashSet();set.add(new Etudiant("paul"));set.add(new Etudiant("pierre"));set.add(new Etudiant("juan"));System.out.println("set : " + set);
Utile.filtrer(set,new Regex("p[a-z]+"));System.out.println("set : " + set);
discussion
ESIEE 26
Dlgation : une critique, bis
public class Pile{
private final List stk;
public Pile(){ stk = new LinkedList();
}}
Lutilisateur na pas le choix de limplmentation
public class Pile{private final List stk;
public Pile(List l){ stk = l;
}public Pile(){ stk = new LinkedList();
}}
Ici lutilisateur a le choix de limplmentation de la Liste
-
Page 14
ESIEE 27
Vocabulaire : Injection de dpendance
Dlgation + interface = injection de dpendance
Voir Martin Fowler Inversion of Control Containers and the Dependency Injection pattern http://martinfowler.com/articles/injection.html
Linjection de dpendance est effectue la cration de la pile Voir le paragraphe Forms of Dependency Injection
ESIEE 28
Dlgation : une critique de critique
public class Pile{private final List stk;
public Pile(List l){ stk = l;
}}
Ici lutilisateur a le choix de limplmentation de la Liste
Mais rien nempche ici une utilisation malheureuse de l lextrieur de Pile
List l = new LinkedList(); // correct
Pile p = new Pile(l); // idemp.empiler("ok"); // idem
l.add("attention"); // attention// tat de la pile ?
Une solution ? Satisfaisante ?
-
Page 15
ESIEE 29
Abstract superclass
Construction frquemment associe lInterface
Une classe propose une implmentation incomplte abstract class en Java
Apporte une garantie du bon fonctionnement pour ses sous-classes
Une sous-classe doit tre propose
Souvent lie limplmentation dune interface
Exemple extrait de java.util : abstractCollection propose 13 mthodes sur 15 et implmente Collection
ESIEE 30
Abstract superclass exemple
java.util.Collection un extrait
-
Page 16
ESIEE 31
Immutable
La classe, ses instances ne peuvent changer dtat Une modification engendre une nouvelle instance de la classe
Robustesse attendue
Partage de ressource facilite Exclusion mutuelle nest pas ncessaire
java.lang.String est Immutable Contrairement java.lang.StringBuffer
ESIEE 32
Immutable : exemplepublic class Pile{
private final Stack stk;
public Pile(){ stk = new Stack();}
public Pile empiler(T t){Pile p = new Pile();p.stk.addAll(this.stk);p.stk.push(t);return p;
}
public T sommet(){return stk.peek();}
}
-
Page 17
ESIEE 33
Marker Interface
Une interface vide ! Classification fine des objets implements installe sciemment par le programmeur
Exemples clbres java.io.Serializable, java.io.Cloneable
Lors de lusage dune mthode particulire une exception sera leve si cette instance nest pas du bon type
Note : Les annotations de Java peuvent remplacer lgamment cette notion
ESIEE 34
Marker Interface : exemple
public interface Immutable{}
public class NotImmutableExceptionextends RuntimeException{public NotImmutableException(){super();}public NotImmutableException(String msg){super(msg);}
}
public class Pile implements Immutable{...}
Pile p = new Pile();if(!(p instanceOf Immutable))
throw new NotImmutableException();
-
Page 18
ESIEE 35
Interface & abstract
Avantages cumuls ! Collection interface AbstractCollection ArrayList
ESIEE 36
Interface & abstract
Dj vu
-
Page 19
ESIEE 37
Les 23 patrons
Classification habituelle
Crateurs Abstract Factory, Builder, Factory Method Prototype Singleton
Structurels Adapter Bridge Composite Decorator Facade Flyweight Proxy
ComportementauxChain of Responsability. Command Interpreter IteratorMediator Memento Observer StateStrategy Template Method Visitor
ESIEE 38
Deux patrons pour lexemple
Dans la famille Patrons Structurels
Adapter Adapte linterface dune classe afin dtre conforme aux souhaits du client
Proxy Fournit un mandataire au client afin de contrler/vrifier ses accs
-
Page 20
ESIEE 39
Adaptateurs : exemples
Adaptateurs
- prise US/ adaptateur / prise EU
- Pritel / adaptateur / RCA
ESIEE 40
Adaptateur exemple : Pritel RCA
Il faut sadapter aux souhaits du client
Ce que le client souhaite : une prise Pritel
public interface Prise {public void pritel();
}
Ce que nous avons : RCA
public interface Plug {public void RCA();
}
-
Page 21
ESIEE 41
Adaptateur (implements Prise)
public class Adaptateur implements Prise {public Plug adapt;
public Adaptateur(Plug adapt){this.adapt = adapt;
}
public void pritel(){adapt.RCA();
}}
ESIEE 42
Adaptateur : Le client est satisfait
public class UnClient {
Prise prise = new Adaptateur(new PlugRCA());
prise.pritel(); // satisfait
}
public class PlugRCA implements Plug {public void RCA(){ .}
}
-
Page 22
ESIEE 43
Pattern Adapter [DP05]
DP05 ou www.patterncoder.org, un plug-in de bluej
ESIEE 44
Pattern Adapter [DP05]
public interface Target {public void serviceA();
}
public class Adaptee {public void serviceB(){}
}
public class Adapter implements Target {public Adaptee adaptee;public Adapter(Adaptee adaptee){
this.adaptee = adaptee;}
public void serviceA(){adaptee.serviceB();
}
}
[DP05]
-
Page 23
ESIEE 45
Adapter et classe interne java
Souvent employ public Target newAdapter(final Adaptee adaptee){
return new Target(){ public void serviceA(){adaptee.serviceB();
}};
}
Un classique w.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {System.exit(0);
}});
ESIEE 46
Une question dun examen de lesiee
-
Page 24
ESIEE 47
Pattern Proxy
Fournit un mandataire au client afin de
Contrler/vrifier les accs
ESIEE 48
Proxy : un exemple
public abstract class AbstractLogon{abstract public boolean authenticate( String user, String password);
}
public class Client{public static void main(String[] args){
AbstractLogon logon = new ProxyLogon();
}}
-
Page 25
ESIEE 49
Proxy : exemple suite
public class ProxyLogon extends AbstractLogon{private AbstractLogon real = new RealLogon();
public boolean authenticate(String user, String password){if(user.equals("root") && password.equals("java"))
return real.authenticate(user, password);else
return false;}
}
public class RealLogon extends AbstractLogon{public boolean authenticate(String user, String password){
return true;}
}
ESIEE 50
Adapter\Proxy
discussion
-
Page 26
ESIEE 51
Conclusion
Est-ce bien utile ?
Architecture dcrite par les patterns ?
Langage de patterns ?
Comment choisir ?
Trop de Patterns ?
Mthodologie dun AGL ?
ESIEE 52
BlueJ : www.patterncoder.org
Dmonstration : le patron Adapter