{"id":261511,"date":"2023-06-08T11:14:00","date_gmt":"2023-06-08T08:14:00","guid":{"rendered":"https:\/\/inform.click\/modelos-de-design-para-iniciantes\/"},"modified":"2023-06-08T11:44:00","modified_gmt":"2023-06-08T08:44:00","slug":"modelos-de-design-para-iniciantes","status":"publish","type":"post","link":"https:\/\/inform.click\/pt-pt\/modelos-de-design-para-iniciantes\/","title":{"rendered":"Modelos de design para iniciantes"},"content":{"rendered":"<p>\n  Se voc\u00ea j\u00e1 escreveu programas para produtos ou aplicativos de software, grandes\/pequenos, \u00e9 mais prov\u00e1vel que voc\u00ea tenha usado muitos Design Patterns\u2026 embora seja poss\u00edvel que eles n\u00e3o sejam um dos padr\u00f5es de design mais usados\/padr\u00e3o.\n<\/p>\n<p>\n  Mas sim, h\u00e1 uma diferen\u00e7a \u00f3bvia entre implementar um padr\u00e3o de projeto e &#8220;usar&#8221; um padr\u00e3o de projeto\u2026 de qualquer forma, a pessoa que trabalha com padr\u00f5es de projeto entende ou entender\u00e1 facilmente.\n<\/p>\n<p>\n  A quest\u00e3o \u00e9 que os padr\u00f5es de projeto n\u00e3o s\u00e3o novidade para os programadores.\n<\/p>\n<p>\n  Neste artigo abaixo, estou tentando explicar os padr\u00f5es de projeto, em seus fundamentos, e estudaremos detalhes de v\u00e1rios padr\u00f5es, exemplos, etc. em outro artigo.\n<\/p>\n<p>\n  O que \u00e9 um padr\u00e3o de projeto?\n<\/p>\n<p>\n  <strong>Come\u00e7ar\u2026<\/strong>\n<\/p>\n<p>\n  Acho que a melhor maneira de come\u00e7ar a entender os padr\u00f5es de design \u00e9 entender os padr\u00f5es n\u00e3o t\u00e9cnicos que seguimos consciente \/ inconscientemente em nossas vidas cotidianas.\n<\/p>\n<p>\n  Por exemplo, vamos pegar muitos curr\u00edculos enviados para uma vaga de emprego. O curr\u00edculo de todos n\u00e3o parece o mesmo&#8230; embora todos tendam a fazer a mesma coisa, ou seja, dizer ao leitor no que eles s\u00e3o habilidosos ou como ele pode se adequar ao trabalho.\n<\/p>\n<p>\n  A maioria dos que enviam curr\u00edculos para empregos sabe que precisam enviar um curr\u00edculo com um determinado conjunto de informa\u00e7\u00f5es em um documento do Word formatado.\n<\/p>\n<p>\n  Isso&#8230; \u00e9 um padr\u00e3o, que todo mundo envia um curr\u00edculo com um determinado conjunto de informa\u00e7\u00f5es expressas nele.\n<\/p>\n<p>\n  Se voc\u00ea quiser&#8230; chame-o de Modelos em vez de Padr\u00f5es. Modelos de Projeto.\n<\/p>\n<p>\n  Existem muitas dessas coisas na vida real que s\u00e3o padr\u00f5es. Algumas pessoas gostam dos exemplos abaixo:\n<\/p>\n<p>\n  Todos os chefs do mundo cozinham pizza ou batatas fritas da mesma maneira. Embora eles possam cobri-lo \/ sabore\u00e1-lo de maneira diferente. Isso \u00e9 um padr\u00e3o.\n<\/p>\n<p>\n  O design de cada carro segue um padr\u00e3o de design b\u00e1sico, quatro rodas, volante, o sistema central de acionamento como acelerador-quebra-embreagem, etc.\n<\/p>\n<p>\n  Todas as coisas constru\u00eddas \/ produzidas repetidamente, inevitavelmente seguir\u00e3o um padr\u00e3o em seu design\u2026 sejam carros, pizzas, caixas eletr\u00f4nicos, o que quer que seja\u2026 at\u00e9 escova de dentes.\n<\/p>\n<p>\n  Projetos que quase se tornaram uma maneira padr\u00e3o de codificar alguma l\u00f3gica\/mecanismo\/t\u00e9cnica em software, portanto, s\u00e3o conhecidos como \u2013 e, portanto \u2013 estudados como Padr\u00f5es de Projeto de Software.\n<\/p>\n<h3>\n  Por que um padr\u00e3o de projeto \u00e9 importante?<br \/>\n<\/h3>\n<p>\n  Basicamente por dois motivos:\n<\/p>\n<ol>\n<li>\n    <strong>Para seguir um padr\u00e3o<\/strong>\n  <\/li>\n<li>\n    <strong>Para acelerar o desenvolvimento<\/strong>\n  <\/li>\n<\/ol>\n<p>\n  Vou explicar em detalhes.\n<\/p>\n<p>\n  Em primeiro lugar, vemos por que \u00e9 interessante aderir a um padr\u00e3o padr\u00e3o.\n<\/p>\n<p>\n  Vamos pegar a lista de exemplos de curr\u00edculos que discutimos antes.\n<\/p>\n<p>\n  Pode haver um ou dois candidatos que enviam seus pedidos de emprego por e-mail sem formata\u00e7\u00e3o adequada, sem anexos ao e-mail etc., esses um ou dois candidatos n\u00e3o est\u00e3o seguindo o padr\u00e3o e provavelmente N\u00c3O acabar\u00e3o com o trabalho\u2026. porque? Porque eles est\u00e3o se desviando de um padr\u00e3o bem estabelecido, que pode n\u00e3o ser apreciado pelas pessoas que selecionam curr\u00edculos para o trabalho.\n<\/p>\n<h5>\n  N\u00e3o h\u00e1 ningu\u00e9m que se desvie do padr\u00e3o e se torne &#8220;legal&#8221;? Isso n\u00e3o \u00e9 Inova\u00e7\u00e3o?<br \/>\n<\/h5>\n<p>\n  Sim, h\u00e1 momentos em que um curr\u00edculo apresentado de forma muito diferente consegue a vaga por ser diferente dos demais. Normalmente, ou\u00e7o falar de web designers que conseguiram empregos importantes porque compilaram e apresentaram um filme em CD de seu trabalho, ou criaram um personagem de anima\u00e7\u00e3o explicando seu trabalho, colocaram em seu blog e coisas assim.\n<\/p>\n<p>\n  Mas.. isso \u00e9 experimenta\u00e7\u00e3o (A inova\u00e7\u00e3o vem de experimentos bem-sucedidos).\n<\/p>\n<p>\n  Na maioria das vezes, no desenvolvimento de software, voc\u00ea n\u00e3o pode se dar ao luxo de experimentar, devido \u00e0 press\u00e3o do cronograma, expectativas, etc., mas sim, \u00e0s vezes, alguns projetos interessantes permitem alguma experimenta\u00e7\u00e3o.\n<\/p>\n<p>\n  Em software, n\u00e3o podemos fazer coisas b\u00e1sicas como um Dep\u00f3sito Banc\u00e1rio&#8230; de 101 maneiras&#8230; haver\u00e1 apenas algumas maneiras de processar um Dep\u00f3sito Banc\u00e1rio&#8230; portanto, faz sentido seguir um Padr\u00e3o estabelecido e testado.\n<\/p>\n<p>\n  Al\u00e9m disso, a maioria dos padr\u00f5es de design tem varia\u00e7\u00f5es&#8230; algumas das varia\u00e7\u00f5es s\u00e3o t\u00e3o populares que as varia\u00e7\u00f5es tamb\u00e9m ser\u00e3o um novo tipo padr\u00e3o do padr\u00e3o.\n<\/p>\n<p>\n  Atualmente, espera-se que os projetos de software (pelo menos implicitamente) sigam um design j\u00e1 estabelecido de um produto \/ software similar no mercado.\n<\/p>\n<p>\n  \u00c9 aqui que aderir a um estilo padr\u00e3o de codifica\u00e7\u00e3o ou padr\u00e3o de design ajuda o desenvolvimento de software&#8230; desenvolvimento de fixa\u00e7\u00e3o, removendo a sobrecarga de se preocupar com uma nova implementa\u00e7\u00e3o n\u00e3o testada, etc.,\n<\/p>\n<h5>\n  Tempo de desenvolvimento de fixa\u00e7\u00e3o<br \/>\n<\/h5>\n<p>\n  Seguir um padr\u00e3o de design padr\u00e3o tamb\u00e9m tem a vantagem de se comunicar facilmente atrav\u00e9s da \u00e1rvore\/hierarquia de arquitetos de software, l\u00edderes de m\u00f3dulo, l\u00edderes de equipe, desenvolvedores etc., sobre &#8220;como&#8221; algo precisa ser desenvolvido, e n\u00e3o apenas &#8220;o que&#8221; deve ser desenvolvido.\n<\/p>\n<p>\n  \u00c0s vezes, at\u00e9 ajuda as equipes de teste, porque os testadores sabem por experi\u00eancia que o c\u00f3digo que segue um determinado padr\u00e3o de design provavelmente pode ser testado de uma maneira espec\u00edfica com um conjunto de ferramentas de teste em um determinado per\u00edodo de tempo, e esses designs conhecidos podem n\u00e3o ter algumas falhas ou ter algumas falhas &#8216;conhecidas'.\n<\/p>\n<h5>\n  O uso de Design Patterns n\u00e3o tira um toque pessoal?<br \/>\n<\/h5>\n<p>\n  N\u00e3o. Em primeiro lugar, porque n\u00e3o estamos dizendo que voc\u00ea segue um padr\u00e3o de design e nada mais acontece. A maioria das implementa\u00e7\u00f5es de projeto compartilha apenas requisitos b\u00e1sicos com outros projetos e provavelmente ter\u00e1 desvios. Construir esses desvios exigir\u00e1 flexibilizar e estender os padr\u00f5es padr\u00e3o usados \u200b\u200bem uma implementa\u00e7\u00e3o.\n<\/p>\n<p>\n  \u00c9 como fazer a pizza da maneira padr\u00e3o, depois aromatiz\u00e1-la \/ apresent\u00e1-la a diferentes requisitos, como uma pizza inteira, uma torta cortada ou qualquer outra coisa.\n<\/p>\n<p>\n  Ao entender a import\u00e2ncia dos padr\u00f5es de projeto, uma coisa \u00e9 <strong>muito importante.importante<\/strong> :\n<\/p>\n<p>\n  Design Patterns n\u00e3o s\u00e3o qualquer tecnologia ou estrutura que uma determinada empresa ou linguagem de programa\u00e7\u00e3o nos imp\u00f5e. Isso significa que \u00e9 como um conceito aberto.\n<\/p>\n<p>\n  Todos os padr\u00f5es de design padr\u00e3o ou populares, na verdade, s\u00e3o amplamente extens\u00edveis.\n<\/p>\n<p>\n  Ou como voc\u00ea acha que um padr\u00e3o de design padr\u00e3o se encaixaria em um projeto em Nova Jersey para uma empresa e tamb\u00e9m em Bangalore para uma empresa diferente e um tipo diferente de projeto.\n<\/p>\n<p>\n  Isso nos leva a &#8221; <strong>A maioria dos padr\u00f5es de projeto s\u00e3o gen\u00e9ricos<\/strong> &#8220;\u2026 o que significa que eles nem sempre s\u00e3o usados \u200b\u200bpara construir o mesmo tipo de software. Voc\u00ea pode n\u00e3o ouvir coisas como &#8220;padr\u00e3o de design de software banc\u00e1rio&#8221; ou &#8220;padr\u00e3o de design de software de rede social&#8221; usado em discuss\u00f5es comuns\u2026 mas apenas &#8220;Padr\u00f5es de design&#8221;.\n<\/p>\n<h3>\n  Quem deve se preocupar com os padr\u00f5es de projeto?<br \/>\n<\/h3>\n<ol>\n<li>Assim como um bom arquiteto de edif\u00edcios desenvolve suas habilidades de projetar edif\u00edcios, estudando a arquitetura e o design de v\u00e1rios edif\u00edcios e formas ao longo de sua vida, um arquiteto de software deve estudar e visualizar como diferentes sistemas de software \/ tecnologia em todo o mundo s\u00e3o projetados ou arquitetado.\n  <\/li>\n<li>E assim como os construtores de um edif\u00edcio devem conhecer as diferentes formas de concretizar um projeto de edifica\u00e7\u00e3o, seja por sua pr\u00f3pria experi\u00eancia ou pelo entendimento do Arquiteto do Edif\u00edcio.\n  <\/li>\n<\/ol>\n<p>\n  Os desenvolvedores\/programadores de software devem entender os padr\u00f5es b\u00e1sicos de design de software e seu c\u00f3digo de implementa\u00e7\u00e3o&#8230; por conta pr\u00f3pria ou do arquiteto de software que instrui a equipe a desenvolv\u00ea-lo seguindo um padr\u00e3o espec\u00edfico.\n<\/p>\n<h3>\n  Padr\u00f5es b\u00e1sicos de c\u00f3digo<br \/>\n<\/h3>\n<p>\n  Nas linhas de abertura deste artigo, eu disse que qualquer programador teria usado padr\u00f5es de projeto. Aqui est\u00e3o alguns exemplos muito b\u00e1sicos de c\u00f3digo seguindo um padr\u00e3o.\n<\/p>\n<ol>\n<li>\n<p>\n      A seguir est\u00e1 um padr\u00e3o b\u00e1sico de projeto de <strong>filtro de intercepta\u00e7\u00e3o<\/strong>.\n    <\/p>\n<\/li>\n<li>\n<p>\n      Esconder Copiar C\u00f3digo\n    <\/p>\n<\/li>\n<li>\n<pre><code>switch (condition){\n     case Value1:\n     case Value2:\n     default:\n}<\/code><\/pre>\n<\/li>\n<li>\n<p>\n      Gatilhos de eventos, manipuladores de eventos&#8230; v\u00eam sob o padr\u00e3o de design <strong>Subject-Observer<\/strong> b\u00e1sico. Discutiremos os padr\u00f5es de cada padr\u00e3o, varia\u00e7\u00f5es populares, com exemplos&#8230; em breve.\n    <\/p>\n<\/li>\n<li>\n<p>\n      Se voc\u00ea usou algum tipo de cole\u00e7\u00e3o, como Arraylist em C#, e iterou pela matriz, ent\u00e3o voc\u00ea usou um padr\u00e3o de design <strong>Iterator<\/strong> b\u00e1sico .\n    <\/p>\n<\/li>\n<li>\n<p>\n      O c\u00f3digo abaixo \u00e9 um exemplo de um padr\u00e3o b\u00e1sico de tratamento de exce\u00e7\u00f5es\/ <strong>cadeia de responsabilidade .<\/strong>\n    <\/p>\n<\/li>\n<li>\n<p>\n      Esconder Copiar C\u00f3digo\n    <\/p>\n<\/li>\n<li>\n<pre><code>try{\n}catch(Exception ex){\n}\nfinally{\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>\n  Diferentes \u00e1reas de padr\u00f5es de design<br \/>\n<\/h3>\n<p>\n  Existem diferentes terminologias em software al\u00e9m de Design Patterns.. algumas delas frequentemente relacionadas aos Design patterns que discutimos at\u00e9 agora.. e algumas delas totalmente n\u00e3o relacionadas.\n<\/p>\n<p>\n  O que discutimos at\u00e9 agora \u00e9 \u00e0s vezes chamado de &#8221; <strong>Padr\u00f5es de Projeto de Implementa\u00e7\u00e3o<\/strong> &#8220;.\n<\/p>\n<p>\n  Existem outros, como <strong>padr\u00f5es de arquitetura, padr\u00f5es de estrutura, padr\u00f5es de linguagem<\/strong> (principalmente chamados de construtores de linguagem).\n<\/p>\n<p>\n  Eles s\u00e3o padr\u00f5es colocados em diferentes n\u00edveis&#8230; como os padr\u00f5es de <strong>linguagem<\/strong> s\u00e3o padr\u00f5es implementados como parte de linguagens de programa\u00e7\u00e3o como C# \/ Java, como os recursos \/ constru\u00e7\u00f5es da linguagem.. alguns deles j\u00e1 vimos.\n<\/p>\n<p>\n  Todos os exemplos acima de sujeito-observador, filtro de intercepta\u00e7\u00e3o, etc., s\u00e3o absorvidos como constru\u00e7\u00f5es de linguagem em todas as linguagens de programa\u00e7\u00e3o de alto n\u00edvel populares que vieram depois de C.\n<\/p>\n<p>\n  <strong>Padr\u00f5es de arquitetura<\/strong> s\u00e3o aqueles modelos padr\u00e3o de arquitetura de software, geralmente referindo-se a diferentes m\u00e9todos de coloca\u00e7\u00e3o ou liga\u00e7\u00e3o de m\u00f3dulos ou camadas ou camadas, formando o aplicativo completo.\n<\/p>\n<p>\n  Isso n\u00e3o tem nenhuma rela\u00e7\u00e3o com os padr\u00f5es de design no sentido de codificar\/programar isso&#8230; mas eles compartilham as mesmas respostas para Por qu\u00ea\/O que \u00e9 discutido neste artigo.\n<\/p>\n<p>\n  <strong>Os padr\u00f5es de estrutura<\/strong> tamb\u00e9m n\u00e3o est\u00e3o relacionados \u00e0 nossa discuss\u00e3o sobre padr\u00f5es de projeto. Quando estruturas como .NET implementam meios especiais para registrar erros ou rastrear rotas de execu\u00e7\u00e3o de c\u00f3digo facilmente por meio de m\u00e9todos ou objetos internos da estrutura, esses mecanismos s\u00e3o referidos como padr\u00f5es de estrutura.\n<\/p>\n<p>\n  Alguns exemplos no .NET Framework incluem o recurso stackTrace, o recurso de atributo de classe com colchetes [] sobre as defini\u00e7\u00f5es de classe\/m\u00e9todo etc. Ao usar esses recursos, estamos codificando com os padr\u00f5es internos do Framework.\n<\/p>\n<p>\n  Espero que este artigo ajude a fornecer uma vis\u00e3o geral dos padr\u00f5es de design e terminologias relacionadas.\n<\/p>\n<p>\n  At\u00e9 agora, discutimos apenas o que s\u00e3o os padr\u00f5es e o quanto eles s\u00e3o importantes&#8230; mas n\u00e3o discutimos o que s\u00e3o os padr\u00f5es padr\u00e3o em si.\n<\/p>\n<h4>\n  Licen\u00e7a<br \/>\n<\/h4>\n<p>\n  Este artigo, juntamente com qualquer c\u00f3digo-fonte e arquivos associados, est\u00e1 licenciado sob a licen\u00e7a The Code Project Open License (CPOL).\n<\/p>\n<\/p>\n<div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\n  Fonte de grava\u00e7\u00e3o: <a target=\"_blank\" rel=\"noopener nofollow\" data-pssr=\"\" href=\"http:\/\/www.instantshift.com\/2016\/01\/12\/models-of-design-for-beginners\/\">instantshift.com<\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea j\u00e1 escreveu programas para produtos ou aplicativos de software, grandes\/pequenos, \u00e9 mais prov\u00e1vel que voc\u00ea tenha usado muitos Design Patterns\u2026 embora seja poss\u00edvel que eles n\u00e3o sejam um dos padr\u00f5es de design mais usados\/padr\u00e3o. Mas sim, h\u00e1 uma diferen\u00e7a \u00f3bvia entre implementar um padr\u00e3o de projeto e \u201cusar\u201d um padr\u00e3o de projeto\u2026 de qualquer forma, a pessoa que trabalha com padr\u00f5es de projeto entende ou entender\u00e1 facilmente. A quest\u00e3o \u00e9 que os padr\u00f5es de projeto n\u00e3o s\u00e3o novidade para os programadores. Neste artigo abaixo, estou tentando explicar os padr\u00f5es de design, em seus fundamentos, e\u2026<\/p>\n","protected":false},"author":1,"featured_media":142080,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[202,150,228,59],"tags":[],"class_list":["post-261511","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-designer-de-web","category-dicas-e-truques-da-web","category-livros-didaticos","category-web-e-wordpress-2"],"_links":{"self":[{"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/261511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=261511"}],"version-history":[{"count":0,"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/261511\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/142080"}],"wp:attachment":[{"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=261511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=261511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=261511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}