SlideShare une entreprise Scribd logo
1  sur  14
nAccademy

              Design Patterns Introduction




Présentation par Frédéric Salembier


                                      Le 5 mai 2011
Plan


   Qu’est ce qu’un design pattern ?

   Comment les classer ?

   Le singleton

   La factory
Qu’est ce qu’un design pattern ?
   Définition
    ◦ Solution empirique pour résoudre un problème identifié et partagé
    ◦ Equivalent à une bibliothèque de coups d’un logiciel d’échecs

   Mise en place
    ◦ Premiers sont apparus fin années 70
    ◦ Un domaine très vaste
    ◦ Il s’applique au monde objet
    ◦ Indépendant du langage

   Attention ce n’est pas une science
    ◦ Le principe est de plaquer une méthode connu pour résoudre un
      problème
    ◦ La difficulté est de reconnaitre les cas d’utilisations
    ◦ Le risque est d’en mettre partout
Les trois familles
   Patterns créateurs
    ◦ Utilisés pour construire des objets découplés du système de
      mise en œuvre.
    ◦ Exemples : Factory, Builder, Singleton


   Patterns structurels
    ◦ Utilisés pour former des structures objet de grande taille entre
      de nombreux objets disparates.
    ◦ Exemples : Proxy, Decorateur, Facade


   Patterns comportementaux
    ◦ Permettent de gérer des algorithmes ou relations entre objets
      indépendamment de l’objet sur lequel ils s’appuient.
    ◦ Exemples : Iterator, Strategy, Observer
Singleton : présentation




   Avantages pour l’architecte
    ◦ Garantir qu’une classe ne possède qu’une seule instance

   Avantages pour le développeur
    ◦ Avoir un point d’accès global à l’instance

   Utilisations
    ◦ Accès de n’importe où à un système de log
    ◦ Accès à un lecteur de configurations pour ne pas rouvrir à chaque
      fois le fichier
Singleton : mise en place
       Principes
        ◦ Une auto référence privée dans l’objet
        ◦ Un constructeur privé
        ◦ Une méthode public (getter) d’accès à l’instance qui teste
          l’initialisation
       Code java
// Classe basée sur le pattern Singleton qui permet la journalisation de l'application.
public class Journalisation
{
        private static Journalisation uniqueInstance;// Stockage de l'unique instance de cette classe.
        private Integer nbAppel; // Entier représentant le nb d'appel.

        // Constructeur en privé (donc inaccessible à l'extérieur de la classe).
        private Journalisation()
        {
                this.nbAppel = new Integer(0);
        }

        // Méthode statique qui sert de pseudo-constructeur
        public static Journalisation getInstance()
        {
                if (uniqueInstance == null)
                {
                        uniqueInstance = new Journalisation();
                }
                return uniqueInstance;
        }

        public void ajouterAppel(String log) { this.nbAppel++; }
        public String getNbAppel() { return this.nbAppel; }
}
Singleton : exercice




   Dans l’exemple précédent une notion
    fondamentale à été oubliée, laquelle ?
Factory : présentation




   Avantages pour l’architecte
    ◦ Isolation du code métier
    ◦ Factorisation des algorithmes


   Avantages pour le développeur
    ◦ Abstraction des méthodes : principe de la boite noire
    ◦ Utilisation de méthodes générique
Factory : exemple

CalculateurFactory

+ getTarificateur(contexte)
{
  // algo de détermination du calculateur
  // renvoie d’une instance de la classe
concrète choisie
}                                                      Calculateur
                                                       + getTarif(params);




                           << instantiate >>




                        CalculateurAuto              CalculateurMRH               CalculateurSante

                        + getTarif(params)           + getTarif(params)           + getTarif(params)
                        {                            {                            {
                          // code d’implémentation     // code d’implémentation     // code d’implémentation
                        }                            }                            }
Factory : utilisation
           Schéma pour la formule
                                          Calculateur
                                          +List<String> getFormules();




CalculateurAuto               CalculateurMRH                             CalculateurSante   CalculateurScolaire

+List<String> getFormules()   +List<String> getFormules()
{                             {
  // implémentation             // implémentation
}                             }




           Exemple d’algo de formules
             Pour le calculateurAuto :
                return {‘Confort’, ‘Maxi’}

             Pour le CalculateurMRH
                return {‘Sérénité’, ‘Essentiel’, ‘Complete’}
Factory : exercices (plus loin dans la généricité)


   1/ Comment gérer des contextes différents dans la
    même factory ?

   2/ Implémentez cet algorithme :
Voici les fractionnements proposés pour les produits
Auto classique -> [‘A’, ‘T’, ‘M’]
Auto bon conducteur ->   [‘A’, ‘T’, ‘M’]
Auto jeune -> [‘A’, ‘S’, ‘T’, ‘M’]
Auto malussé -> [‘U’]
Factory : exercice 1

  Généralisation du contexte :

ContexteBean contexte = new ContexteBean(client, vehicule, conducteurs, contrat);
Calculateur tarification = CalculateurFactory.getTarificateur(codeOperation);
DevisResultBean devisResult = (DevisResultT9Bean) tarification.getTarif(contexte);




                                        CalculateurBean




      CalculateurBeanContexte         CalculateurBeanAuto         CalculateurBeanTarifResult

      - int idPolice;                 - Client cli;               - String Formule;
      - String login;                 - Vehicule veh;             - String fractionnement;
      - String codeOperation;         - <Conducteur> conducts;    - Float prime;
                                      - String login;             - Float taxes;
      // les getters et setters       // les getters et setters   // les getters et setters
Factory : exercice 2
    Implémentation
ProduitAlgo implements ProduitAlgoInterface
{
  public List<String> getFractionnements()
  {
     return {‘A’, ‘T’, ‘M’};
  }
}


ProduitAlgoClassique extends ProduitAlgo
{
   ø
}


ProduitAlgoMalusse extends ProduitAlgo
{
  public List<String> getFractionnements()
  {
    return {‘U’};
  }
}


ProduitAlgoJeune extends ProduitAlgo
{
  public List<String> getFractionnements()
  {
    List<String> list = super.getFractionnements();
    list.add(‘T’);
    return list;
  }
}
Conclusion
   Souvent utilisés sans même le savoir

   Buts
    ◦ Simplifier le code
    ◦ Le rendre plus efficace et robuste
    ◦ Permettre un langage commun entre développeurs

   Gain
    ◦ obtenir de la généricité pour pérenniser les développements

   Attention
    ◦ ce ne sont pas des solutions miracles
    ◦ aux abus, tout n’est pas design pattern

   Aller plus loin avec le wiki neuros

Contenu connexe

Tendances

diagramme de classe
diagramme de classediagramme de classe
diagramme de classeAmir Souissi
 
applications-reparties
applications-repartiesapplications-reparties
applications-repartiesmourad50
 
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0Ayoub Rouzi
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
La spécification des besoins
La spécification des besoinsLa spécification des besoins
La spécification des besoinsIsmahen Traya
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDBMongoDB
 
Pfe master fst_final_decembre2015
Pfe master fst_final_decembre2015Pfe master fst_final_decembre2015
Pfe master fst_final_decembre2015Ghali Rahma
 
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Ben Abdelwahed Slim
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiersHeithem Abbes
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesLilia Sfaxi
 

Tendances (20)

Sockets
SocketsSockets
Sockets
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classe
 
applications-reparties
applications-repartiesapplications-reparties
applications-reparties
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
La spécification des besoins
La spécification des besoinsLa spécification des besoins
La spécification des besoins
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDB
 
Pfe master fst_final_decembre2015
Pfe master fst_final_decembre2015Pfe master fst_final_decembre2015
Pfe master fst_final_decembre2015
 
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiers
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Middleware
MiddlewareMiddleware
Middleware
 
Java RMI
Java RMIJava RMI
Java RMI
 

En vedette

Design patterns : résumé
Design patterns : résuméDesign patterns : résumé
Design patterns : résuméBoubker ABERWAG
 
patron de conception
patron de conception patron de conception
patron de conception Shili Mohamed
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan GoleChetan Gole
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor PatternIder Zheng
 
Introduction to Design Pattern
Introduction to Design  PatternIntroduction to Design  Pattern
Introduction to Design PatternSanae BEKKAR
 
Design Patterns Illustrated
Design Patterns IllustratedDesign Patterns Illustrated
Design Patterns IllustratedHerman Peeren
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDidier Plaindoux
 
Android Bonnees pratiques
Android Bonnees pratiques Android Bonnees pratiques
Android Bonnees pratiques Patrick Bashizi
 
Design Pattern
Design PatternDesign Pattern
Design Patternnewegg
 
Design patterns through java
Design patterns through javaDesign patterns through java
Design patterns through javaAditya Bhuyan
 
Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621melbournepatterns
 
Eclipse e4 Overview
Eclipse e4 OverviewEclipse e4 Overview
Eclipse e4 OverviewLars Vogel
 
Design Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiquesDesign Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiquesAlex Wilfried OUATTARA
 
Java Design Patterns: The State Pattern
Java Design Patterns: The State PatternJava Design Patterns: The State Pattern
Java Design Patterns: The State PatternAntony Quinn
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2Julie Iskander
 
Getting Started with IntelliJ IDEA as an Eclipse User
Getting Started with IntelliJ IDEA as an Eclipse UserGetting Started with IntelliJ IDEA as an Eclipse User
Getting Started with IntelliJ IDEA as an Eclipse UserZeroTurnaround
 

En vedette (20)

Design patterns : résumé
Design patterns : résuméDesign patterns : résumé
Design patterns : résumé
 
patron de conception
patron de conception patron de conception
patron de conception
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan Gole
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor Pattern
 
Introduction to Design Pattern
Introduction to Design  PatternIntroduction to Design  Pattern
Introduction to Design Pattern
 
Design Patterns Illustrated
Design Patterns IllustratedDesign Patterns Illustrated
Design Patterns Illustrated
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Android Bonnees pratiques
Android Bonnees pratiques Android Bonnees pratiques
Android Bonnees pratiques
 
Sibtel&Swift
Sibtel&SwiftSibtel&Swift
Sibtel&Swift
 
Gestion de Stress
Gestion de StressGestion de Stress
Gestion de Stress
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Cours1
Cours1Cours1
Cours1
 
Design patterns through java
Design patterns through javaDesign patterns through java
Design patterns through java
 
Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621Iterator Pattern Baljeet Sandhu 20060621
Iterator Pattern Baljeet Sandhu 20060621
 
Eclipse e4 Overview
Eclipse e4 OverviewEclipse e4 Overview
Eclipse e4 Overview
 
Design Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiquesDesign Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiques
 
Java Design Patterns: The State Pattern
Java Design Patterns: The State PatternJava Design Patterns: The State Pattern
Java Design Patterns: The State Pattern
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2
 
Soft Skills Training
Soft Skills TrainingSoft Skills Training
Soft Skills Training
 
Getting Started with IntelliJ IDEA as an Eclipse User
Getting Started with IntelliJ IDEA as an Eclipse UserGetting Started with IntelliJ IDEA as an Eclipse User
Getting Started with IntelliJ IDEA as an Eclipse User
 

Similaire à Design Pattern introduction

Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratiqueFrederic Hardy
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Rahma Boufalgha
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx FranceMarc Bojoly
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Laurent BUNIET
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpMSDEVMTL
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 

Similaire à Design Pattern introduction (20)

Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Memo java
Memo javaMemo java
Memo java
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Aspectj
AspectjAspectj
Aspectj
 
Perf university
Perf universityPerf university
Perf university
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharp
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
Salesforce Tooling API
Salesforce Tooling APISalesforce Tooling API
Salesforce Tooling API
 

Plus de neuros

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)neuros
 
Le service workers
Le service workersLe service workers
Le service workersneuros
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internetneuros
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internetneuros
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesneuros
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursneuros
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le webneuros
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessibleneuros
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamonneuros
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et phpneuros
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réelsneuros
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)neuros
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQLneuros
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5neuros
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continuneuros
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalneuros
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informationsneuros
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internetneuros
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHPneuros
 

Plus de neuros (20)

Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)Solution pour un Réseau Social d'Entreprise (RSE)
Solution pour un Réseau Social d'Entreprise (RSE)
 
Le service workers
Le service workersLe service workers
Le service workers
 
Proteger votre vie privee sur internet
Proteger votre vie privee sur internetProteger votre vie privee sur internet
Proteger votre vie privee sur internet
 
Le pouvoir d'être Visible ou Invisible sur Internet
Le pouvoir d'être Visible ou Invisible  sur InternetLe pouvoir d'être Visible ou Invisible  sur Internet
Le pouvoir d'être Visible ou Invisible sur Internet
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertes
 
Livre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeursLivre Drupal avance, un CMS pour développeurs
Livre Drupal avance, un CMS pour développeurs
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le web
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
RGAA 3 dans un Web Accessible
RGAA 3 dans un Web AccessibleRGAA 3 dans un Web Accessible
RGAA 3 dans un Web Accessible
 
Les effets de la loi Hamon
Les effets de la loi HamonLes effets de la loi Hamon
Les effets de la loi Hamon
 
La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
 
Les protocoles temps réels
Les protocoles temps réelsLes protocoles temps réels
Les protocoles temps réels
 
Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)Vectoriel et 3d en html5 - Animation newschool (partie 2)
Vectoriel et 3d en html5 - Animation newschool (partie 2)
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQL
 
Newschool partie1 methode HTML5
Newschool partie1 methode HTML5Newschool partie1 methode HTML5
Newschool partie1 methode HTML5
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
 
Effectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupalEffectuer des tests modernes pour drupal
Effectuer des tests modernes pour drupal
 
Integration Drupal systemes d'informations
Integration Drupal systemes d'informationsIntegration Drupal systemes d'informations
Integration Drupal systemes d'informations
 
La maitrise des contenus hors internet
La maitrise des contenus hors internetLa maitrise des contenus hors internet
La maitrise des contenus hors internet
 
La mémoire et PHP
La mémoire et PHPLa mémoire et PHP
La mémoire et PHP
 

Design Pattern introduction

  • 1. nAccademy Design Patterns Introduction Présentation par Frédéric Salembier Le 5 mai 2011
  • 2. Plan  Qu’est ce qu’un design pattern ?  Comment les classer ?  Le singleton  La factory
  • 3. Qu’est ce qu’un design pattern ?  Définition ◦ Solution empirique pour résoudre un problème identifié et partagé ◦ Equivalent à une bibliothèque de coups d’un logiciel d’échecs  Mise en place ◦ Premiers sont apparus fin années 70 ◦ Un domaine très vaste ◦ Il s’applique au monde objet ◦ Indépendant du langage  Attention ce n’est pas une science ◦ Le principe est de plaquer une méthode connu pour résoudre un problème ◦ La difficulté est de reconnaitre les cas d’utilisations ◦ Le risque est d’en mettre partout
  • 4. Les trois familles  Patterns créateurs ◦ Utilisés pour construire des objets découplés du système de mise en œuvre. ◦ Exemples : Factory, Builder, Singleton  Patterns structurels ◦ Utilisés pour former des structures objet de grande taille entre de nombreux objets disparates. ◦ Exemples : Proxy, Decorateur, Facade  Patterns comportementaux ◦ Permettent de gérer des algorithmes ou relations entre objets indépendamment de l’objet sur lequel ils s’appuient. ◦ Exemples : Iterator, Strategy, Observer
  • 5. Singleton : présentation  Avantages pour l’architecte ◦ Garantir qu’une classe ne possède qu’une seule instance  Avantages pour le développeur ◦ Avoir un point d’accès global à l’instance  Utilisations ◦ Accès de n’importe où à un système de log ◦ Accès à un lecteur de configurations pour ne pas rouvrir à chaque fois le fichier
  • 6. Singleton : mise en place  Principes ◦ Une auto référence privée dans l’objet ◦ Un constructeur privé ◦ Une méthode public (getter) d’accès à l’instance qui teste l’initialisation  Code java // Classe basée sur le pattern Singleton qui permet la journalisation de l'application. public class Journalisation { private static Journalisation uniqueInstance;// Stockage de l'unique instance de cette classe. private Integer nbAppel; // Entier représentant le nb d'appel. // Constructeur en privé (donc inaccessible à l'extérieur de la classe). private Journalisation() { this.nbAppel = new Integer(0); } // Méthode statique qui sert de pseudo-constructeur public static Journalisation getInstance() { if (uniqueInstance == null) { uniqueInstance = new Journalisation(); } return uniqueInstance; } public void ajouterAppel(String log) { this.nbAppel++; } public String getNbAppel() { return this.nbAppel; } }
  • 7. Singleton : exercice  Dans l’exemple précédent une notion fondamentale à été oubliée, laquelle ?
  • 8. Factory : présentation  Avantages pour l’architecte ◦ Isolation du code métier ◦ Factorisation des algorithmes  Avantages pour le développeur ◦ Abstraction des méthodes : principe de la boite noire ◦ Utilisation de méthodes générique
  • 9. Factory : exemple CalculateurFactory + getTarificateur(contexte) { // algo de détermination du calculateur // renvoie d’une instance de la classe concrète choisie } Calculateur + getTarif(params); << instantiate >> CalculateurAuto CalculateurMRH CalculateurSante + getTarif(params) + getTarif(params) + getTarif(params) { { { // code d’implémentation // code d’implémentation // code d’implémentation } } }
  • 10. Factory : utilisation  Schéma pour la formule Calculateur +List<String> getFormules(); CalculateurAuto CalculateurMRH CalculateurSante CalculateurScolaire +List<String> getFormules() +List<String> getFormules() { { // implémentation // implémentation } }  Exemple d’algo de formules Pour le calculateurAuto : return {‘Confort’, ‘Maxi’} Pour le CalculateurMRH return {‘Sérénité’, ‘Essentiel’, ‘Complete’}
  • 11. Factory : exercices (plus loin dans la généricité)  1/ Comment gérer des contextes différents dans la même factory ?  2/ Implémentez cet algorithme : Voici les fractionnements proposés pour les produits Auto classique -> [‘A’, ‘T’, ‘M’] Auto bon conducteur -> [‘A’, ‘T’, ‘M’] Auto jeune -> [‘A’, ‘S’, ‘T’, ‘M’] Auto malussé -> [‘U’]
  • 12. Factory : exercice 1 Généralisation du contexte : ContexteBean contexte = new ContexteBean(client, vehicule, conducteurs, contrat); Calculateur tarification = CalculateurFactory.getTarificateur(codeOperation); DevisResultBean devisResult = (DevisResultT9Bean) tarification.getTarif(contexte); CalculateurBean CalculateurBeanContexte CalculateurBeanAuto CalculateurBeanTarifResult - int idPolice; - Client cli; - String Formule; - String login; - Vehicule veh; - String fractionnement; - String codeOperation; - <Conducteur> conducts; - Float prime; - String login; - Float taxes; // les getters et setters // les getters et setters // les getters et setters
  • 13. Factory : exercice 2  Implémentation ProduitAlgo implements ProduitAlgoInterface { public List<String> getFractionnements() { return {‘A’, ‘T’, ‘M’}; } } ProduitAlgoClassique extends ProduitAlgo { ø } ProduitAlgoMalusse extends ProduitAlgo { public List<String> getFractionnements() { return {‘U’}; } } ProduitAlgoJeune extends ProduitAlgo { public List<String> getFractionnements() { List<String> list = super.getFractionnements(); list.add(‘T’); return list; } }
  • 14. Conclusion  Souvent utilisés sans même le savoir  Buts ◦ Simplifier le code ◦ Le rendre plus efficace et robuste ◦ Permettre un langage commun entre développeurs  Gain ◦ obtenir de la généricité pour pérenniser les développements  Attention ◦ ce ne sont pas des solutions miracles ◦ aux abus, tout n’est pas design pattern  Aller plus loin avec le wiki neuros