{"id":19934,"date":"2023-07-25T12:52:39","date_gmt":"2023-07-25T12:52:39","guid":{"rendered":"https:\/\/devologyx.io\/les-modeles-de-conception-elements-dun-logiciel-oriente-objet-reutilisable\/"},"modified":"2024-10-31T17:54:22","modified_gmt":"2024-10-31T17:54:22","slug":"les-modeles-de-conception-elements-dun-logiciel-oriente-objet-reutilisable","status":"publish","type":"post","link":"https:\/\/devologyx.io\/fr\/les-modeles-de-conception-elements-dun-logiciel-oriente-objet-reutilisable\/","title":{"rendered":"LES MOD\u00c8LES DE CONCEPTION : \u00c9L\u00c9MENTS D&rsquo;UN LOGICIEL ORIENT\u00c9 OBJET R\u00c9UTILISABLE"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Chapitre 1 : Introduction<\/strong><\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-ann-h-1888003-1024x683.jpg\" alt=\"\" class=\"wp-image-17512\" width=\"462\" height=\"308\" srcset=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-ann-h-1888003-1024x683.jpg 1024w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-ann-h-1888003-300x200.jpg 300w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-ann-h-1888003-768x512.jpg 768w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-ann-h-1888003-1536x1024.jpg 1536w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-ann-h-1888003-2048x1366.jpg 2048w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/figure>\n\n<p class=\"wp-block-paragraph\">La conception d&rsquo;un logiciel orient\u00e9 objet est complexe, et celle d&rsquo;un logiciel orient\u00e9 objet r\u00e9utilisable l&rsquo;est encore plus. Vous devez trouver les objets pertinents, les r\u00e9partir dans des classes \u00e0 la bonne granularit\u00e9, d\u00e9finir des interfaces de classe et des hi\u00e9rarchies d&rsquo;h\u00e9ritage, et \u00e9tablir des relations cl\u00e9s entre eux. Votre conception doit \u00eatre sp\u00e9cifique au probl\u00e8me et suffisamment g\u00e9n\u00e9rale pour r\u00e9pondre aux questions et exigences futures.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Qu&rsquo;est-ce qu&rsquo;un mod\u00e8le de conception ?<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Un mod\u00e8le de conception nomme, abstrait et identifie les aspects critiques d&rsquo;une structure de conception standard qui l&rsquo;aident \u00e0 cr\u00e9er une conception orient\u00e9e objet r\u00e9utilisable. Le mod\u00e8le de conception identifie les classes et instances participantes, leurs r\u00f4les et collaborations, ainsi que la r\u00e9partition des responsabilit\u00e9s. Les mod\u00e8les de conception d\u00e9crivent des probl\u00e8mes dans votre environnement et expliquent l&rsquo;essentiel de la solution \u00e0 ce probl\u00e8me afin que vous puissiez utiliser cette solution de mani\u00e8re it\u00e9rative. Un mod\u00e8le de conception comporte quatre \u00e9l\u00e9ments essentiels ;   <\/p>\n\n<ol class=\"wp-block-list\">\n<li>Le nom du mod\u00e8le est un moyen de d\u00e9crire un probl\u00e8me de conception, ses solutions et ses cons\u00e9quences en un mot ou deux. Le fait de nommer un mod\u00e8le vous permet de concevoir \u00e0 un niveau d&rsquo;abstraction plus \u00e9lev\u00e9. <\/li>\n\n\n\n<li>Le probl\u00e8me : il s&rsquo;agit d&rsquo;expliquer quand mettre en \u0153uvre le mod\u00e8le. Il explique la situation et son contexte. Il d\u00e9crit des probl\u00e8mes de conception sp\u00e9cifiques, comme la mani\u00e8re de repr\u00e9senter les algorithmes en tant qu&rsquo;objets.  <\/li>\n\n\n\n<li>La solution : elle illustre les \u00e9l\u00e9ments qui composent la conception, leurs relations, leurs collaborations et leurs responsabilit\u00e9s.<\/li>\n\n\n\n<li>Les cons\u00e9quences : il s&rsquo;agit des r\u00e9sultats et des compromis r\u00e9sultant de l&rsquo;application du mod\u00e8le.<\/li>\n<\/ol>\n\n<p class=\"wp-block-paragraph\"><strong>Mod\u00e8les de conception en Smalltalk MVC<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">La triade de classes Mod\u00e8le\/Vue\/Contr\u00f4leur (MVC) [KP88] est utilis\u00e9e pour construire des interfaces utilisateur dans Smalltalk-80. Le mod\u00e8le, la vue et le contr\u00f4leur comportent trois types d&rsquo;objets. Le mod\u00e8le est l&rsquo;objet de l&rsquo;application, la vue est sa pr\u00e9sentation \u00e0 l&rsquo;\u00e9cran et le contr\u00f4leur d\u00e9finit la mani\u00e8re dont l&rsquo;interface utilisateur r\u00e9agit aux entr\u00e9es de l&rsquo;utilisateur. Avant le MVC, les conceptions d&rsquo;interface utilisateur avaient tendance \u00e0 regrouper ces objets. Le MVC les a ensuite dissoci\u00e9s pour am\u00e9liorer la flexibilit\u00e9 et la r\u00e9utilisation. Le MVC d\u00e9couple les vues et les mod\u00e8les en \u00e9tablissant un protocole de souscription\/notification. Une vue doit s&rsquo;assurer que son apparence refl\u00e8te l&rsquo;\u00e9tat du mod\u00e8le. Chaque fois que les donn\u00e9es du mod\u00e8le changent, elles en informent les vues qui en d\u00e9pendent. En r\u00e9ponse, chaque vue a la possibilit\u00e9 de se mettre \u00e0 jour. Cette approche vous permet d&rsquo;attacher plusieurs vues \u00e0 un mod\u00e8le afin de fournir diff\u00e9rentes pr\u00e9sentations. Vous pouvez \u00e9galement cr\u00e9er de nouvelles vues pour un mod\u00e8le sans le r\u00e9\u00e9crire.          <\/p>\n\n<p class=\"wp-block-paragraph\">MVC vous permet de modifier la fa\u00e7on dont une vue r\u00e9agit \u00e0 l&rsquo;entr\u00e9e de l&rsquo;utilisateur sans modifier sa pr\u00e9sentation visuelle. Vous pouvez, par exemple, modifier la fa\u00e7on dont elle r\u00e9agit au clavier ou utiliser un menu contextuel \u00e0 la place des touches de commande. MVC encapsule le m\u00e9canisme de r\u00e9ponse dans un objet contr\u00f4leur. Une hi\u00e9rarchie de classes de contr\u00f4leurs facilite la cr\u00e9ation d&rsquo;un nouveau contr\u00f4leur en tant que variation d&rsquo;un contr\u00f4leur existant.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Description des mod\u00e8les de conception<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les de conception sont d\u00e9finis selon un format coh\u00e9rent. Chaque mod\u00e8le est divis\u00e9 en sections selon le mod\u00e8le suivant. Le mod\u00e8le conf\u00e8re une structure uniforme \u00e0 l&rsquo;information, ce qui facilite l&rsquo;apprentissage, la comparaison et l&rsquo;utilisation des mod\u00e8les de conception.  <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Nom du motif et classification : Le nom exprime succinctement l&rsquo;essence du motif. Une bonne r\u00e9putation est essentielle car elle fera partie de votre vocabulaire de conception. La classification du mod\u00e8le refl\u00e8te le sch\u00e9ma que nous pr\u00e9sentons \u00e0 la section 1.5.    <\/li>\n\n\n\n<li>L&rsquo;intention : Une br\u00e8ve d\u00e9claration qui r\u00e9pond aux questions suivantes : Que fait le mod\u00e8le de conception ? Quelle est sa raison d&rsquo;\u00eatre et quel est son objectif ? Quelle question ou quel probl\u00e8me de conception particulier aborde-t-il ?    <\/li>\n\n\n\n<li>\u00c9galement connu sous d&rsquo;autres noms connus pour le motif, le cas \u00e9ch\u00e9ant.  <\/li>\n\n\n\n<li>Motivation : Un sc\u00e9nario qui illustre un probl\u00e8me de conception et la fa\u00e7on dont les structures de classes et d&rsquo;objets du mod\u00e8le r\u00e9solvent le probl\u00e8me. Le syst\u00e8me vous aidera \u00e0 comprendre la description plus abstraite du mod\u00e8le suivant. <\/li>\n\n\n\n<li>Applicabilit\u00e9 : Quelles sont les situations dans lesquelles le mod\u00e8le de conception peut \u00eatre appliqu\u00e9 ? Quels sont les exemples de mauvaises conceptions auxquelles le mod\u00e8le peut rem\u00e9dier ? Comment pouvez-vous reconna\u00eetre ces situations ?    <\/li>\n\n\n\n<li>Structure : Une repr\u00e9sentation graphique des classes du mod\u00e8le \u00e0 l&rsquo;aide d&rsquo;une notation bas\u00e9e sur la technique de mod\u00e9lisation d&rsquo;objets (OMT) [RBP+91]. Nous utilisons \u00e9galement des diagrammes d&rsquo;interaction [JCJO92, Boo94] pour illustrer les s\u00e9quences de requ\u00eates et les collaborations entre les objets. L&rsquo;annexe B d\u00e9crit ces notations en d\u00e9tail.  <\/li>\n\n\n\n<li>Participants : Les classes et\/ou objets participant au mod\u00e8le de conception et leurs responsabilit\u00e9s.<\/li>\n\n\n\n<li>Collaborations : Comment les participants collaborent pour assumer leurs responsabilit\u00e9s.  <\/li>\n\n\n\n<li>Cons\u00e9quences : Comment le mod\u00e8le soutient-il ses objectifs ? Quels sont les compromis et les r\u00e9sultats de l&rsquo;utilisation du mod\u00e8le ? Quel aspect de la structure du syst\u00e8me vous permet-il de varier ind\u00e9pendamment ?    <\/li>\n\n\n\n<li>Mise en \u0153uvre : Quels sont les pi\u00e8ges, les conseils ou les techniques \u00e0 conna\u00eetre lors de la mise en \u0153uvre du mod\u00e8le ? Existe-t-il des probl\u00e8mes sp\u00e9cifiques au langage ?   <\/li>\n\n\n\n<li>Exemple de code : Fragments illustrant la mani\u00e8re dont vous pourriez mettre en \u0153uvre le mod\u00e8le en C++ ou en Smalltalk.<\/li>\n\n\n\n<li>Utilisations connues : Exemples de motifs trouv\u00e9s dans des syst\u00e8mes r\u00e9els. Nous incluons au moins deux exemples provenant de domaines diff\u00e9rents.   <\/li>\n\n\n\n<li>Mod\u00e8les apparent\u00e9s : Quels sont les mod\u00e8les de conception \u00e9troitement associ\u00e9s \u00e0 celui-ci ? Quelles sont les diff\u00e9rences essentielles ? Quels autres mod\u00e8les devraient \u00eatre utilis\u00e9s ?    <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\"><strong>Comment les patrons de conception r\u00e9solvent les probl\u00e8mes de conception<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les de conception r\u00e9solvent les probl\u00e8mes de conception en trouvant les objets appropri\u00e9s ; les mod\u00e8les de conception vous aident \u00e0 identifier les abstractions les moins \u00e9videntes et les objets qui peuvent les capturer. Les mod\u00e8les de conception d\u00e9terminent \u00e9galement la granularit\u00e9 des objets ; les mod\u00e8les de conception d\u00e9crivent comment repr\u00e9senter des sous-syst\u00e8mes complets en tant qu&rsquo;objets et prendre en charge un grand nombre d&rsquo;objets aux granularit\u00e9s les plus fines. Les mod\u00e8les de conception vous aident \u00e0 d\u00e9finir les interfaces en identifiant leurs \u00e9l\u00e9ments essentiels et les types de donn\u00e9es envoy\u00e9es \u00e0 travers une interface. Un mod\u00e8le de conception peut \u00e9galement vous indiquer ce qu&rsquo;il ne faut pas mettre dans l&rsquo;interface.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong><em>Citation pr\u00e9f\u00e9r\u00e9e du chapitre : \u00ab\u00a0Les patrons de classes cr\u00e9ationnelles reportent une partie de la cr\u00e9ation de l&rsquo;objet sur les sous-classes, tandis que les patrons d&rsquo;objets cr\u00e9ationnels la reportent sur un autre objet. Les mod\u00e8les de classes structurels utilisent l&rsquo;h\u00e9ritage pour composer des classes, tandis que les mod\u00e8les d&rsquo;objets structurels d\u00e9crivent des fa\u00e7ons d&rsquo;assembler des objets. Les mod\u00e8les de classes comportementales utilisent l&rsquo;h\u00e9ritage pour d\u00e9crire les algorithmes et le flux de contr\u00f4le, tandis que les mod\u00e8les d&rsquo;objets comportementaux d\u00e9crivent la mani\u00e8re dont un groupe d&rsquo;objets coop\u00e8re pour effectuer une t\u00e2che qu&rsquo;aucun objet seul ne peut r\u00e9aliser.  <\/em><\/strong><\/p>\n\n<p class=\"wp-block-paragraph\"><strong><em>seul\u00a0\u00bb.<\/em><\/strong><\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Chapitre deux : Une \u00e9tude de cas : Conception d&rsquo;un \u00e9diteur de documents<\/strong><\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-sam-j-1764956-1024x576.jpg\" alt=\"\" class=\"wp-image-17508\" width=\"463\" height=\"260\" srcset=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-sam-j-1764956-1024x576.jpg 1024w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-sam-j-1764956-300x169.jpg 300w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-sam-j-1764956-768x432.jpg 768w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-sam-j-1764956-1536x864.jpg 1536w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-sam-j-1764956.jpg 1680w\" sizes=\"(max-width: 463px) 100vw, 463px\" \/><\/figure>\n\n<p class=\"wp-block-paragraph\"><strong>Structure du document<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Un document contient des \u00e9l\u00e9ments graphiques essentiels tels que des caract\u00e8res, des lignes, des polygones et d&rsquo;autres formes. Ces \u00e9l\u00e9ments repr\u00e9sentent l&rsquo;ensemble des informations contenues dans le document. Cependant, ces \u00e9l\u00e9ments ne sont pas consid\u00e9r\u00e9s en termes graphiques, mais en termes de structure physique du document &#8211; lignes, colonnes, figures, tableaux et autres sous-structures. \u00c0 leur tour, ces sous-structures ont leurs sous-structures, et ainsi de suite. L&rsquo;interface utilisateur de Lexi doit permettre aux utilisateurs de manipuler directement ces sous-structures. Par exemple, un utilisateur doit pouvoir traiter un diagramme comme une unit\u00e9 plut\u00f4t que comme une collection de primitives graphiques individuelles. L&rsquo;utilisateur doit pouvoir se r\u00e9f\u00e9rer \u00e0 un tableau comme \u00e0 un tout, et non comme \u00e0 une masse informe de texte et de graphiques. Cela contribue \u00e0 rendre l&rsquo;interface simple et intuitive.       <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Formatage<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Apr\u00e8s avoir trouv\u00e9 un moyen de repr\u00e9senter la structure physique du document, vous devez d\u00e9terminer comment construire une structure physique particuli\u00e8re. Une structure qui correspond \u00e0 un document correctement format\u00e9. La repr\u00e9sentation et le formatage sont distincts : la capacit\u00e9 \u00e0 capturer la structure physique du document ne nous dit pas comment arriver \u00e0 un syst\u00e8me particulier. Cette responsabilit\u00e9 incombe principalement \u00e0 Lexi.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Encapsuler l&rsquo;algorithme de formatage :<\/strong> Avec toutes ses contraintes et ses d\u00e9tails, le processus de formatage n&rsquo;est pas facile \u00e0 automatiser. Il existe de nombreuses approches au probl\u00e8me, et les gens ont d\u00e9velopp\u00e9 divers algorithmes de formatage avec des forces et des faiblesses diff\u00e9rentes. Lexi \u00e9tant un \u00e9diteur de type \u00ab\u00a0What You See Is What You Get\u00a0\u00bb, un compromis n\u00e9cessaire \u00e0 prendre en compte est l&rsquo;\u00e9quilibre entre la qualit\u00e9 et la vitesse du formatage. Comme les algorithmes de formatage ont tendance \u00e0 \u00eatre complexes, il est souhaitable qu&rsquo;ils soient bien contenus ou, mieux encore, qu&rsquo;ils soient compl\u00e8tement ind\u00e9pendants de la structure du document. Id\u00e9alement, nous pourrions ajouter un nouveau type de sous-classe Glyph sans tenir compte de l&rsquo;algorithme de formatage. Inversement, l&rsquo;ajout d&rsquo;un nouvel algorithme de formatage ne devrait pas n\u00e9cessiter la modification des glyphes existants.     <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Mod\u00e8le de strat\u00e9gie :<\/strong> L&rsquo;encapsulation d&rsquo;un algorithme dans un objet est l&rsquo;objectif du mod\u00e8le de strat\u00e9gie. Les participants cl\u00e9s du mod\u00e8le sont les objets Strat\u00e9gie qui encapsulent diff\u00e9rents algorithmes et le contexte dans lequel ils op\u00e8rent. Les compositeurs sont des strat\u00e9gies ; ils encapsulent diff\u00e9rents algorithmes de formatage. La composition est le contexte d&rsquo;une strat\u00e9gie de compositeur. La cl\u00e9 de l&rsquo;application du mod\u00e8le de strat\u00e9gie est la conception d&rsquo;interfaces pour le syst\u00e8me et son contexte qui sont suffisamment g\u00e9n\u00e9rales pour prendre en charge une gamme d&rsquo;algorithmes.    <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Embellir l&rsquo;interface utilisateur<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Consid\u00e9rez deux embellissements dans l&rsquo;interface utilisateur de Lexi. La premi\u00e8re ajoute une bordure autour de la zone d&rsquo;\u00e9dition de texte pour d\u00e9limiter la page de texte. Le second ajoute des barres de d\u00e9filement qui permettent \u00e0 l&rsquo;utilisateur de visualiser diff\u00e9rentes parties de la page. Pour faciliter l&rsquo;ajout et la suppression de ces embellissements (en particulier lors de l&rsquo;ex\u00e9cution), vous ne devez pas utiliser l&rsquo;h\u00e9ritage pour les ajouter \u00e0 l&rsquo;interface utilisateur. Vous obtiendrez une plus grande flexibilit\u00e9 si les autres objets de l&rsquo;interface utilisateur ne savent m\u00eame pas que les embellissements sont l\u00e0. Cela nous permettra d&rsquo;ajouter et de supprimer les embellissements sans modifier d&rsquo;autres classes.     <\/p>\n\n<p class=\"wp-block-paragraph\">Du point de vue de la programmation, l&#8217;embellissement de l&rsquo;interface utilisateur implique l&rsquo;extension du code existant. L&rsquo;utilisation de l&rsquo;h\u00e9ritage pour r\u00e9aliser cette extension emp\u00eache de r\u00e9organiser les embellissements au moment de l&rsquo;ex\u00e9cution, mais un probl\u00e8me tout aussi grave est l&rsquo;explosion des classes r\u00e9sultant d&rsquo;une approche bas\u00e9e sur l&rsquo;h\u00e9ritage. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Mod\u00e8le de d\u00e9corateur :<\/strong> Le mod\u00e8le du d\u00e9corateur (196) capture les relations entre les classes et les objets qui supportent l&#8217;embellissement par l&rsquo;enfermement transparent. Le terme \u00ab\u00a0embellissement\u00a0\u00bb a une signification plus large que celle que nous avons envisag\u00e9e ici. Dans le mod\u00e8le Decorator, l&#8217;embellissement fait r\u00e9f\u00e9rence \u00e0 tout ce qui ajoute des responsabilit\u00e9s \u00e0 un objet.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong><em>Citation pr\u00e9f\u00e9r\u00e9e : \u00ab\u00a0Le choix de la repr\u00e9sentation interne du document influe sur presque tous les aspects de la conception de Lexi.<\/em><\/strong><\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Chapitre trois : Mod\u00e8les de cr\u00e9ation<\/strong><\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-scott-webb-430207-1024x683.jpg\" alt=\"\" class=\"wp-image-17504\" width=\"462\" height=\"308\" srcset=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-scott-webb-430207-1024x683.jpg 1024w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-scott-webb-430207-300x200.jpg 300w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-scott-webb-430207-768x512.jpg 768w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-scott-webb-430207-1536x1024.jpg 1536w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-scott-webb-430207-2048x1366.jpg 2048w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/figure>\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les de conception cr\u00e9ative font abstraction du processus d&rsquo;instanciation. Ils contribuent \u00e0 rendre un syst\u00e8me ind\u00e9pendant de la mani\u00e8re dont ses objets sont cr\u00e9\u00e9s, compos\u00e9s et repr\u00e9sent\u00e9s. Un mod\u00e8le de cr\u00e9ation de classe utilise l&rsquo;h\u00e9ritage pour varier la classe instanci\u00e9e, tandis qu&rsquo;un mod\u00e8le de cr\u00e9ation d&rsquo;objet d\u00e9l\u00e8gue l&rsquo;instanciation \u00e0 un autre objet.  <\/p>\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les de cr\u00e9ation deviennent essentiels lorsque les syst\u00e8mes d\u00e9pendent davantage de la composition d&rsquo;objets que de l&rsquo;h\u00e9ritage de classes. Dans ce cas, l&rsquo;accent n&rsquo;est plus mis sur le codage en dur d&rsquo;un ensemble fixe de comportements, mais sur la d\u00e9finition d&rsquo;un groupe plus restreint de comportements fondamentaux qui peuvent \u00eatre compos\u00e9s d&rsquo;autres comportements plus complexes. Ainsi, la cr\u00e9ation d&rsquo;objets ayant des comportements sp\u00e9cifiques n\u00e9cessite plus que la simple instanciation d&rsquo;une classe.  <\/p>\n\n<p class=\"wp-block-paragraph\">Il y a deux th\u00e8mes r\u00e9currents dans ces mod\u00e8les. Premi\u00e8rement, ils encapsulent tous des connaissances sur les classes concr\u00e8tes utilis\u00e9es par le syst\u00e8me. Deuxi\u00e8mement, ils cachent la mani\u00e8re dont les instances de ces classes sont cr\u00e9\u00e9es et assembl\u00e9es. Tout ce que le syst\u00e8me dans son ensemble conna\u00eet des objets, ce sont leurs interfaces d\u00e9finies par des classes abstraites. Les mod\u00e8les cr\u00e9atifs peuvent parfois \u00eatre des concurrents. En d&rsquo;autres termes, il existe des cas o\u00f9 Prototype ou Abstract Factory peuvent \u00eatre utilis\u00e9s avec profit. Dans d&rsquo;autres cas, ils sont compl\u00e9mentaires : Le constructeur peut utiliser l&rsquo;un des diff\u00e9rents mod\u00e8les pour mettre en \u0153uvre les composants \u00e0 construire. Le prototype peut utiliser Singleton dans son impl\u00e9mentation. Les mod\u00e8les cr\u00e9atifs sont les suivants ;        <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Usine abstraite :<\/strong> Fournir une interface pour cr\u00e9er des familles d&rsquo;objets li\u00e9s ou d\u00e9pendants sans sp\u00e9cifier leurs classes concr\u00e8tes.<\/p>\n\n<p class=\"wp-block-paragraph\">Constructeur : S\u00e9parer la construction d&rsquo;un objet complexe de sa repr\u00e9sentation afin que le m\u00eame processus de construction puisse cr\u00e9er des expressions diff\u00e9rentes.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>M\u00e9thode d&rsquo;usine :<\/strong> D\u00e9finir une interface pour la cr\u00e9ation d&rsquo;un objet, mais laisser les sous-classes d\u00e9cider de la classe \u00e0 instancier. La m\u00e9thode Factory permet \u00e0 une classe de diff\u00e9rer l&rsquo;instanciation \u00e0 des sous-classes. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Prototype :<\/strong> Sp\u00e9cifiez les types d&rsquo;objets \u00e0 cr\u00e9er \u00e0 l&rsquo;aide d&rsquo;une instance prototypique et cr\u00e9ez de nouveaux objets en copiant ce prototype.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Singleton :<\/strong> Assurez-vous qu&rsquo;une classe n&rsquo;a qu&rsquo;une seule instance et fournissez un point d&rsquo;acc\u00e8s global \u00e0 cette instance.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong><em>Citation pr\u00e9f\u00e9r\u00e9e du chapitre : \u00ab\u00a0Il y a deux th\u00e8mes r\u00e9currents dans ces mod\u00e8les. Premi\u00e8rement, ils encapsulent tous des connaissances sur les classes concr\u00e8tes utilis\u00e9es par le syst\u00e8me. Deuxi\u00e8mement, ils cachent la fa\u00e7on dont les instances de ces classes sont cr\u00e9\u00e9es et assembl\u00e9es.\u00a0\u00bb<\/em><\/strong><\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Chapitre quatre : Mod\u00e8les structurels<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les structurels traitent de la mani\u00e8re dont les classes et les objets sont compos\u00e9s pour former des structures plus importantes. Les mod\u00e8les structurels de classes utilisent l&rsquo;h\u00e9ritage pour rassembler les interfaces ou les impl\u00e9mentations. A titre d&rsquo;exemple simple, consid\u00e9rez comment  <\/p>\n\n<p class=\"wp-block-paragraph\">les successions multiples m\u00e9langent deux ou plusieurs classes en une seule. Le r\u00e9sultat est une classe qui combine les propri\u00e9t\u00e9s de ses classes m\u00e8res. Ce mod\u00e8le est pratique pour faire fonctionner ensemble des biblioth\u00e8ques de classes d\u00e9velopp\u00e9es ind\u00e9pendamment les unes des autres. Un autre exemple est la forme de classe du mod\u00e8le de l&rsquo;adaptateur. En g\u00e9n\u00e9ral, un adaptateur rend une interface conforme \u00e0 une autre, fournissant une abstraction uniforme de diff\u00e9rentes interfaces. Un adaptateur de classe accomplit cette t\u00e2che en h\u00e9ritant de mani\u00e8re priv\u00e9e d&rsquo;une classe d&rsquo;adaptateur. L&rsquo;adaptateur exprime ensuite son interface en termes d&rsquo;adaptateurs. Les mod\u00e8les d&rsquo;objets structurels d\u00e9crivent des fa\u00e7ons de composer des objets pour r\u00e9aliser de nouvelles fonctionnalit\u00e9s. La flexibilit\u00e9 accrue de la composition d&rsquo;objets provient de la possibilit\u00e9 de modifier le document au moment de l&rsquo;ex\u00e9cution, ce qui est impossible avec la composition de classes statiques. Un mod\u00e8le d&rsquo;objet structurel d\u00e9crit la construction d&rsquo;une hi\u00e9rarchie de classes pour deux types d&rsquo;objets : les objets primitifs et les objets composites. Les objets composites vous permettent de composer des objets primitifs et d&rsquo;autres objets composites dans des structures arbitrairement complexes. Vous trouverez ci-dessous les mod\u00e8les structurels que vous devez conna\u00eetre ;           <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Adaptateur :<\/strong> Convertir l&rsquo;interface d&rsquo;une classe en une autre interface attendue par les clients. L&rsquo;adaptateur permet \u00e0 des classes de travailler ensemble alors qu&rsquo;elles ne pourraient le faire autrement en raison d&rsquo;interfaces incompatibles.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Pont :<\/strong> D\u00e9coupler une abstraction de sa mise en \u0153uvre afin que les deux puissent varier ind\u00e9pendamment.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Compos\u00e9 :<\/strong> Composez des objets dans des structures arborescentes pour repr\u00e9senter des hi\u00e9rarchies partie-tout. Le composite permet aux clients de traiter uniform\u00e9ment les objets individuels et les compositions d&rsquo;objets. <\/p>\n\n<p class=\"wp-block-paragraph\">D\u00e9corateur : Attachez dynamiquement des responsabilit\u00e9s suppl\u00e9mentaires \u00e0 un objet. Les d\u00e9corateurs constituent une alternative flexible \u00e0 la sous-classe pour \u00e9tendre les fonctionnalit\u00e9s. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Facade :<\/strong> Fournir une interface unifi\u00e9e \u00e0 un ensemble d&rsquo;interfaces dans un sous-syst\u00e8me. Une fa\u00e7ade d\u00e9finit une interface de niveau sup\u00e9rieur qui facilite l&rsquo;utilisation du sous-syst\u00e8me. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Poids plume :<\/strong> Utilisez le partage pour prendre en charge efficacement un grand nombre d&rsquo;objets \u00e0 grain fin.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Proxy :<\/strong> Fournir un substitut ou une place pour un autre objet afin d&rsquo;en contr\u00f4ler l&rsquo;acc\u00e8s.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>\n  <em>Citation pr\u00e9f\u00e9r\u00e9e : \u00ab\u00a0Plut\u00f4t que de composer des interfaces ou des impl\u00e9mentations, les mod\u00e8les d&rsquo;objets structurels d\u00e9crivent des fa\u00e7ons de composer des objets pour r\u00e9aliser de nouvelles fonctionnalit\u00e9s<\/em>\n<\/strong>.\u00a0\u00bb<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Chapitre cinq : Mod\u00e8les de comportement<\/strong><\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-karolina-grabowska-4466208-1024x716.jpg\" alt=\"\" class=\"wp-image-17517\" width=\"462\" height=\"323\" srcset=\"https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-karolina-grabowska-4466208-1024x716.jpg 1024w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-karolina-grabowska-4466208-300x210.jpg 300w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-karolina-grabowska-4466208-768x537.jpg 768w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-karolina-grabowska-4466208-1536x1075.jpg 1536w, https:\/\/devologyx.io\/wp-content\/uploads\/2023\/07\/pexels-karolina-grabowska-4466208.jpg 1761w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/figure>\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les comportementaux concernent les algorithmes et l&rsquo;attribution des responsabilit\u00e9s entre les objets.<\/p>\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les comportementaux d\u00e9crivent non seulement les mod\u00e8les d&rsquo;objets ou de classes, mais aussi les mod\u00e8les de communication entre eux. Ces mod\u00e8les caract\u00e9risent un flux de contr\u00f4le complexe qui est difficile \u00e0 suivre au moment de l&rsquo;ex\u00e9cution. Ils vous d\u00e9tournent du flux de contr\u00f4le pour vous permettre de vous concentrer sur la mani\u00e8re dont les objets sont interconnect\u00e9s. Les mod\u00e8les de classes comportementales utilisent l&rsquo;h\u00e9ritage pour distribuer le comportement entre les classes. Ce chapitre comprend deux de ces mod\u00e8les. Le mod\u00e8le de m\u00e9thode (360) est le plus simple et le plus courant des deux. Une m\u00e9thode mod\u00e8le est une d\u00e9finition abstraite d&rsquo;un algorithme. Elle d\u00e9finit l&rsquo;algorithme \u00e9tape par \u00e9tape. Chaque \u00e9tape invoque soit une op\u00e9ration abstraite, soit une op\u00e9ration primitive. Une sous-classe compl\u00e8te l&rsquo;algorithme en d\u00e9finissant les op\u00e9rations abstraites. L&rsquo;autre mod\u00e8le de classe comportementale est Interpr\u00e8te (274), qui repr\u00e9sente la grammaire comme une hi\u00e9rarchie de classes et impl\u00e9mente un interpr\u00e8te comme une op\u00e9ration sur les instances de ces classes. Les mod\u00e8les d&rsquo;objets comportementaux utilisent la composition d&rsquo;objets plut\u00f4t que l&rsquo;h\u00e9ritage. Certains d\u00e9crivent la mani\u00e8re dont un groupe d&rsquo;objets pairs coop\u00e8re pour effectuer une t\u00e2che qu&rsquo;aucun objet ne peut r\u00e9aliser seul. Il est important de savoir comment les objets pairs se connaissent les uns les autres. Les pairs peuvent maintenir des r\u00e9f\u00e9rences explicites les uns aux autres, ce qui accro\u00eet leur couplage. \u00c0 l&rsquo;extr\u00eame, chaque objet conna\u00eetrait tous les autres. Le mod\u00e8le du m\u00e9diateur (305) \u00e9vite ce probl\u00e8me en introduisant un objet m\u00e9diateur entre les pairs. Le m\u00e9diateur fournit l&rsquo;indirection n\u00e9cessaire \u00e0 un couplage l\u00e2che. Il s&rsquo;agit l\u00e0 de quelques-uns des mod\u00e8les de comportement ;                  <\/p>\n\n<p class=\"wp-block-paragraph\">Interpr\u00e8te : \u00c9tant donn\u00e9 une langue, d\u00e9finissez une repr\u00e9sentation de sa grammaire et un interpr\u00e8te qui utilise la repr\u00e9sentation pour interpr\u00e9ter les phrases de la langue.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Commande :<\/strong> Encapsule une requ\u00eate sous forme d&rsquo;objet, ce qui vous permet de param\u00e9trer les clients avec diff\u00e9rentes requ\u00eates, de mettre les requ\u00eates en file d&rsquo;attente ou de les enregistrer, et de prendre en charge les op\u00e9rations annulables.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>It\u00e9rateur :<\/strong> Fournir un moyen d&rsquo;acc\u00e9der aux \u00e9l\u00e9ments d&rsquo;un objet agr\u00e9g\u00e9 de mani\u00e8re s\u00e9quentielle sans exposer sa repr\u00e9sentation sous-jacente.<\/p>\n\n<p class=\"wp-block-paragraph\">M\u00e9diateur : D\u00e9finir un objet qui encapsule la mani\u00e8re dont un ensemble d&rsquo;objets interagissent. Le m\u00e9diateur favorise le couplage l\u00e2che en emp\u00eachant les objets de se r\u00e9f\u00e9rer explicitement les uns aux autres et en vous permettant de faire varier leur interaction de mani\u00e8re ind\u00e9pendante.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>M\u00e9mento :<\/strong> Sans violer l&rsquo;encapsulation, capturez et externalisez l&rsquo;\u00e9tat interne d&rsquo;un objet de mani\u00e8re \u00e0 ce que l&rsquo;objet puisse \u00eatre restaur\u00e9 dans cet \u00e9tat ult\u00e9rieurement.<\/p>\n\n<p class=\"wp-block-paragraph\">Observer : D\u00e9finissez une d\u00e9pendance de type \u00ab\u00a0un pour plusieurs\u00a0\u00bb entre les objets, de sorte que lorsqu&rsquo;un objet change d&rsquo;\u00e9tat, tous ses d\u00e9pendants en sont inform\u00e9s et mis \u00e0 jour automatiquement.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>\u00c9tat :<\/strong> Permet \u00e0 un objet de modifier son comportement lorsque son \u00e9tat interne change. L&rsquo;objet semblera changer de classe.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Strat\u00e9gie :<\/strong> D\u00e9finir une famille d&rsquo;algorithmes, encapsuler chacun d&rsquo;entre eux et les rendre interchangeables. La strat\u00e9gie permet \u00e0 l&rsquo;algorithme de varier ind\u00e9pendamment des clients qui l&rsquo;utilisent. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong><em>Coup de c\u0153ur du chapitre : Une question importante ici est de savoir comment les objets pairs se connaissent les uns les autres\u00a0\u00bb.<\/em><\/strong><\/p>\n\n<p class=\"wp-block-paragraph\"><strong>COMMENT CE LIVRE PEUT AIDER LES D\u00c9VELOPPEURS DE LOGICIELS<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Le livre \u00ab\u00a0Design Patterns : Elements of Reusable Object-Oriented Software\u00a0\u00bb par Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides est un ouvrage de r\u00e9f\u00e9rence dans le domaine du g\u00e9nie logiciel qui d\u00e9crit 23 mod\u00e8les de conception pour la programmation orient\u00e9e objet. C&rsquo;est un livre qui peut aider les d\u00e9veloppeurs de logiciels en leur fournissant des solutions r\u00e9utilisables \u00e0 des probl\u00e8mes de conception courants dans le d\u00e9veloppement de logiciels orient\u00e9s objet. Ces mod\u00e8les r\u00e9solvent des probl\u00e8mes de conception courants et favorisent un code flexible, r\u00e9utilisable et facile \u00e0 maintenir. En comprenant et en appliquant ces mod\u00e8les, les d\u00e9veloppeurs de logiciels peuvent \u00e9crire un code plus efficace, modulaire et extensible qui est plus facile \u00e0 comprendre, \u00e0 modifier et \u00e0 maintenir au fil du temps.   <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chapitre 1 : Introduction La conception d&rsquo;un logiciel orient\u00e9 objet est complexe, et celle d&rsquo;un logiciel orient\u00e9 objet r\u00e9utilisable l&rsquo;est encore plus. Vous devez trouver les objets pertinents, les r\u00e9partir dans des classes \u00e0 la bonne granularit\u00e9, d\u00e9finir des interfaces de classe et des hi\u00e9rarchies d&rsquo;h\u00e9ritage, et \u00e9tablir des relations cl\u00e9s entre eux. Votre conception [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17497,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"_jet_sm_ready_style":"","_jet_sm_style":"","_jet_sm_controls_values":"","_jet_sm_fonts_collection":"","_jet_sm_fonts_links":"","footnotes":""},"categories":[102],"tags":[],"writer":[],"class_list":["post-19934","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-club-de-lecture"],"_links":{"self":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts\/19934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/comments?post=19934"}],"version-history":[{"count":1,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts\/19934\/revisions"}],"predecessor-version":[{"id":19936,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/posts\/19934\/revisions\/19936"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/media\/17497"}],"wp:attachment":[{"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/media?parent=19934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/categories?post=19934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/tags?post=19934"},{"taxonomy":"writer","embeddable":true,"href":"https:\/\/devologyx.io\/fr\/wp-json\/wp\/v2\/writer?post=19934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}