{"id":230056,"date":"2022-11-20T17:36:00","date_gmt":"2022-11-20T14:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230056"},"modified":"2022-11-20T17:41:32","modified_gmt":"2022-11-20T14:41:32","slug":"les-deux-premiers-piliers-de-la-poo","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/les-deux-premiers-piliers-de-la-poo\/","title":{"rendered":"Les deux premiers piliers de la POO"},"content":{"rendered":"\n<p>Quand il s&rsquo;agit de parler de programmation orient\u00e9e objet (ou POO), vous entendrez probablement parler des trois piliers de la programmation orient\u00e9e objet ou des quatre piliers de la programmation orient\u00e9e objet.<\/p>\n<p>Selon votre parcours, vous en avez peut-\u00eatre d\u00e9j\u00e0 entendu parler, vous savez ce qu&rsquo;ils sont et vous n&rsquo;avez pas vraiment besoin de trop vous y plonger. Mais si ce n&rsquo;est pas le cas, je pense que les comprendre est fondamental pour la programmation orient\u00e9e objet.<\/p>\n<p>Nous avons couvert toute la phase d&rsquo; <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">analyse<\/a><\/strong> de la programmation orient\u00e9e objet\u00a0:<\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/programmation-orientee-objet-dans-wordpress-analyse-partie-1\/\" title=\"Analyse, partie 1\">Analyse, partie 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/programmation-orientee-objet-dans-wordpress-analyse-partie-2\/\" title=\"Analyse, partie 2\">Analyse, partie 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/programmation-orientee-objet-dans-wordpress-comprendre-les-attentes-des-clients\/\" title=\"Comprendre les attentes des clients\">Comprendre les attentes des clients<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/programmation-orientee-objet-dans-wordpress-enonce-des-travaux\/\" title=\"\u00c9nonc\u00e9 des travaux\">\u00c9nonc\u00e9 des travaux<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/programmation-orientee-objet-dans-wordpress-termes-et-conditions\/\" title=\"Termes et conditions\">Termes et conditions<\/a><\/li>\n<\/ol>\n<p>Cela dit, entrons dans les discussions sur la conception et la mise en \u0153uvre. Apr\u00e8s tout, c&rsquo;est ce vers quoi beaucoup de gens veulent sauter de toute fa\u00e7on, n&rsquo;est-ce pas ?<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165086-61e77571592ef.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165086-61e77571592ef.jpg\" alt=\"Les deux premiers piliers de la POO\"><\/a><\/p>\n<p>Avant d&rsquo;\u00e9crire le moindre code, j&rsquo;aimerais faire deux articles sur les quatre points de la programmation orient\u00e9e objet (car je fais partie de ceux qui souscrivent \u00e0 l&rsquo;id\u00e9e qu&rsquo;il y en a quatre).<\/p>\n<h2>Deux piliers de la POO<\/h2>\n<p>Encore une fois, les comprendre est essentiel pour comprendre les fondements de la programmation orient\u00e9e objet. Sans eux, il sera difficile de naviguer dans le reste de ce qui sera discut\u00e9 dans les prochains articles.<\/p>\n<p>Sur ce, parlons de chacun d&rsquo;eux. Nous couvrirons les deux premiers dans cet article et les deux derniers dans le prochain article.<\/p>\n<h3>1 Abstraction<\/h3>\n<p>D&rsquo;une mani\u00e8re g\u00e9n\u00e9rale, c&rsquo;est la cl\u00e9 de l&rsquo;\u00e9criture de code orient\u00e9 objet. J&rsquo;entends par l\u00e0 tout ce qui est contenu dans une classe. Nous faisons abstraction de l&rsquo;id\u00e9e de quelque chose dans une classe. Dans de nombreux livres, nous verrons des choses comme les <strong>animaux<\/strong> ou\u00a0 les <strong>voitures<\/strong> repr\u00e9sent\u00e9es comme des classes.<\/p>\n<p>Cela fonctionne, en th\u00e9orie, mais en pratique, nous ne programmons pas d&rsquo;animaux ni de voitures (bien que je suppose qu&rsquo;\u00e0 ce stade de l&rsquo;histoire, vous pourriez dire que nous le sommes, mais je m&rsquo;\u00e9gare parce que vous voyez ce que je veux dire).<\/p>\n<p>Au lieu de cela, nous allons extraire des id\u00e9es dans leurs classes. Et il y a une id\u00e9e cl\u00e9 ici:<\/p>\n<blockquote>\n<p>Une classe doit repr\u00e9senter un nom.<\/p>\n<\/blockquote>\n<p>Autrement dit, vous ne devriez pas avoir une classe qui repr\u00e9sente quelque chose comme &quot;Courir&quot;. Au lieu de cela, vous pouvez avoir quelque chose qui s&rsquo;ex\u00e9cute et, par cons\u00e9quent,\u00a0 les <strong>ex\u00e9cutions<\/strong> seraient une m\u00e9thode. Et c&rsquo;est la r\u00e9partition g\u00e9n\u00e9rale du fonctionnement de l&rsquo;abstraction\u00a0:<\/p>\n<ol>\n<li>La chose qui doit \u00eatre repr\u00e9sent\u00e9e est la classe,<\/li>\n<li>Ce que fait la chose, ce sont ses m\u00e9thodes,<\/li>\n<li>Et la fa\u00e7on dont vous d\u00e9crivez la chose peut g\u00e9n\u00e9ralement \u00eatre faite via ses attributs ou ses propri\u00e9t\u00e9s.<\/li>\n<\/ol>\n<p>Cela ne signifie pas que nous n&rsquo;avons pas de fonctions ou de m\u00e9thodes qui modifient ses propri\u00e9t\u00e9s, mais les trois points ci-dessus sont de bonnes r\u00e8gles de base. Ainsi, lorsque vous concevez une classe, vous pouvez demander des choses comme\u00a0:<\/p>\n<ul>\n<li>Est-ce que j&rsquo;\u00e9cris quelque chose ?<\/li>\n<li>Est-ce que j&rsquo;\u00e9cris quelque chose \u00e0 faire ?<\/li>\n<li>Ou est-ce que j&rsquo;\u00e9cris quelque chose qui d\u00e9crit quelque chose ?<\/li>\n<\/ul>\n<p>Parce que si vous \u00e9crivez une action, c&rsquo;est probablement fait par quelque chose (parce que les choses agissent &#8211; elles font des choses). Et si vous d\u00e9crivez quelque chose, cela fait probablement r\u00e9f\u00e9rence \u00e0 quelque chose (\u00e0 quand remonte la derni\u00e8re fois o\u00f9 vous n&rsquo;avez rien d\u00e9crit\u00a0?)<\/p>\n<p>Avoir du sens\u00a0?<\/p>\n<h3>2 Encapsulation<\/h3>\n<p>Donc, si nous \u00e9crivons des classes \u2013 de bonnes classes \u2013 alors nous devons les \u00e9crire de mani\u00e8re \u00e0 encapsuler correctement leurs donn\u00e9es. Et l&rsquo;encapsulation n&rsquo;est vraiment qu&rsquo;un \u00abgrand\u00bb mot qui fait r\u00e9f\u00e9rence \u00e0 l&rsquo;id\u00e9e de g\u00e9rer ses responsabilit\u00e9s (ou de garder une trace de ses donn\u00e9es).<\/p>\n<p>Ainsi, par exemple, si nous \u00e9crivions une classe pour repr\u00e9senter un article WordPress, nous aurions une classe nomm\u00e9e <strong>Post<\/strong> avec des propri\u00e9t\u00e9s telles que <strong>publier, mettre \u00e0 jour, supprimer,<\/strong> \u00a0<strong>postData, publierDate, lastUpdatedData<\/strong>, <strong>deleteDate<\/strong> et ainsi de suite.<\/p>\n<p>Ensuite, nous aurions des fonctions sp\u00e9cialement con\u00e7ues pour agir sur une instance de la\u00a0 classe <strong>Post<\/strong>.<\/p>\n<p>Par exemple, nous pouvons\u2026<\/p>\n<ul>\n<li>publier,<\/li>\n<li>mettre \u00e0 jour,<\/li>\n<li>ou supprimer un message<\/li>\n<\/ul>\n<p>Ces m\u00e9thodes seront probablement expos\u00e9es de mani\u00e8re \u00e0 ce que d&rsquo;autres classes puissent en tirer parti. De plus, ces m\u00e9thodes tireront probablement \u00e9galement parti d&rsquo;autres propri\u00e9t\u00e9s telles que le <strong>publishDate<\/strong> ou le <strong>deleteDate<\/strong>.<\/p>\n<p>Et c&rsquo;est l\u00e0 que la notion de visibilit\u00e9 entre en jeu. Dans la programmation orient\u00e9e objet, l&rsquo;encapsulation fait non seulement r\u00e9f\u00e9rence \u00e0 l&rsquo;id\u00e9e des informations contenues dans une classe, mais \u00e9galement \u00e0 la mani\u00e8re dont elle expose les donn\u00e9es.<\/p>\n<p>Celles-ci se font de trois mani\u00e8res qui sont toutes d\u00e9finies ci-dessous\u00a0:<\/p>\n<ol>\n<li><strong>les<\/strong> propri\u00e9t\u00e9s et les fonctions publiques sont disponibles pour que n&rsquo;importe qui les utilise\u00a0; cependant,\u00a0 les propri\u00e9t\u00e9s <strong>publiques\u00a0<\/strong> ne sont g\u00e9n\u00e9ralement pas expos\u00e9es. Au lieu de cela, nous nous assurons qu&rsquo;ils peuvent \u00eatre modifi\u00e9s par une\u00a0 m\u00e9thode <strong>publique<\/strong>.<\/li>\n<li><strong>les propri\u00e9t\u00e9s et fonctions prot\u00e9g\u00e9es<\/strong> sont disponibles pour \u00eatre utilis\u00e9es par la classe et toute autre classe qui en h\u00e9rite des informations. Cela sera discut\u00e9 plus en d\u00e9tail dans le prochain post.<\/li>\n<li><strong>les propri\u00e9t\u00e9s et fonctions priv\u00e9es<\/strong> sont celles exclusivement destin\u00e9es \u00e0 \u00eatre utilis\u00e9es dans le contexte d&rsquo;une classe donn\u00e9e. Il peut s&rsquo;agir de propri\u00e9t\u00e9s utilis\u00e9es pour suivre les statuts internes ou de m\u00e9thodes utilis\u00e9es pour fonctionner en tant que fonctions d&rsquo;assistance pour que les fonctions publiques terminent leur travail.<\/li>\n<\/ol>\n<p>Au fur et \u00e0 mesure que nous poursuivrons cette s\u00e9rie, nous verrons le r\u00f4le que chacun de ces \u00e9l\u00e9ments joue lors de la r\u00e9daction de classes claires, faciles \u00e0 suivre et bien architectur\u00e9es.<\/p>\n<p>Pour l&rsquo;instant, cependant, il est important de comprendre que ces mots, <strong>public, protected<\/strong> et <strong>private<\/strong>, sont appel\u00e9s modificateurs de visibilit\u00e9 car, comme vous pouvez le constater, ils g\u00e8rent la visibilit\u00e9 d&rsquo;une m\u00e9thode ou d&rsquo;une propri\u00e9t\u00e9 par rapport \u00e0 sa classe et au classes qui en h\u00e9ritent et qui interagissent avec lui.<\/p>\n<p>En parlant d&rsquo;h\u00e9ritage, j&rsquo;en parlerai dans la prochaine partie de cette s\u00e9rie.<\/p>\n<h2>Abstraction, encapsulation et WordPress<\/h2>\n<h4>La mauvaise nouvelle: Cours sur WordPress<\/h4>\n<p>Voici le probl\u00e8me\u00a0: dans WordPress, nous voyons souvent des classes tr\u00e8s, tr\u00e8s volumineuses. Ce n&rsquo;est pas une bonne chose. En fait, ce sont <a href=\"https:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">des anti-mod\u00e8les<\/a> appel\u00e9s god-classes (l&rsquo;id\u00e9e \u00e9tant que vous avez une seule classe qui sait tout).<\/p>\n<p>Et lorsque vous avez une classe divine, cela semble pratique car vous pouvez d\u00e9poser toutes les fonctionnalit\u00e9s au m\u00eame endroit. Mais<\/p>\n<ul>\n<li>c&rsquo;est difficile \u00e0 tester,<\/li>\n<li>il n&rsquo;est pas \u00e0 l&rsquo;\u00e9chelle,<\/li>\n<li>il ne fonctionne pas bien avec une autre classe (sans parler des classes ou des biblioth\u00e8ques tierces),<\/li>\n<li>il ne s&rsquo;adapte pas bien au changement.<\/li>\n<\/ul>\n<p>En fin de compte, lorsque vous faites cela, vous ne faites pas de programmation orient\u00e9e objet. Vous prenez des fonctions et les jetez dans une classe. Et nous voulons nous en sortir.<\/p>\n<h4>La bonne nouvelle: \u00e9crire des cours sur WordPress<\/h4>\n<p>Cela soul\u00e8ve cependant une question: pourquoi essayer d&rsquo;apprendre la programmation orient\u00e9e objet avec WordPress si ce n&rsquo;est pas un exemple solide de programmation orient\u00e9e objet ?<\/p>\n<p>C&rsquo;est parce que vous pouvez toujours \u00e9crire du bon code orient\u00e9 objet sur WordPress. Il peut toujours bien interagir avec WordPress, et il peut toujours bien jouer avec de nombreux autres aspects de WordPress.<\/p>\n<p>Je sais que cela semble contre-intuitif, mais \u00e0 mesure que nous approfondissons l&rsquo;\u00e9criture de code orient\u00e9 objet sur WordPress, cela devrait devenir clair.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Avant d&rsquo;\u00e9crire du code, j&rsquo;aimerais faire deux articles sur les quatre piliers de la POO. Les deux premiers \u00e9tant l&rsquo;Abstraction et l&rsquo;Encapsulation.<\/p>\n","protected":false},"author":1,"featured_media":165087,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,832,841],"tags":[1167],"class_list":["post-230056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-guide-pour-les-debutants","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=230056"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230056\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/165087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}