{"id":230156,"date":"2022-11-20T17:35:00","date_gmt":"2022-11-20T14:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230156"},"modified":"2022-11-20T17:36:13","modified_gmt":"2022-11-20T14:36:13","slug":"os-dois-primeiros-pilares-da-poo","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/os-dois-primeiros-pilares-da-poo\/","title":{"rendered":"Os dois primeiros pilares da POO"},"content":{"rendered":"\n<p>Quando se trata de falar sobre programa\u00e7\u00e3o orientada a objetos (ou POO), voc\u00ea provavelmente ouvir\u00e1 sobre Os Tr\u00eas Pilares da Programa\u00e7\u00e3o Orientada a Objetos ou Os Quatro Pilares da Programa\u00e7\u00e3o Orientada a Objetos.<\/p>\n<p>Dependendo do seu hist\u00f3rico, voc\u00ea pode j\u00e1 ter ouvido falar deles, saber o que s\u00e3o e realmente n\u00e3o precisa mergulhar muito nisso. Mas se voc\u00ea n\u00e3o tiver, acredito que entend\u00ea-los \u00e9 fundamental para a programa\u00e7\u00e3o orientada a objetos.<\/p>\n<p>Cobrimos toda a fase de <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">An\u00e1lise<\/a><\/strong> da Programa\u00e7\u00e3o Orientada a Objetos:<\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/programacao-orientada-a-objetos-no-wordpress-analise-parte-1\/\" title=\"An\u00e1lise, Parte 1\">An\u00e1lise, Parte 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/programacao-orientada-a-objetos-no-wordpress-analise-parte-2\/\" title=\"An\u00e1lise, Parte 2\">An\u00e1lise, Parte 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/programacao-orientada-a-objetos-no-wordpress-entendendo-as-expectativas-do-cliente\/\" title=\"Entendendo as expectativas do cliente\">Entendendo as expectativas do cliente<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/programacao-orientada-a-objetos-no-wordpress-declaracao-de-trabalho\/\" title=\"Declara\u00e7\u00e3o de Trabalho\">Declara\u00e7\u00e3o de Trabalho<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/programacao-orientada-a-objetos-no-wordpress-termos-e-condicoes\/\" title=\"Termos e Condi\u00e7\u00f5es\">Termos e Condi\u00e7\u00f5es<\/a><\/li>\n<\/ol>\n<p>Com isso dito, vamos entrar nas discuss\u00f5es de design e implementa\u00e7\u00e3o. Afinal, \u00e9 para isso que muitas pessoas querem pular de qualquer maneira, n\u00e3o \u00e9?<\/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=\"Os dois primeiros pilares da POO\"><\/a><\/p>\n<p>Antes de escrever qualquer c\u00f3digo, gostaria de fazer dois posts sobre os quatro pontos da programa\u00e7\u00e3o orientada a objetos (porque sou um daqueles que concorda com a ideia de que s\u00e3o quatro).<\/p>\n<h2>Dois Pilares da POO<\/h2>\n<p>Novamente, entend\u00ea-los \u00e9 a chave para entender os fundamentos da programa\u00e7\u00e3o orientada a objetos. Sem eles, ser\u00e1 dif\u00edcil navegar pelo resto do que ser\u00e1 discutido em posts futuros.<\/p>\n<p>Com isso, vamos falar sobre cada um deles. Vamos cobrir os dois primeiros neste post e os dois \u00faltimos no pr\u00f3ximo post.<\/p>\n<h3>1 Abstra\u00e7\u00e3o<\/h3>\n<p>De um modo geral, esta \u00e9 a chave para escrever c\u00f3digo orientado a objetos. Com isso, quero dizer tudo o que est\u00e1 contido em uma classe. Abstra\u00edmos a ideia de algo em uma classe. Em muitos livros, veremos coisas como <strong>Animais<\/strong> ou <strong>Carros<\/strong> representados como classes.<\/p>\n<p>Isso funciona, em teoria, mas na pr\u00e1tica, n\u00e3o estamos programando animais nem estamos programando carros (embora eu ache que neste ponto da hist\u00f3ria, voc\u00ea poderia argumentar que estamos, mas eu discordo porque voc\u00ea sabe o que quero dizer).<\/p>\n<p>Em vez disso, vamos abstrair ideias em suas classes. E h\u00e1 uma ideia chave aqui:<\/p>\n<blockquote>\n<p>Uma classe deve representar um substantivo.<\/p>\n<\/blockquote>\n<p>Ou seja, voc\u00ea n\u00e3o deve ter uma classe que represente algo como &#8220;Running&quot;. Em vez disso, voc\u00ea pode ter algo que \u00e9 executado e, portanto,\u00a0 a <strong>execu\u00e7\u00e3o<\/strong> seria um m\u00e9todo. E esse \u00e9 o detalhamento geral de como a abstra\u00e7\u00e3o funciona:<\/p>\n<ol>\n<li>O que deve ser representado \u00e9 a classe,<\/li>\n<li>O que a coisa faz s\u00e3o seus m\u00e9todos,<\/li>\n<li>E a maneira como voc\u00ea descreve a coisa geralmente pode ser feita por meio de seus atributos ou propriedades.<\/li>\n<\/ol>\n<p>Isso n\u00e3o significa que n\u00e3o tenhamos fun\u00e7\u00f5es ou m\u00e9todos que modifiquem suas propriedades, mas os tr\u00eas pontos acima s\u00e3o boas regras pr\u00e1ticas. Ent\u00e3o, quando voc\u00ea est\u00e1 criando uma classe, voc\u00ea pode perguntar coisas como:<\/p>\n<ul>\n<li>Estou escrevendo algo?<\/li>\n<li>Estou escrevendo algo para fazer?<\/li>\n<li>Ou estou escrevendo algo que descreve algo?<\/li>\n<\/ul>\n<p>Porque se voc\u00ea est\u00e1 escrevendo uma a\u00e7\u00e3o, provavelmente \u00e9 feito por algo (porque as coisas agem \u2013 elas fazem coisas). E se voc\u00ea est\u00e1 descrevendo algo, ent\u00e3o provavelmente se refere a algo (quando foi a \u00faltima vez que voc\u00ea descreveu nada?)<\/p>\n<p>Faz sentido?<\/p>\n<h3>2 Encapsulamento<\/h3>\n<p>Ent\u00e3o, se estamos escrevendo classes \u2013 boas classes \u2013 ent\u00e3o precisamos escrev\u00ea-las de tal forma que estejamos encapsulando adequadamente seus dados. E encapsulamento \u00e9 realmente apenas uma palavra &#8220;grande&#8221; que se refere \u00e0 ideia de gerenciar suas responsabilidades (ou acompanhar seus dados).<\/p>\n<p>Ent\u00e3o, por exemplo, se estiv\u00e9ssemos escrevendo uma classe para representar uma postagem do WordPress, ter\u00edamos uma classe chamada <strong>Post<\/strong> com propriedades como <strong>publish, update, delete,<\/strong> \u00a0<strong>postData, publishDate, lastUpdatedData<\/strong>, <strong>deleteDate<\/strong> e assim por diante.<\/p>\n<p>Ent\u00e3o ter\u00edamos fun\u00e7\u00f5es projetadas especificamente para agir em uma inst\u00e2ncia da\u00a0 classe <strong>Post<\/strong>.<\/p>\n<p>Caso em quest\u00e3o, podemos\u2026<\/p>\n<ul>\n<li>publicar,<\/li>\n<li>atualizar,<\/li>\n<li>ou excluir uma postagem<\/li>\n<\/ul>\n<p>Esses m\u00e9todos provavelmente ser\u00e3o expostos de forma que outras classes possam aproveit\u00e1-los. Al\u00e9m disso, esses m\u00e9todos provavelmente tamb\u00e9m aproveitar\u00e3o outras propriedades, como o <strong>publishDate<\/strong> ou o <strong>deleteDate<\/strong>.<\/p>\n<p>E \u00e9 a\u00ed que entra o conceito de visibilidade. Na programa\u00e7\u00e3o orientada a objetos, o encapsulamento n\u00e3o se refere apenas \u00e0 ideia das informa\u00e7\u00f5es que uma classe cont\u00e9m, mas como ela exp\u00f5e os dados.<\/p>\n<p>Isso \u00e9 feito de tr\u00eas maneiras, todas definidas abaixo:<\/p>\n<ol>\n<li><strong>propriedades e fun\u00e7\u00f5es p\u00fablicas<\/strong> est\u00e3o dispon\u00edveis para qualquer pessoa us\u00e1-las; no entanto,\u00a0 as propriedades <strong>p\u00fablicas\u00a0<\/strong> geralmente n\u00e3o s\u00e3o expostas. Em vez disso, garantimos que eles possam ser modificados por um\u00a0 m\u00e9todo <strong>p\u00fablico<\/strong>.<\/li>\n<li><strong>propriedades e fun\u00e7\u00f5es protegidas<\/strong> est\u00e3o dispon\u00edveis para serem usadas pela classe e qualquer outra classe que herde informa\u00e7\u00f5es dela. Isso ser\u00e1 discutido com mais detalhes no pr\u00f3ximo post.<\/li>\n<li><strong>propriedades e fun\u00e7\u00f5es privadas<\/strong> s\u00e3o aquelas destinadas exclusivamente a serem usadas no contexto de uma determinada classe. Essas podem ser propriedades usadas para rastrear status internos ou m\u00e9todos usados \u200b\u200bpara funcionar como fun\u00e7\u00f5es auxiliares para fun\u00e7\u00f5es p\u00fablicas para concluir seu trabalho.<\/li>\n<\/ol>\n<p>\u00c0 medida que continuarmos nesta s\u00e9rie, veremos o papel que cada um deles desempenha ao escrever classes claras, f\u00e1ceis de seguir e bem arquitetadas.<\/p>\n<p>Por enquanto, por\u00e9m, \u00e9 importante entender que essas palavras, <strong>public, protected<\/strong> e <strong>private<\/strong>, s\u00e3o chamadas de modificadores de visibilidade porque, como voc\u00ea pode verificar, gerenciam a visibilidade de um m\u00e9todo ou propriedade em rela\u00e7\u00e3o \u00e0 sua classe e ao classes que herdam dele e que interagem com ele.<\/p>\n<p>Falando em heran\u00e7a, falarei sobre isso na pr\u00f3xima parte desta s\u00e9rie.<\/p>\n<h2>Abstra\u00e7\u00e3o, Encapsulamento e WordPress<\/h2>\n<h4>As m\u00e1s not\u00edcias: aulas no WordPress<\/h4>\n<p>Aqui est\u00e1 a coisa: no WordPress, muitas vezes vemos classes muito, muito grandes. Isso n\u00e3o \u00e9 uma coisa boa. Na verdade, esses s\u00e3o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">antipadr\u00f5es<\/a> chamados de classes de deus (a ideia \u00e9 que voc\u00ea tem uma \u00fanica classe que sabe tudo).<\/p>\n<p>E quando voc\u00ea tem uma classe de deus, parece conveniente porque voc\u00ea pode colocar todas as funcionalidades em um s\u00f3 lugar. Mas<\/p>\n<ul>\n<li>\u00e9 dif\u00edcil testar,<\/li>\n<li>n\u00e3o escala,<\/li>\n<li>ele n\u00e3o funciona bem com outra classe (muito menos classes ou bibliotecas de terceiros),<\/li>\n<li>n\u00e3o se adapta bem \u00e0 mudan\u00e7a.<\/li>\n<\/ul>\n<p>Em \u00faltima an\u00e1lise, quando voc\u00ea est\u00e1 fazendo isso, voc\u00ea n\u00e3o est\u00e1 fazendo programa\u00e7\u00e3o orientada a objetos. Voc\u00ea est\u00e1 pegando fun\u00e7\u00f5es e jogando-as em uma classe. E queremos fugir disso.<\/p>\n<h4>A boa not\u00edcia: aulas de reda\u00e7\u00e3o no WordPress<\/h4>\n<p>No entanto, isso levanta uma quest\u00e3o: por que tentar aprender programa\u00e7\u00e3o orientada a objetos com o WordPress se n\u00e3o for um exemplo s\u00f3lido de programa\u00e7\u00e3o orientada a objetos?<\/p>\n<p>Isso porque voc\u00ea ainda pode escrever um bom c\u00f3digo orientado a objetos no WordPress. Ele ainda pode interagir bem com o WordPress e ainda pode funcionar bem com muitos outros aspectos do WordPress.<\/p>\n<p>Eu sei que parece contra-intuitivo, mas \u00e0 medida que nos aprofundamos na escrita de c\u00f3digo orientado a objetos no WordPress, isso deve ficar claro.<\/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>Antes de escrever qualquer c\u00f3digo, gostaria de fazer dois posts sobre os quatro pilares da POO. Os dois primeiros s\u00e3o Abstra\u00e7\u00e3o e Encapsulamento.<\/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":[722,837,846],"tags":[1170],"class_list":["post-230156","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","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\/230156","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=230156"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230156\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/165087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}