Patron de conception 140758 28267589 2008-04-04T09:06:25Z Fabusnow 110435 /* Bibliographie */ {{Voir homonymes|motif}} En [[génie logiciel]], un '''patron de conception''' (''design pattern'' en [[anglais]]) est un concept destiné à résoudre les problèmes récurrents suivant le paradigme [[programmation objet|objet]]. En français on utilise aussi le terme '''motif de conception''' qui est une traduction alternative de «design pattern», perçue comme incorrecte par certains. Les patrons de conception décrivent des solutions standards pour répondre à des problèmes d'[[architecture logicielle|architecture]] et de conception des logiciels. À la différence d'un [[Algorithmique|algorithme]] qui s'attache à décrire d'une manière formelle comment résoudre un problème particulier, les patrons de conception décrivent des procédés de conception généraux. On peut considérer un patron de conception comme une formalisation de bonnes pratiques, ce qui signifie qu'on privilégie les solutions éprouvées (un patron de conception n'est considéré comme « prouvé » qu'une fois qu'il a été utilisé avec succès au moins dans trois cas). Il ne s'agit pas de fragments de code, puisque les patrons de conception sont le plus souvent indépendants du [[langage de programmation]], mais d'une méthode de conception, c’est-à-dire d'une manière standardisée de résoudre un problème qui s'est déjà posé par le passé. Le concept de patron de conception a donc une grande influence sur l'[[architecture logicielle]] d'un système. On peut donc considérer les patrons de conception comme un outil de capitalisation de l'expérience appliqué à la conception logicielle. == But général == Le but général des patrons de conception est de minimiser les interactions qu'il peut y avoir entre les différentes [[Programmation orientée objet|classes]] (ou modules, plus généralement) d'un même programme. L'avantage de ces patrons est de diminuer le temps nécessaire au développement d'un logiciel et d'augmenter la qualité du résultat, notamment en appliquant des solutions déjà existantes à des problèmes courants de conception. Ils sont là pour éviter la présence d'[[anti-patron|anti-patrons]]. Ils sont aussi utiles pour définir un vocabulaire commun entre les différents acteurs de l'écriture d'un logiciel. Ces patrons sont décrits sous une forme abstraite, sans s'attacher aux détails du problème à résoudre. == Histoire == Formalisé dans le livre du « Gang of Four » (GoF, [[Erich Gamma]], [[Richard Helm]], [[Ralph Johnson]] et [[John Vlissides]]) intitulé « Design Patterns -- Elements of Reusable Object-Oriented Software » (voir bibliographie) en [[1995]], les patrons de conception tirent leur origine des travaux de l'[[architecte]] [[Christopher Alexander]] dans les [[années 1970|années 70]]. === Citations === * « Chaque patron décrit un problème qui se manifeste constamment dans notre environnement, et donc décrit le cœur de la solution à ce problème, d’une façon telle que l’on puisse réutiliser cette solution des millions de fois, sans jamais le faire deux fois de la même manière » [[Christopher Alexander]] - 1977. * « Les patrons offrent la possibilité de capitaliser un savoir précieux né du savoir-faire d’experts » [Buschmann] - 1996. == Formalisme == La description d'un patron de conception suit un formalisme fixe : * Nom * Description du problème à résoudre * Description de la solution : les éléments de la solution, avec leurs relations. La solution est appelée '''patron de conception'''. * Conséquences : résultats issus de la solution. Ce [[formalisme]] aide surtout à mieux comprendre l'utilisation et la logique interne de chaque patron, mais ne correspond pas à l'usage habituel du terme. Le mot structure serait peut-être mieux adapté. Un aspect de construction plus important est l'[[orthogonalité]]: chaque patron doit correspondre à une approche différente, qui ne répète pas les idées ou stratégies présentes dans d'autres patrons. Cette qualité devrait permettre d'aider le concepteur à décortiquer un problème et à en résoudre chaque aspect d'une façon organisée, ainsi que de combiner les patrons pour construire une solution. Certains auteurs voient alors un manque d'orthogonalité dans les patrons GoF, tandis que d'autres en proposent encore davantage (Vlissides, Grand). == Liste des patrons de conception du GoF == On distingue trois familles de patrons de conception selon leur utilisation : * créationnels : ils définissent comment faire l'[[instanciation]] et la [[configuration]] des classes et des [[objet (informatique)|objets]]. * structuraux : ils définissent comment organiser les classes d'un programme dans une structure plus large (séparant l'interface de l'implémentation). * comportementaux : ils définissent comment organiser les [[objet (informatique)|objets]] pour que ceux-ci collaborent (distribution des responsabilités) et expliquent le fonctionnement des [[Algorithmique|algorithmes]] impliqués. == Patrons de conception les plus répandus == Les patrons de conception les plus répandus sont au nombre de 23. Ils sont couramment appelés « patrons GoF » (de « Gang of Four », d'après les quatre créateurs du concept)<ref>{{Ref Gang of Four Design Patterns}}</ref>. Le patron [[Modèle-Vue-Contrôleur]] (MVC) est une combinaison des patrons ''[[Observateur (patron de conception)|Observateur]]'', ''[[Stratégie (patron de conception)|Stratégie]]'' et ''[[Objet composite|Composite]]''. === Création === * ''[[Fabrique abstraite (patron de conception)|Fabrique abstraite]] ([[:en:Abstract factory pattern|Abstract Factory]])'' * ''[[Monteur (patron de conception)|Monteur]] ([[:en:Builder pattern|Builder]])'' * ''[[Fabrique (patron de conception)|Fabrique]] ([[:en:Factory method pattern|Factory Method]])'' * ''[[Prototype (patron de conception)|Prototype]] ([[:en:Prototype pattern|Prototype]])'' * ''[[Singleton (patron de conception)|Singleton]] ([[:en:Singleton pattern|Singleton]])'' === Structure === * ''[[Adaptateur (patron de conception)|Adaptateur]] ([[:en:Adapter pattern|Adapter]])'' * ''[[Pont (patron de conception)|Pont]] ([[:en:Bridge pattern|Bridge]])'' * ''[[Objet composite]] ([[:en:Composite pattern|Composite]])'' * ''[[Décorateur (patron de conception)|Décorateur]] ([[:en:Decorator pattern|Decorator]])'' * ''[[Façade (patron de conception)|Façade]] ([[:en:Facade pattern|Facade]])'' * ''[[Poids-mouche (patron de conception)|Poids-mouche]] ou poids-plume ([[:en:Flyweight pattern|Flyweight]])'' * ''[[Proxy (patron de conception)|Proxy]] ([[:en:Proxy pattern|Proxy]])'' === Comportement === * ''[[Chaîne de responsabilité (patron de conception)|Chaîne de responsabilité]] ([[:en:Chain of responsibility pattern|Chain of responsibility]])'' * ''[[Commande (patron de conception)|Commande]] ([[:en:Command pattern|Command]])'' * ''[[Interpréteur (patron de conception)|Interpréteur]] ([[:en:Interpreter pattern|Interpreter]])'' * ''[[Itérateur (patron de conception)|Itérateur]] ([[:en:Iterator pattern|Iterator]])'' * ''[[Médiateur (patron de conception)|Médiateur]] ([[:en:Mediator pattern|Mediator]])'' * ''[[Memento (patron de conception)|Memento]] ([[:en:Memento pattern|Memento]])'' * ''[[Observateur (patron de conception)|Observateur]] ([[:en:Observer pattern|Observer]])'' * ''[[État (patron de conception)|État]] ([[:en:State pattern|State]])'' * ''[[Stratégie (patron de conception)|Stratégie]] ([[:en:Strategy pattern|Strategy]])'' * ''[[Patron de méthode (patron de conception)|Patron de méthode]] ([[:en:Template method pattern|Template Method]])'' * ''[[Visiteur (patron de conception)|Visiteur]] ([[:en:Visitor pattern|Visitor]])'' === Patron GRASP === Les patrons GRASP sont des patrons créés par [[Craig Larman]] qui décrivent des règles pour affecter les responsabilités aux classes d'un programme orienté objets pendant la conception, en liaison avec la méthode de conception BCE (pour « Boundary Control Entity » - en français MVC « Modèle Vue Contrôleur »)<ref>[[Image:Nuvola apps ksig horizonta.png|30px]] ''UML 2 et les Design Patterns'' - Craig Larman (3{{e}} édition) ISBN 2744070904</ref> : *''Responsabilités'' *''Expert'' *''Créateur'' *''Faible couplage'' *''Forte cohésion'' *''Contrôleur'' *''Polymorphisme'' *''Indirection'' *''Fabrication pure'' === Autres patrons de conception === * [[Modèle-Vue-Contrôleur]] * [[Inversion de contrôle]] * [[Injection de dépendances]] == Thème connexe == * [[Antipattern]] == Références == <references /> == Bibliographie == * [[Christopher Alexander]], S. Ishikawa, M. Silverstein, M. Jacobson, I. Fiksdahl-King and S. Angel, ([[1977]]), ''A Pattern Language : Towns, Buildings, Construction'', ISBN 0195019199 * Design patterns - [http://www.oreilly.fr/archives/2841773507TDM.pdf Tête la première, de Eric Freeman, Elisabeth Freeman, Kathy Sierra et Bert Bates]. ISBN 2841773507 (1{{re}} édition, septembre 2005) * Pattern Languages of Program Design - James O. Coplien, Douglas C. Schmidt. ([[1995]]), ISBN 0201607344 {{portail|informatique}} [[Catégorie:Patron de conception|*]] [[Catégorie:Architecture logicielle]] [[ast:Patrón de diseñu]] [[bs:Računarska dizajn šema]] [[ca:Patró de disseny (informàtica)]] [[cs:Návrhový vzor]] [[da:Design pattern]] [[de:Entwurfsmuster]] [[en:Design pattern (computer science)]] [[es:Patrón de diseño]] [[fi:Suunnittelumalli]] [[he:תבנית עיצוב]] [[id:Design pattern]] [[it:Design pattern]] [[ja:デザインパターン (ソフトウェア)]] [[ko:디자인 패턴]] [[lt:Projektavimo pavyzdys]] [[nl:Ontwerppatroon]] [[no:Design pattern]] [[pl:Wzorzec projektowy (informatyka)]] [[pt:Padrões de projeto de software]] [[ru:Шаблоны проектирования]] [[simple:Design pattern]] [[sv:Designmönster]] [[tr:Tasarım kalıpları]] [[vi:Mẫu thiết kế (khoa học máy tính)]] [[zh:软件设计模式]]