Patron de méthode (patron de conception)

Patron de méthode (patron de conception)
Patron de méthode: diagramme de classes en UML

La technique du patron de méthode (Template method pattern) est un patron de conception (design pattern) comportemental utilisé en génie logiciel.

Un patron de méthode définit le squelette d'un algorithme à l'aide d'opérations abstraites dont le comportement concret se trouvera dans les sous-classes, qui implémenteront ces opérations.

Cette technique, très répandue dans les classes abstraites, permet de:

  • Fixer clairement des comportements standards qui devraient être partagés par toutes les sous-classes, même lorsque le détail des sous-opérations diffère.
  • Factoriser du code qui serait redondant s'il se trouvait répété dans chaque sous-classe.

La technique du patron de méthode a ceci de particulier que c'est la méthode de la classe parent qui appelle des opérations n'existant que dans les sous-classes. C'est une pratique courante dans les classes abstraites, alors que d'habitude dans une hiérarchie de classes concrètes c'est le contraire : ce sont plutôt les méthodes des sous-classes qui appellent les méthodes de la super-classe comme morceau de leur propre comportement.

L'implémentation d'un patron de méthode est parfois appelée méthode socle parce qu'elle ancre solidement un comportement qui s'applique alors à toute la hiérarchie de classes par héritage. Pour s'assurer que ce comportement ne sera pas redéfini arbitrairement dans les sous-classes, on déclare la méthode socle final en Java, non virtuelle en C++ ou sealed en C#.

Les méthodes servant de "briques de comportement" à la méthode socle devraient être déclarées abstract en Java, virtuelles pures en C++ et abstract en C#.

Exemple en Java

 /**
  * Classe abstraite servant de base commune à divers
  * jeux de société où les joueurs jouent chacun leur tour.
  */
 
 abstract class JeuDeSociété{
 
   protected int nombreDeJoueurs;
 
   abstract void initialiserLeJeu();
 
   abstract void faireJouer(int joueur);
 
   abstract boolean partieTerminée();
 
   abstract void proclamerLeVainqueur();
 
   /* Une méthode socle : */
   final void jouerUnePartie(int nombreDeJoueurs){
     this.nombreDeJoueurs = nombreDeJoueurs;
     initialiserLeJeu();
     int j = 0;
     while( ! partieTerminée() ){
       faireJouer( j );
       j = (j + 1) % nombreDeJoueurs;
     }
     proclamerLeVainqueur();
   }
 }

On peut maintenant dériver cette classe pour implanter divers jeux:

 class Monopoly extends JeuDeSociété{
 
   /* Implémentation concrète des méthodes nécessaires */
 
   void initialiserLeJeu(){
     // ...
   }
 
   void faireJouer(int joueur){
     // ...
   }
 
   boolean partieTerminée(){
     // ...
   }
 
   void proclamerLeVainqueur(){
     // ...
   }
 
   /* Déclaration des composants spécifiques au jeu du Monopoly */
 
   // ...
 
 }


 class Echecs extends JeuDeSociété{
 
   /* Implémentation concrète des méthodes nécessaires */
 
   void initialiserLeJeu(){
     // ...
   }
 
   void faireJouer(int joueur){
     // ...
   }
 
   boolean partieTerminée(){
     // ...
   }
 
   void proclamerLeVainqueur(){
     // ...
   }
 
   /* Déclaration des composants spécifiques au jeu d'échecs */
 
   // ...
 
 }


La technique du patron de méthode fixe un cadre pour toutes les sous-classes. Cela implique certaines restrictions : dans l'exemple ci-dessus, on ne peut pas faire hériter une classe JeuDuTarot de la classe abstraite JeuDeSociété, parce que dans une partie de Tarot, l'ordre des joueurs n'est pas linéaire: il dépend du joueur qui vient de ramasser le pli.

On peut décider de ne pas déclarer la méthode socle comme final en Java (ou bien décider de la déclarer virtual en C++), afin de la rendre plus souple. Ainsi la classe JeuDuTarot pourrait parfaitement hériter de la classe JeuDeSociété, à condition de redéfinir la méthode jouerUnePartie() pour tenir compte des règles du Tarot. Mais cette pratique est criticable. Il est important de se poser la question dès l'écriture de la super-classe : Les sous-classes auront-elles le droit de redéfinir les comportements fondamentaux codés dans la super-classe ?. L'avantage est bien sûr une souplesse accrue. L'inconvénient peut être la perte de la cohérence interne de l'objet, si la surcharge des méthodes socles est mal conçue. Pour reprendre l'exemple précédent, on pourrait mettre en place une méthode qui retourne le prochain joueur, qui serait implémentée différemment dans la classe JeuDuTarot et dans une classe d'un jeu où chaque joueur joue successivement.

Voir aussi

Patrons associés


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Patron de méthode (patron de conception) de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • Patron de Méthode (Motif de conception) — Patron de méthode (patron de conception) Patron de méthode: diagramme de classes en UML La technique du patron de méthode (Template method pattern) est un patron de conception (design pattern) comportemental utilisé en génie logiciel. Un patron… …   Wikipédia en Français

  • Patron de methode (patron de conception) — Patron de méthode (patron de conception) Patron de méthode: diagramme de classes en UML La technique du patron de méthode (Template method pattern) est un patron de conception (design pattern) comportemental utilisé en génie logiciel. Un patron… …   Wikipédia en Français

  • Patron de méthode (Motif de conception) — Patron de méthode (patron de conception) Patron de méthode: diagramme de classes en UML La technique du patron de méthode (Template method pattern) est un patron de conception (design pattern) comportemental utilisé en génie logiciel. Un patron… …   Wikipédia en Français

  • Patron de méthode (motif de conception) — Patron de méthode (patron de conception) Patron de méthode: diagramme de classes en UML La technique du patron de méthode (Template method pattern) est un patron de conception (design pattern) comportemental utilisé en génie logiciel. Un patron… …   Wikipédia en Français

  • Patron de conception — Pour les articles homonymes, voir Patron. le patron Proxy En informatique, et plus particulièrement en développement logiciel, un patron de conception (en anglais  …   Wikipédia en Français

  • Observateur (patron de conception) — diagramme UML du patron de conception Observateur Le patron de conception observateur/observable est utilisé en programmation pour envoyer un signal à des modules qui jouent le rôle d observateur. En cas de notification, les observateurs… …   Wikipédia en Français

  • Singleton (patron de conception) —  Pour l’article homonyme, voir Singleton.  En génie logiciel, le singleton est un patron de conception (design pattern) dont l objet est de restreindre l instanciation d une classe à un seul objet (ou bien à quelques objets seulement).… …   Wikipédia en Français

  • Prototype (patron de conception) — Pour les articles homonymes, voir Prototype. Le patron de conception prototype est utilisé lorsque la création d une instance est complexe ou consommatrice en temps. Plutôt que créer plusieurs instances de la classe, on copie la première instance …   Wikipédia en Français

  • Fabrique (Patron De Conception) — Pour les articles homonymes, voir Fabrique. La fabrique (factory) est un patron de conception créationnel utilisé en programmation orientée objet. Comme les autres modèles créationnels, la fabrique a pour rôle l instanciation d objets divers dont …   Wikipédia en Français

  • Commande (Patron De Conception) — En génie logiciel, Commande est un patron de conception (design pattern) de type comportemental qui encapsule la notion d invocation. Il permet de séparer complètement le code initiateur de l action, du code de l action elle même. Ce patron de… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”