{"id":230136,"date":"2022-11-22T15:30:00","date_gmt":"2022-11-22T12:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230136"},"modified":"2022-11-22T15:32:13","modified_gmt":"2022-11-22T12:32:13","slug":"classes-abstraites-partie-2-classes-abstraites-et-interfaces","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/classes-abstraites-partie-2-classes-abstraites-et-interfaces\/","title":{"rendered":"Classes abstraites, partie 2 \u2013 Classes abstraites et interfaces"},"content":{"rendered":"\n<p>Dans <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/classes-abstraites-partie-1-comportement-dabstraction\/\" title=\"le post pr\u00e9c\u00e9dent\">le post pr\u00e9c\u00e9dent<\/a><\/strong> de cette s\u00e9rie, j&rsquo;ai parcouru:<\/p>\n<ul>\n<li>les bases des classes abstraites,<\/li>\n<li>comment les mettre en \u0153uvre,<\/li>\n<li>et fourni des exemples de code de travail.<\/li>\n<\/ul>\n<p>Et bien que je pense que la compr\u00e9hension des classes abstraites est essentielle pour jeter des bases solides pour la programmation orient\u00e9e objet, je vois souvent qu&rsquo;il peut \u00eatre d\u00e9routant de les comparer aux interfaces et de savoir quand les utiliser.<\/p>\n<h2>Classes abstraites et interfaces<\/h2>\n<p>Alors dans cet article, je vais partager :<\/p>\n<ul>\n<li>un rappel rapide sur ce que sont les interfaces,<\/li>\n<li>quelles sont les classes abstraites,<\/li>\n<li>et ensuite comment savoir quand utiliser l&rsquo;un plut\u00f4t que l&rsquo;autre.<\/li>\n<\/ul>\n<p>Cet article ne devrait pas \u00eatre un article intensif en codage, mais il devrait vous aider \u00e0 savoir quand \u00e9crire du code d&rsquo;un certain type pour vous aider \u00e0 mieux organiser vos projets.<\/p>\n<h3>1 interfaces<\/h3>\n<p>Rappelons que lorsqu&rsquo;il s&rsquo;agit d&rsquo;interfaces, nous utilisons \u00e9galement le terme &quot;programmation vers une interface&quot;, l&rsquo;id\u00e9e \u00e9tant que l&rsquo;interface d\u00e9finit les m\u00e9thodes qu&rsquo;une classe doit impl\u00e9menter pour remplir le &quot;contrat&quot; \u200b\u200bavec ladite interface.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ff0bd4e2b7ceaebc957342dd41b7709e#file-02-cacheinterface-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Le code<\/a> utilis\u00e9 pour d\u00e9montrer une interface de base \u00e9tait\u00a0:<\/p>\n<pre><code>&lt;?php\n\ninterface iCache \n{\n  public function set($key, $value);\n  public function get($key);\n  public function has($key);\n}\n<\/code><\/pre>\n<p>Mais rappelez-vous, le but de l&rsquo;interface n&rsquo;est pas de d\u00e9finir apr\u00e8s que le code a \u00e9t\u00e9 \u00e9crit. Au lieu de cela, c&rsquo;est un outil utilis\u00e9 pour concevoir ce que les classes doivent impl\u00e9menter si elles suivent un certain paradigme ou si elles n\u00e9cessitent un certain ensemble de fonctions.<\/p>\n<p>Autrement dit, si vous allez concevoir un ensemble de classes qui fonctionnent avec la mise en cache, vous n&rsquo;\u00e9crivez pas les classes en premier. Vous \u00e9crivez d&rsquo;abord l&rsquo;interface, puis les classes impl\u00e9mentent ladite interface.<\/p>\n<p>L&rsquo;id\u00e9e est que toute classe impl\u00e9mentant l&rsquo;interface sera garantie d&rsquo;avoir ces fonctions.<\/p>\n<h3>2 cours abstraits<\/h3>\n<p>Les classes abstraites, en revanche, nous permettent de faire <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5b2936875807f041e98a87f8a5627e8b#file-00-taxonomy-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">deux choses\u00a0:<\/a><\/strong><\/p>\n<ol>\n<li>impl\u00e9menter des fonctionnalit\u00e9s utilisables par les sous-classes,<\/li>\n<li>impl\u00e9menter les signatures de m\u00e9thode que les sous-classes doivent impl\u00e9menter.<\/li>\n<\/ol>\n<p>Cela peut sembler un peu incongru au d\u00e9but, mais consid\u00e9rez ceci :<\/p>\n<p>Lorsque vous avez une classe d&rsquo;un certain type qui aura une fonctionnalit\u00e9 coh\u00e9rente quelle que soit la sous-classe, la fonctionnalit\u00e9 va dans la classe abstraite. Lorsque d&rsquo;autres m\u00e9thodes doivent avoir leur impl\u00e9mentation d&rsquo;une m\u00e9thode, il vous suffit de fournir la signature de la m\u00e9thode et de la marquer comme <strong>abstract<\/strong>.<\/p>\n<p>Voici un exemple tir\u00e9 d&rsquo;un <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/classes-abstraites-partie-1-comportement-dabstraction\/\" title=\"post pr\u00e9c\u00e9dent :\">post pr\u00e9c\u00e9dent :<\/a><\/strong><\/p>\n<p>Maintenant, cela nous ram\u00e8ne tous aux exemples pr\u00e9c\u00e9dents et aux choses pr\u00e9c\u00e9dentes sur lesquelles nous devons nous concentrer concernant les interfaces et les classes abstraites, mais pour certains, cela n&rsquo;apporte toujours pas beaucoup de clart\u00e9.<\/p>\n<p>Plus pr\u00e9cis\u00e9ment, cela ne r\u00e9pond toujours pas \u00e0 la question\u00a0: comment d\u00e9cidons-nous quand utiliser une classe abstraite et quand utiliser une interface\u00a0?<\/p>\n<p>\u00c0 premi\u00e8re vue, cela peut sembler un peu d\u00e9routant, mais il y a quelques \u00e9l\u00e9ments que vous pouvez utiliser pour vous aider \u00e0 prendre une d\u00e9cision.<\/p>\n<h2>Quand utilisons-nous chacun\u00a0?<\/h2>\n<p>Rappelez-vous qu&rsquo;en mati\u00e8re de programmation orient\u00e9e objet, nous pouvons la d\u00e9composer en trois mani\u00e8res distinctes\u00a0:<\/p>\n<ul>\n<li>Les classes repr\u00e9sentent une chose. Vous pouvez les consid\u00e9rer comme un nom.<\/li>\n<li>Les attributs ou les propri\u00e9t\u00e9s sont comme des adjectifs. Ils d\u00e9crivent l&rsquo;objet ou quelque chose que l&rsquo;objet peut contenir.<\/li>\n<li>Les m\u00e9thodes ou les fonctions sont comme des verbes. Ils d\u00e9crivent ce qu&rsquo;ils peuvent faire.<\/li>\n<\/ul>\n<p>Maintenant, quand il s&rsquo;agit d&rsquo;une interface, pensez \u00e0 ce que fait l&rsquo;interface: elle d\u00e9crit, sans impl\u00e9mentation, ce qu&rsquo;un objet peut faire. Et quand il s&rsquo;agit d&rsquo;une classe abstraite, elle d\u00e9crit ce qu&rsquo;est un objet pendant l&rsquo;ex\u00e9cution.<\/p>\n<p>En d&rsquo;autres termes, une bonne r\u00e8gle empirique est que si vous devez fournir un ensemble de comportements pour un objet, une interface est une solution. Si vous avez besoin de d\u00e9crire ce qu&rsquo;est un objet, utilisez une classe abstraite.<\/p>\n<p>Pour les classes abstraites, j&rsquo;irais \u00e9galement un peu plus loin et dirais que cela aide \u00e0 d\u00e9crire un niveau de base de donn\u00e9es qui d\u00e9crit un objet ou ce qu&rsquo;il pourrait stocker en plus d&rsquo;un niveau de base de fonctionnalit\u00e9.<\/p>\n<h3>Vous avez un exemple\u00a0?<\/h3>\n<p>Comme pour la plupart du contenu de chacun de ces articles, j&rsquo;essaie de donner des exemples m\u00eame si ce n&rsquo;est pas sp\u00e9cifiquement fait dans le code. Peut-\u00eatre que cela aidera \u00e0 l&rsquo;expliquer encore plus:<\/p>\n<ul>\n<li><strong>Les interfaces n&rsquo;ont pas d&rsquo;impl\u00e9mentation.<\/strong> Ils ne garantissent que ce que fera une classe.<\/li>\n<li><strong>Les classes abstraites doivent avoir un niveau d&rsquo;impl\u00e9mentation de base<\/strong>. Cela devrait repr\u00e9senter ce qu&rsquo;une classe peut contenir et faire mais n&rsquo;est pas complet. Ils n\u00e9cessitent un peu plus d&rsquo;impl\u00e9mentation de la sous-classe.<\/li>\n<\/ul>\n<p>Lorsque vous travaillez avec du code orient\u00e9 objet, j&rsquo;esp\u00e8re que cela vous aidera \u00e0 fournir des indications sur le moment d&rsquo;utiliser quoi. Sinon, n&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire (ce que les membres ont la permission de faire :).<\/p>\n<p>De plus, nous verrons cela dans la pratique lorsque nous arriverons \u00e0 \u00e9crire du code orient\u00e9 objet (notamment pour WordPress, mais pas toujours).<\/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>Comprendre la diff\u00e9rence entre les classes abstraites et les interfaces est important lors de l&rsquo;\u00e9criture de code orient\u00e9 objet.<\/p>\n","protected":false},"author":1,"featured_media":164774,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,841],"tags":[1167],"class_list":["post-230136","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230136","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=230136"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230136\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/164774"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}