{"id":664,"date":"2020-01-09T12:19:54","date_gmt":"2020-01-09T15:19:54","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=664"},"modified":"2020-01-09T12:19:56","modified_gmt":"2020-01-09T15:19:56","slug":"padroes-de-implementacao-2","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/padroes-de-implementacao-2\/","title":{"rendered":"Padr\u00f5es de Implementa\u00e7\u00e3o #2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>L\u00f3gica e Dados em Harmonia<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Outro princ\u00edpio corol\u00e1rio ao\ndas consequ\u00eancias locais \u00e9 manter em harmonia l\u00f3gica e dados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Devem-se colocar a l\u00f3gica e os\ndados sobre os quais ela opera pr\u00f3ximos um do outro, se poss\u00edvel no mesmo\nm\u00e9todo, ou no mesmo objeto, ou ao menos no mesmo pacote.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para fazer uma mudan\u00e7a, \u00e9 prov\u00e1vel\nque se tenha de alterar a l\u00f3gica e os dados ao mesmo tempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se eles est\u00e3o em harmonia, as\nconsequ\u00eancias dessa mudan\u00e7a ser\u00e3o locais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No in\u00edcio, nem sempre \u00e9 \u00f3bvio\nonde devem ficar a l\u00f3gica e os dados para se satisfazer esse princ\u00edpio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pode-se estar escrevendo c\u00f3digo\nem A e perceber que s\u00e3o necess\u00e1rios dados que est\u00e3o em B.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00f3 depois de o c\u00f3digo estar\nfuncionando \u00e9 que se nota que ele est\u00e1 muito distante dos dados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Assim, \u00e9 preciso optar: mover\no c\u00f3digo para pr\u00f3ximo dos dados, mover os dados para pr\u00f3ximo do c\u00f3digo, coloc\u00e1-los\njuntos em um objeto auxiliar, ou entender que, naquele momento, n\u00e3o poss\u00edvel pensar\nem como junt\u00e1-los de forma que se comuniquem eficazmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Simetria<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Simetria \u00e9 mais c\u00f3digo que teoria. Basicamente seria algo como:\nao inv\u00e9s de colocar o c\u00f3digo count++ entre os m\u00e9todos init() e output(),\ncoloque um novo m\u00e9todo que ter\u00e1 o conunt++ como conte\u00fado, esse novo m\u00e9todo deve\nter um nome que auxilie um f\u00e1cil entendimento do c\u00f3digo, processCount(), por\nexemplo. Ent\u00e3o teremos: init(); processCount(); output().<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Outro princ\u00edpio que se usa o\ntempo todo \u00e9 a simetria. Programas s\u00e3o cheios de simetria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um m\u00e9todo add() \u00e9 acompanhado\nde um m\u00e9todo remove(). Em um grupo de m\u00e9todos, todos t\u00eam os mesmos par\u00e2metros.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Todos os campos de um objeto\nt\u00eam o mesmo tempo de vida. Identificar e expressar claramente a simetria torna\no c\u00f3digo mais f\u00e1cil de ler.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se os leitores puderem\nentender uma metade da simetria, eles poder\u00e3o entender rapidamente a outra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Costuma-se discutir simetria\nem termos espaciais: bilateral, rotacional e assim por diante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simetria em programas raramente\n\u00e9 gr\u00e1fica, ela \u00e9 conceitual. No c\u00f3digo, ela est\u00e1 onde a mesma ideia \u00e9 expressada\nda mesma forma em todos os lugares em que aparece no c\u00f3digo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eis um exemplo de c\u00f3digo em\nque falta simetria:<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"wp-block-paragraph\">void process(){<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A segunda declara\u00e7\u00e3o \u00e9 mais\nconcreta que as duas mensagens. Eu reescreveria isso com base na simetria,\nresultando em:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">void process(){<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; incrementCount();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas esse m\u00e9todo ainda viola a\nsimetria. As opera\u00e7\u00f5es input() e output() s\u00e3o nomeadas de acordo com as inten\u00e7\u00f5es,\ne incrementCount(), de acordo com uma implementa\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Buscando simetrias, penso no\nmotivo para se incrementar o contador, talvez resultando em:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">void process(){<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tally();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muitas vezes, encontrar e\nexpressar simetrias \u00e9 um passo preliminar para se remover uma duplica\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se uma ideia est\u00e1 presente em diversos pontos do c\u00f3digo, torn\u00e1-la sim\u00e9trica em todos \u00e9 um bom primeiro passo visando unific\u00e1-las.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fonte:  <strong>Implementation Patterns (Addison-Wesley Signature Series (Beck)) (English Edition)<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fonte:  <a href=\"https:\/\/www.thiengo.com.br\/padroes-de-implementacao-um-catalogo-de-padroes-indispensavel-para-o-dia-a-dia-do-programador\">https:\/\/www.thiengo.com.br\/padroes-de-implementacao-um-catalogo-de-padroes-indispensavel-para-o-dia-a-dia-do-programador<\/a> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u00f3gica e Dados em Harmonia Outro princ\u00edpio corol\u00e1rio ao das consequ\u00eancias locais \u00e9 manter em harmonia l\u00f3gica e dados. Devem-se colocar a l\u00f3gica e os dados sobre os quais ela opera pr\u00f3ximos um do outro, se poss\u00edvel no mesmo m\u00e9todo, ou no mesmo objeto, ou ao menos no mesmo pacote. Para fazer uma mudan\u00e7a, \u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":354,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-664","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-designpatterns"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=664"}],"version-history":[{"count":1,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/664\/revisions"}],"predecessor-version":[{"id":665,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/664\/revisions\/665"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/354"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}