{"id":38991,"date":"2023-01-20T10:00:00","date_gmt":"2023-01-20T13:00:00","guid":{"rendered":"https:\/\/blog.locaweb.com.br\/?p=38991"},"modified":"2024-07-31T13:43:13","modified_gmt":"2024-07-31T16:43:13","slug":"como-solid-pode-ajudar-a-programar","status":"publish","type":"post","link":"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/como-solid-pode-ajudar-a-programar\/","title":{"rendered":"Como SOLID pode ajudar a programar?"},"content":{"rendered":"\n<p class=\"has-text-align-center\"><em>Os princ\u00edpios SOLID contribuem para a evolu\u00e7\u00e3o e a manuten\u00e7\u00e3o de software ao permitir a inclus\u00e3o de novos requisitos de forma f\u00e1cil<\/em><\/p>\n\n\n\n<p><strong>SOLID<\/strong> \u00e9 um dos <strong>conjuntos mais populares de princ\u00edpios de desenvolvimento de software orientado a objetos (OOD) e design de c\u00f3digo<\/strong>. O conceito estabelece uma s\u00e9rie de pr\u00e1ticas que ajudam a escrever um c\u00f3digo flex\u00edvel, escal\u00e1vel, sustent\u00e1vel e reutiliz\u00e1vel, facilitando a evolu\u00e7\u00e3o e a manuten\u00e7\u00e3o dos programas.<\/p>\n\n\n\n<p>\u00c0 medida que os softwares crescem, os princ\u00edpios SOLID reduzem a complexidade dos aplicativos ao <strong>permitirem alterar uma \u00e1rea do software sem modificar outras<\/strong>. Com isso, os projetos ficam mais f\u00e1ceis de entender, manter e estender, e desenvolvedores podem criar softwares adapt\u00e1veis, eficazes e \u00e1geis para evitar problemas futuros.<\/p>\n\n\n\n<p>Embora os princ\u00edpios gerem muitos benef\u00edcios, segui-los pode levar \u00e0 escrita de c\u00f3digos mais longos e complexos. Isso significa um processo de design mais estendido e o desenvolvimento um pouco mais dif\u00edcil. Mas o esfor\u00e7o certamente vale a pena. Com SOLID, o software fica mais f\u00e1cil de se manter, testar e ampliar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O que \u00e9 o conceito SOLID?<\/strong><\/h2>\n\n\n\n<p>SOLID \u00e9 um padr\u00e3o de codifica\u00e7\u00e3o em programa\u00e7\u00e3o com regras gerais reunidas no artigo <em>Princ\u00edpios de projeto e padr\u00f5es de projeto<\/em>, publicado em 2000 por Robert Martin, conhecido como Uncle Bob, um entusiasta da comunidade de desenvolvimento de software, <a href=\"https:\/\/blog.locaweb.com.br\/temas\/codigo-aberto\/metodologias-ageis-tudo-o-que-voce-precisa-saber\/\" target=\"_blank\" rel=\"noreferrer noopener\">metodologias \u00e1geis<\/a> e artesanato de software.<\/p>\n\n\n\n<p>O conceito foi desenvolvido posteriormente por Michael Feathers, especialista em Design de Software. Nos \u00faltimos 20 anos, <strong>os princ\u00edpios revolucionaram o mundo da programa\u00e7\u00e3o orientada a objetos<\/strong>, mudando a maneira como os c\u00f3digos de software s\u00e3o escritos.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Princ\u00edpios b\u00e1sicos do SOLID para voc\u00ea PROGRAMAR MELHOR  | Locaweb\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/gF37JxmRyKc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quais s\u00e3o os 5 princ\u00edpios SOLID?<\/strong><\/h2>\n\n\n\n<p>Os cinco princ\u00edpios SOLID tornam um c\u00f3digo mais leg\u00edvel, f\u00e1cil de manter e com padr\u00f5es de design e testabilidade. S\u00e3o um conjunto de regras e pr\u00e1ticas recomendadas a serem seguidas por desenvolvedores para atingir certos padr\u00f5es de projeto e arquitetura de software em geral.<\/p>\n\n\n\n<p>O acr\u00f4nimo SOLID re\u00fane as cinco principais premissas para o desenvolvimento eficaz de aplicativos: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>single responsibility;<\/li>\n\n\n\n<li>open-closed;<\/li>\n\n\n\n<li>Liskov substitution;<\/li>\n\n\n\n<li>interface segregation;<\/li>\n\n\n\n<li>dependency inversion.<\/li>\n<\/ul>\n\n\n\n<p>Confira o que significa cada uma delas: <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Single responsibility<\/strong><\/h3>\n\n\n\n<p>O princ\u00edpio de single responsibility foi introduzido pelo engenheiro de software Tom DeMarco em 1979 ao afirmar que \u201cuma classe deve ter apenas um motivo para mudar\u201d. Isso quer dizer que <strong>cada classe deve ter uma \u00fanica responsabilidade<\/strong>, um \u00fanico trabalho ou um \u00fanico prop\u00f3sito.<\/p>\n\n\n\n<p>No desenvolvimento de software, a tarefa precisa ser dividida em diferentes membros com fun\u00e7\u00f5es espec\u00edficas: designers de front-end projetam, testadores verificam o software e desenvolvedores de <a href=\"https:\/\/blog.locaweb.com.br\/temas\/codigo-aberto\/9-tecnologias-para-quem-trabalha-com-back-end\/\" target=\"_blank\" rel=\"noreferrer noopener\">back-end<\/a> cuidam dos bastidores do aplicativo. Assim, todos t\u00eam um \u00fanico trabalho ou responsabilidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Open-closed<\/strong><\/h3>\n\n\n\n<p>O open-closed, criado pelo consultor de linguagem de programa\u00e7\u00e3o Bertrand Meyer em 1988, determina que \u201cas entidades de software (classes, m\u00f3dulos, fun\u00e7\u00f5es etc.) devem ser abertas para extens\u00e3o, mas fechadas para modifica\u00e7\u00e3o\u201d.<strong> O uso desse princ\u00edpio separa o c\u00f3digo existente do c\u00f3digo modificado para fornecer melhor estabilidade.<\/strong><\/p>\n\n\n\n<p>Os profissionais devem ser capazes de estender o comportamento de uma classe sem a modificar. Imagine que um desenvolvedor precise lan\u00e7ar uma atualiza\u00e7\u00e3o para uma biblioteca enquanto outro necessite adicionar algum recurso. O segundo desenvolvedor pode estender a classe existente criada, mas n\u00e3o deve modific\u00e1-la diretamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"812\" height=\"500\" src=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/SOLID-2-min.jpg\" alt=\"Na imagem temos uma vis\u00e3o de cima de uma mesa de madeira e sobre ela h\u00e1 um notebook, dois celulares, smartwatch, lente de uma c\u00e2mera nikon e um caderno sem pauta com v\u00e1rias anota\u00e7\u00f5es. \" class=\"wp-image-38992\"\/><figcaption class=\"wp-element-caption\">O padr\u00e3o SOLID cont\u00e9m regras divulgadas por Robert Martin. (Fonte: AltumCode\/Unsplash\/Reprodu\u00e7\u00e3o)<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Liskov substitution<\/strong><\/h3>\n\n\n\n<p>O princ\u00edpio, introduzido pela cientista da computa\u00e7\u00e3o Barbara Liskov em 1987, <strong>busca garantir que qualquer classe filha de uma classe pai possa ser usada no lugar do pai sem nenhum comportamento inesperado<\/strong>.<\/p>\n\n\n\n<p>Um dos exemplos cl\u00e1ssicos desse princ\u00edpio \u00e9 um ret\u00e2ngulo. Os quatro lados do ret\u00e2ngulo podem ter qualquer altura ou largura. Dessa forma, um quadrado pode ser considerado uma classe filha do ret\u00e2ngulo, embora tenha largura e altura iguais. Assim, as propriedades da classe ret\u00e2ngulo podem ser estendidas para a classe quadrado.<\/p>\n\n\n\n<p>Para fazer isso, \u00e9 necess\u00e1rio trocar a classe filha (quadrado) pela classe pai (ret\u00e2ngulo) para se ajustar \u00e0 defini\u00e7\u00e3o de um quadrado com quatro lados iguais. No entanto, a classe derivada n\u00e3o afeta o comportamento da classe original.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Interface segregation<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"812\" height=\"500\" src=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/SOLID-1-min.jpg\" alt=\"Na imagem vemos a m\u00e3o de uma mulher com uma caneta laranja, desenhando um projeto em wireframe. \" class=\"wp-image-38993\"\/><figcaption class=\"wp-element-caption\">O princ\u00edpio de Segrega\u00e7\u00e3o de Interface evita a implementa\u00e7\u00e3o de interfaces irrelevantes. (Fonte: Kelly Sikkema\/Unsplash\/Reprodu\u00e7\u00e3o)<\/figcaption><\/figure>\n\n\n\n<p>Formulado por Martin, o princ\u00edpio de segrega\u00e7\u00e3o de interface estabelece que os clientes n\u00e3o devem ser for\u00e7ados a implementar uma interface irrelevante. Isso ajuda a evitar uma interface \u201cabundante\u201d para privilegiar interfaces pequenas espec\u00edficas do cliente.<\/p>\n\n\n\n<p><strong>O objetivo desse princ\u00edpio \u00e9 reduzir os efeitos colaterais do uso de interfaces maiores, dividindo as interfaces do aplicativo em interfaces menores<\/strong>. \u00c9 semelhante ao princ\u00edpio da responsabilidade \u00fanica, em que cada classe ou <a href=\"https:\/\/blog.locaweb.com.br\/temas\/codigo-aberto\/padroes-e-principios-para-desenvolvimento-de-interfaces\/\" target=\"_blank\" rel=\"noreferrer noopener\">interface<\/a> atende a um \u00fanico prop\u00f3sito.<\/p>\n\n\n\n<p>O design preciso do aplicativo e a abstra\u00e7\u00e3o correta s\u00e3o a chave do princ\u00edpio de segrega\u00e7\u00e3o de interface. Embora leve mais tempo e esfor\u00e7o na fase de design de um aplicativo e possa aumentar a complexidade do c\u00f3digo, no fim um c\u00f3digo flex\u00edvel \u00e9 obtido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dependency inversion<\/strong><\/h3>\n\n\n\n<p>Tamb\u00e9m criado por Martin, <strong>o princ\u00edpio de invers\u00e3o de depend\u00eancia ajuda a acoplar os m\u00f3dulos de software livremente<\/strong> e \u00e9 regido por duas regras b\u00e1sicas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Os m\u00f3dulos de alto n\u00edvel n\u00e3o devem importar nada dos m\u00f3dulos de baixo n\u00edvel; ambos devem depender de abstra\u00e7\u00f5es.<\/li>\n\n\n\n<li>As abstra\u00e7\u00f5es n\u00e3o devem depender de implementa\u00e7\u00f5es concretas; implementa\u00e7\u00f5es concretas devem depender de abstra\u00e7\u00f5es.<\/li>\n<\/ol>\n\n\n\n<p>A abstra\u00e7\u00e3o permite lidar apenas com a ideia geral de algo, sem se importar com os detalhes. Um carregador de notebook, por exemplo, pode ser conectado a qualquer tomada desde que o soquete satisfa\u00e7a a \u201cinterface\u201d dos tr\u00eas pinos. Dessa forma, o plugue pode ser utilizado em diversas tomadas desde que estas atendam aos requisitos da interface.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quando usar SOLID?<\/strong><\/h2>\n\n\n\n<p>SOLID deve ser aplicado por qualquer pessoa desenvolvedora de software. Inicialmente, pode ser complicado introduzir todas as regras no trabalho cotidiano, portanto \u00e9 importante criar um sistema simples para come\u00e7ar a treinar e testar o uso de cada princ\u00edpio.<\/p>\n\n\n\n<p><strong>A ferramenta \u00e9 especialmente \u00fatil para isolar e testar funcionalidades, evitar duplica\u00e7\u00e3o e diminuir o risco de quebra de c\u00f3digo ap\u00f3s mudan\u00e7as<\/strong>. O sistema permite que o software permane\u00e7a o m\u00e1ximo de tempo em utiliza\u00e7\u00e3o, com reaproveitamento da programa\u00e7\u00e3o j\u00e1 realizada.<\/p>\n\n\n\n<div class=\"user-cta-block\" style=\"background-color:#2E333C;\"><p>Procurando performance, espa\u00e7o e melhor custo-benef\u00edcio do mercado? Conhe\u00e7a as solu\u00e7\u00f5es de revenda de hospedagem Locaweb.<\/p><a class=\"user-cta\" style=\"background-color: #F00842\n;\" href=\"https:\/\/bit.ly\/3kuFAlL:;\" target=\"_blank\" rel=\"noopener\">Clique aqui<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Os princ\u00edpios SOLID contribuem para a evolu\u00e7\u00e3o e a manuten\u00e7\u00e3o de software ao permitir a inclus\u00e3o de novos requisitos de forma f\u00e1cil SOLID \u00e9 um dos conjuntos mais populares de princ\u00edpios de desenvolvimento de software orientado a objetos (OOD) e design de c\u00f3digo. O conceito estabelece uma s\u00e9rie de pr\u00e1ticas que ajudam a escrever um [&hellip;]<\/p>\n","protected":false},"author":24,"featured_media":38994,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-38991","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/38991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=38991"}],"version-history":[{"count":6,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/38991\/revisions"}],"predecessor-version":[{"id":50057,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/38991\/revisions\/50057"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media\/38994"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=38991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=38991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=38991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}