Chaque design a un pattern, c’est-à-dire un modèle : qu’il s’agisse d’une tasse, d’un ap­par­te­ment ou d’un vêtement. Il ne viendrait à l’idée de personne, sauf peut-être d’un fabricant de farces et attrapes, de fixer l’anse d’une tasse à l’intérieur de celle-ci. À l’usage, il s’est sim­ple­ment avéré pré­fé­rable que ce composant soit fixé à l’extérieur. Si vous vous rendez à un cours de poterie et souhaitez fabriquer une marmite, vous savez déjà quelle forme celle-ci doit avoir, autrement dit vous avez un patron de con­cep­tion en tête.

Les pro­grammes in­for­ma­tiques fonc­tion­nent de la même façon. Certains processus se répètent sys­té­ma­ti­que­ment et il n’y a qu’un pas à franchir vers la création, dans ce domaine également, de patrons. Découvrez dans cet article comment ces design patterns, aussi appelés patrons de con­cep­tion, peuvent sim­pli­fier la pro­gram­ma­tion.

Les design patterns (patrons de con­cep­tion), qu’est-ce que c’est ?

Le terme « design pattern » tire son origine des travaux de l’ar­chi­tecte américain Chris­to­pher Alexander et de sa com­pi­la­tion de modèles réu­ti­li­sables. Son intention était d’impliquer les futurs uti­li­sa­teurs des bâtiments dans le processus de con­cep­tion. Cette idée a ensuite été reprise par dif­fé­rents in­for­ma­ti­ciens. Le Gang of Four (bande des quatre), Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides, a aidé à po­pu­la­ri­ser les patrons de con­cep­tion grâce au livre Design patterns. Catalogue des modèles de con­cep­tion réu­ti­li­sables en 1994.

De quoi s’agit-il ? Pour reprendre l’exemple cité en in­tro­duc­tion, chaque tasse nécessite pour sa fa­bri­ca­tion un certain nombre d’éléments de base : un fond, des bords et une anse, et ce, qu’il s’agisse d’une tasse à café, à expresso ou d’un mug. La pro­gram­ma­tion fonc­tionne de façon similaire : les boucles continues sont toujours liées à des spé­ci­fi­ca­tions de début et de fin, une condition exige toujours une décision sur ce qui se passe si le résultat cor­res­pond et s’il ne cor­res­pond pas, un calcul donne toujours le résultat de la com­bi­nai­son des variables, etc. À partir des nom­breuses étapes de pro­gram­ma­tion in­di­vi­duelles, se crée une séquence de programme, qui présente toujours les mêmes ca­rac­té­ris­tiques pour certaines tâches. Les patrons de con­cep­tion décrivent comment résoudre un problème.

Ce qui suit est un exemple très simple de patron de con­cep­tion, ici un patron fabrique :

class Tasses
{
    private $tasseMake;
    private $tasseModel;
    public function __construct($make, $model)
    {
        $this->tasseMake = $make;
        $this->tasseModel = $model;
    }
    public function getMakeAndModel()
    {
        return $this->tasseMake . ‘ ‘ . $this->tasseModel;
    }
}
class TassesFactory
{
    public static function create($make, $model)
    {
        return new Tasse($make, $model);
    }
}
$espresso = TassesFactory::create(‘Tasse’, ‘Espresso’); // L’objet est fabriqué
print_r($espresso->getMakeAndModel()); // Résultat « Tasse expresso »

Il en va de même pour les flux et les processus plus larges qui sont cons­tam­ment utilisés pour résoudre certaines tâches dans les séquences de pro­grammes. Cet exemple de code peut être développé à loisir, également pour d’autres secteurs, d’autres produits et d’autres processus. Et il ne s’agit bien sûr que d’une com­po­sante d’un logiciel complet. Les modèles de con­cep­tion doivent donc être con­si­dé­rés comme des schémas qui ont déjà fait leurs preuves dans la pratique.

Quels sont les dif­fé­rents types de design patterns ?

Les types de patrons de con­cep­tion re­pré­sen­tent les domaines d’ap­pli­ca­tion fon­da­men­taux des design patterns qu’ils ras­semblent.

Patrons de structure

Les struc­tu­ral patterns sont des modèles prêts à l’emploi pour les relations entre les classes. L’objectif est de parvenir à une abs­trac­tion qui puisse également com­mu­ni­quer avec d’autres approches : pro­gram­ma­tion d’in­ter­faces par mots-clés.

Patrons de com­por­te­ment

Les be­ha­vio­ral patterns per­met­tent de modéliser les com­por­te­ments d’un logiciel. Ces patrons sim­pli­fient les processus complexes de commande et de contrôle. Pour cela il est possible de choisir entre les al­go­rithmes et les res­pon­sa­bi­li­tés des objets.

Patrons de création

Les crea­tio­nal patterns créent des objets qui per­met­tent une re­pré­sen­ta­tion sim­pli­fiée du processus pour certaines instances. Ils fonc­tion­nent in­dé­pen­dam­ment de la façon dont les objets in­di­vi­duels sont créés et re­pré­sen­tés dans un logiciel.

Au fil du temps, cette ca­té­go­ri­sa­tion s’est enrichie d’autres types de patrons de con­cep­tion, qui n’entrent dans aucune des trois ca­té­go­ries men­tion­nées ci-dessus. Cela inclut des modèles de mapping objet-re­la­tion­nel pour stocker les objets et leurs relations dans une base de données re­la­tion­nelle.

Avantages et in­con­vé­nients de l’uti­li­sa­tion des design patterns

Avantages

La pos­si­bi­lité de recourir à des solutions qui ont fait leurs preuves permet une économie de temps et d’argent. Les équipes de dé­ve­lop­pe­ment n’ont pas à cons­tam­ment réin­ven­ter la roue pour résoudre une sous-tâche, déjà résolue mille fois, dans une nouvelle séquence de programme. Les dif­fé­rents modèles portent gé­né­ra­le­ment des noms issus d’un vo­ca­bu­laire de con­cep­tion commun, ce qui simplifie à la fois la dis­cus­sion entre les dé­ve­lop­peurs et la com­mu­ni­ca­tion avec l’uti­li­sa­teur de la future solution. La do­cu­men­ta­tion d’un logiciel est également sim­pli­fiée si des modules déjà do­cu­men­tés sont utilisés. Ces avantages s’ap­pli­quent ensuite également au maintien et au dé­ve­lop­pe­ment ultérieur d’un programme.

In­con­vé­nients

L’uti­li­sa­tion de patrons de con­cep­tion nécessite de solides con­nais­sances. La dis­po­ni­bi­lité des patrons de con­cep­tion peut également produire la fausse im­pres­sion que tous les problèmes peuvent être résolus grâce à eux. Autrement dit, la créa­ti­vité peut être limitée ainsi que la curiosité de chercher des nouvelles solutions (plus efficaces).

Quels sont les design patterns connus ?

Il existe plus de soixante-dix patrons de con­cep­tion classés en dif­fé­rentes ca­té­go­ries. Les patrons de con­cep­tion im­por­tants sont notamment (en gras dans l’ex­pli­ca­tion = équi­valent français) :

Patrons de création

  • Builder Pattern: le monteur de la catégorie des patrons de création sépare le dé­ve­lop­pe­ment des objets (complexes) de leurs re­pré­sen­ta­tions.
  • Factory Pattern: en tant que patron de création, le patron de méthode fabrique crée un objet en appelant une méthode au lieu d’un cons­truc­teur.
  • Singleton Pattern: en tant que patron de création, ce patron d’exem­plaire unique garantit qu’un seul exem­plaire d’un objet existe dans une classe. Il s’agit d’un patron universel.

Patrons de structure

  • Composite Pattern : un modèle de structure composite spé­cia­le­ment conçu pour traiter les struc­tures dy­na­miques, notamment pour l’or­ga­ni­sa­tion des fichiers ou la com­pres­sion des données.
  • Decorator Pattern : le dé­co­ra­teur intègre d’autres fonc­tion­na­li­tés ou res­pon­sa­bi­li­tés aux classes exis­tantes
  • Facade Pattern : la façade fournit une interface avec d’autres (sous-)systèmes.

Patrons de com­por­te­ment

  • Observer Pattern : l’ob­ser­va­teur transmet les mo­di­fi­ca­tions apportées à un objet aux struc­tures qui dépendent de l’objet original.
  • Strategy Pattern : le patron de stratégie définit une famille d’al­go­rithmes in­ter­chan­geables.
  • Visitor Pattern : le visiteur encapsule les opé­ra­tions exé­cu­tables afin que de nouvelles opé­ra­tions puissent être ef­fec­tuées sans modifier les classes con­cer­nées.
Con­clu­sion

Les design patterns sont des modèles préconçus qui per­met­tent de résoudre des problèmes en utilisant des concepts qui ont fait leurs preuves. Le modèle est basé sur des design de logiciels existants et implique l’uti­li­sa­teur d’une solution future dans le processus de con­cep­tion. Les modèles de con­cep­tion ne sont pas liés à un langage de pro­gram­ma­tion. Ils sont donc uni­ver­sels.

Aller au menu principal