patterns cours 1 intropatterns

Upload: yespapasavsabien

Post on 04-Nov-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 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