{"id":230053,"date":"2022-11-17T19:14:00","date_gmt":"2022-11-17T16:14:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230053"},"modified":"2022-11-09T19:53:29","modified_gmt":"2022-11-09T16:53:29","slug":"programacao-orientada-a-objetos-no-wordpress-analise-parte-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/programacao-orientada-a-objetos-no-wordpress-analise-parte-1\/","title":{"rendered":"Programa\u00e7\u00e3o Orientada a Objetos no WordPress: An\u00e1lise, Parte 1"},"content":{"rendered":"\n<p>Quando comecei a oferecer <a href=\"https:\/\/tommcfarlin.com\/membership-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">associa\u00e7\u00f5es<\/a> neste site, sabia que a primeira coisa que queria abordar era uma introdu\u00e7\u00e3o \u00e0 programa\u00e7\u00e3o orientada a objetos.<\/p>\n<p>\u00c9 algo que parece ser interessante para a maioria das pessoas que trabalham no WordPress, mas h\u00e1 um problema que afasta muita gente ou gera resultados ruins:<\/p>\n<p>A programa\u00e7\u00e3o orientada a objetos pode ficar complicada rapidamente. E isso se torna desmotivador.<\/p>\n<p>Aqui est\u00e1 o que quero dizer: Digamos que voc\u00ea seja um desenvolvedor WordPress que come\u00e7a a pesquisar programa\u00e7\u00e3o orientada a objetos. Ele come\u00e7a falando sobre classes, construtores e fun\u00e7\u00f5es, e tudo parece bem.<\/p>\n<p>Mas ent\u00e3o ele rapidamente entra em:<\/p>\n<ul>\n<li>m\u00e9todos privados e protegidos,<\/li>\n<li>heran\u00e7a,<\/li>\n<li>polimorfismo,<\/li>\n<li>Padr\u00f5es de design,<\/li>\n<li>Inje\u00e7\u00e3o de depend\u00eancia,<\/li>\n<li>reposit\u00f3rios,<\/li>\n<li>e assim por diante.<\/li>\n<\/ul>\n<p>\u00c9 uma bola de neve, n\u00e3o \u00e9? E n\u00e3o \u00e9 assim que tem que ser, mas \u00e9 dif\u00edcil encontrar uma introdu\u00e7\u00e3o adequada, exceto por <a href=\"https:\/\/carlalexander.ca\/discover-object-oriented-programming\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">alguns recursos<\/a> que est\u00e3o por a\u00ed.<\/p>\n<p>Com tudo isso dito (e servindo de pano de fundo para onde estou indo), eu queria criar uma s\u00e9rie de conte\u00fados para quem:<\/p>\n<ul>\n<li>est\u00e3o genuinamente interessados \u200b\u200bem programa\u00e7\u00e3o orientada a objetos,<\/li>\n<li>n\u00e3o sabe por onde come\u00e7ar,<\/li>\n<li>querem desenvolver suas habilidades,<\/li>\n<li>quer come\u00e7ar do zero sem escalar para um material mais complicado muito rapidamente.<\/li>\n<\/ul>\n<p>E \u00e9 isso que estou come\u00e7ando hoje e no primeiro grande s\u00e9rio planejado para <a href=\"https:\/\/tommcfarlin.com\/register\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">os membros<\/a>. Com tudo isso dito, vamos come\u00e7ar.<\/p>\n<p>Especificamente, vamos come\u00e7ar a falar sobre programa\u00e7\u00e3o orientada a objetos, an\u00e1lise, design e por que ela deveria come\u00e7ar por a\u00ed.<\/p>\n<h2>Programa\u00e7\u00e3o Orientada a Objetos: An\u00e1lise<\/h2>\n<p>Quando se trata de escrever c\u00f3digo, existem atualmente tr\u00eas maneiras populares de faz\u00ea-lo:<\/p>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Functional_programming\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">funcional<\/a> ,<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Procedural_programming\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">processual<\/a> ,<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Object-oriented_programming\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">orientado a objetos<\/a>.<\/li>\n<\/ul>\n<p>Sempre que estivermos trabalhando e lendo o c\u00f3digo do WordPress, voc\u00ea estar\u00e1 lendo uma combina\u00e7\u00e3o de c\u00f3digo procedural e c\u00f3digo orientado a objetos.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165350-61e77e125a74e.png\" 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-165350-61e77e125a74e.png\" alt=\"Programa\u00e7\u00e3o Orientada a Objetos no WordPress: An\u00e1lise, Parte 1\" ><\/a><\/p>\n<p>Existem algumas raz\u00f5es pelas quais este \u00e9 o caso, mas est\u00e1 fora do escopo de nossa discuss\u00e3o.<\/p>\n<p>Isso ocorre porque o WordPress \u00e9 constru\u00eddo com ambos e porque certos aspectos do desenvolvimento do WordPress podem ser escritos com c\u00f3digo procedural, como plugins e temas, e outros requerem desenvolvimento orientado a objetos, como <a href=\"https:\/\/codex.wordpress.org\/Widgets_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">widgets<\/a>.<\/p>\n<h3>An\u00e1lise e Design<\/h3>\n<p>Muitas vezes, a primeira coisa que queremos fazer, como desenvolvedores (iniciantes ou n\u00e3o), \u00e9 come\u00e7ar imediatamente a escrever c\u00f3digo. Eu tamb\u00e9m recebo. \u00c9 divertido. Temos uma ideia, queremos dar vida a ela, queremos come\u00e7ar a us\u00e1-la e queremos mostr\u00e1-la a outras pessoas.<\/p>\n<p>Aqui est\u00e1 o problema de fazer isso: muitas vezes pulamos direto para escrever c\u00f3digo para tentar fazer o projeto fazer o que queremos que ele fa\u00e7a.<\/p>\n<p>Se este \u00e9 um projeto simples (e quero dizer muito simples), ent\u00e3o n\u00e3o \u00e9 um grande problema. Honestamente, eu fiz isso (e o <a href=\"https:\/\/github.com\/tommcfarlin\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GitHub<\/a> \u00e9 a prova disso). Mas quando se trata do trabalho que fazemos na <a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pressware<\/a> ; \u00e9 uma hist\u00f3ria diferente.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165350-61e77e173b695.png\" 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-165350-61e77e173b695.png\" alt=\"Programa\u00e7\u00e3o Orientada a Objetos no WordPress: An\u00e1lise, Parte 1\" ><\/a><\/p>\n<p>Quando se trata de projetos como esse, queremos fazer um pouco de An\u00e1lise e Design antes de escrever o c\u00f3digo.<\/p>\n<p>O que levanta a quest\u00e3o, o que \u00e9 an\u00e1lise e design orientados a objetos?<\/p>\n<h4>An\u00e1lise<\/h4>\n<p>Resumindo, pense assim:<\/p>\n<p>A an\u00e1lise \u00e9 o processo de pegar a ideia que o cliente ou que voc\u00ea tem e escavar o que realmente precisa ser constru\u00eddo.<\/p>\n<p>Isso pode ajud\u00e1-lo a determinar qual \u00e9 a vantagem do aplicativo e o que n\u00e3o \u00e9 necess\u00e1rio para a primeira vers\u00e3o do aplicativo. Eu gosto de rotul\u00e1-los como os &#8220;must-haves&quot; e quais s\u00e3o os &#8220;nice-to-haves&#8221;.<\/p>\n<p>Uma boa regra de ouro \u00e9 esta:<\/p>\n<ul>\n<li><strong>must-haves<\/strong> s\u00e3o as coisas que s\u00e3o essenciais para o aplicativo e devem ir para a primeira itera\u00e7\u00e3o do projeto,<\/li>\n<li><strong>nice-to-haves<\/strong> s\u00e3o as coisas que podemos eventualmente construir nele<\/li>\n<\/ul>\n<p>Em \u00faltima an\u00e1lise, isso nos ajuda a trabalhar em dire\u00e7\u00e3o a uma primeira vers\u00e3o forte para o cliente. Talvez um exemplo seja para o WordPress:<\/p>\n<ul>\n<li>A primeira vers\u00e3o do WordPress precisava ter uma API de plugin ou s\u00f3 precisava ter a capacidade de as pessoas escreverem posts e public\u00e1-los na web?<\/li>\n<\/ul>\n<p>Se voc\u00ea estiver criando uma plataforma para blogs, ela precisa ser extens\u00edvel desde a primeira vers\u00e3o? Isso nada mais \u00e9 do que um exemplo, mas voc\u00ea entendeu.<\/p>\n<h4>O que torna a an\u00e1lise t\u00e3o dif\u00edcil?<\/h4>\n<p>Eu acho que muitas vezes tem a ver com personas.<\/p>\n<p>Por exemplo, n\u00f3s, como programadores, pensamos que um projeto deve sempre fazer o que o cliente deseja. A verdade \u00e9 que nem sempre \u00e9 assim.<\/p>\n<p>Quer dizer, eventualmente, pode ser, mas a primeira vers\u00e3o do projeto n\u00e3o precisa necessariamente ser assim.<\/p>\n<p>Al\u00e9m disso, um dos princ\u00edpios da programa\u00e7\u00e3o orientada a objetos \u00e9 que n\u00e3o escrevemos muito c\u00f3digo duplicado. Mas isso pode ser muito dif\u00edcil de fazer se a an\u00e1lise apropriada n\u00e3o for feita.<\/p>\n<p>Finalmente, aqueles que s\u00e3o mais experientes dir\u00e3o que um bom software usar\u00e1 princ\u00edpios testados e comprovados \u2013 sejam padr\u00f5es de projeto ou n\u00e3o \u2013 mas que podem ser corrigidos facilmente ao longo do tempo. Isso, de certa forma, cresce organicamente.<\/p>\n<h2>Ent\u00e3o, o que devemos fazer?<\/h2>\n<p>No pr\u00f3ximo artigo, falarei sobre tr\u00eas coisas que podemos fazer, como desenvolvedores, para garantir que o software que estamos construindo para n\u00f3s mesmos ou para outros nos leve na dire\u00e7\u00e3o certa.<\/p>\n<p>N\u00e3o direi que \u00e9 uma bala de prata porque n\u00e3o acredito que exista, mas direi que \u00e9 uma abordagem bastante forte que encontrei outros para usar e bem como eu e que leva a uma dire\u00e7\u00e3o muito boa em termos de an\u00e1lise orientada a objetos.<\/p>\n<p>Isso acabar\u00e1 nos levando ao design. Mas ainda n\u00e3o estamos l\u00e1.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programa\u00e7\u00e3o Orientada a Objetos no WordPress, muito menos em qualquer plataforma, pode ser uma tarefa assustadora. Mas eu quero come\u00e7ar do zero e seguir em frente a partir da\u00ed.<\/p>\n","protected":false},"author":1,"featured_media":165351,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,837,846],"tags":[1170],"class_list":["post-230053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=230053"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230053\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/165351"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}