{"id":1324,"date":"2019-06-19T14:36:34","date_gmt":"2019-06-19T17:36:34","guid":{"rendered":"https:\/\/programathor.com.br\/blog\/?p=1324"},"modified":"2021-07-07T15:19:52","modified_gmt":"2021-07-07T18:19:52","slug":"solid-codigo-limpo","status":"publish","type":"post","link":"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/","title":{"rendered":"SOLID: seu c\u00f3digo mais limpo"},"content":{"rendered":"<p>Um dos maiores desafios dos desenvolvedores \u00e9 manter a qualidade do c\u00f3digo durante todo o desenvolvimento. Por isso, h\u00e1 boas pr\u00e1ticas, como o SOLID. Os princ\u00edpios t\u00eam por finalidade reduzir a complexidade do c\u00f3digo, o acoplamento entre classes, entre outros. Neste artigo, apresentamos todos os princ\u00edpios do SOLID e como eles te ajudar\u00e3o com seu c\u00f3digo.<!--more--><\/p>\n<h2>O que \u00e9 SOLID?<\/h2>\n<p>O termo foi introduzido por Michael Feathers. SOLID \u00e9 um acr\u00f4nimo que representa cinco princ\u00edpios da programa\u00e7\u00e3o orientada a objetos e design de c\u00f3digos, teorizados por Robert Martin, tamb\u00e9m conhecido como Uncle Bob.<\/p>\n<ul>\n<li>S &#8211; Single Responsibility Principle (Princ\u00edpio da Responsabilidade \u00danica)<\/li>\n<li>O &#8211; Open\/Closed Principle (Princ\u00edpio do Aberto\/Fechado)<\/li>\n<li>L &#8211; Liskov Substitution Principle (Princ\u00edpio da Substitui\u00e7\u00e3o de Liskov)<\/li>\n<li>I &#8211; Interface Segregation Principle (Princ\u00edpio da Segrega\u00e7\u00e3o de Interfaces)<\/li>\n<li>D &#8211; Dependency Inversion Principle (Princ\u00edpio da Invers\u00e3o de Depend\u00eancias)<\/li>\n<\/ul>\n<h3>1. Princ\u00edpio da Responsabilidade \u00danica<\/h3>\n<p>Este princ\u00edpio usa como base a coes\u00e3o, ou seja, afinidade funcional dos elementos de um m\u00f3dulo. Em outras palavras, uma classe deve ter uma \u00fanica responsabilidade.<\/p>\n<blockquote><p>A class should have one, and only one, reason to change<\/p><\/blockquote>\n<p>Com isso, quanto mais bem definido o que sua classe faz, mais coesa ela \u00e9.<\/p>\n<p><a href=\"https:\/\/programathor.com.br\/blog\/projetos-de-programacao\/\"><em>Leia tamb\u00e9m: &#8220;Projetos de programa\u00e7\u00e3o: seu conhecimento em pr\u00e1tica&#8221;<\/em><\/a><\/p>\n<h3>2. Princ\u00edpio do Aberto\/Fechado<\/h3>\n<p>Resumindo, podemos estender o comportamento de uma classe, mas n\u00e3o podemos permitir a abertura para fazer pequenas modifica\u00e7\u00f5es. Para estend\u00ea-la, podemos utilizar heran\u00e7a, interface e composi\u00e7\u00e3o.<\/p>\n<blockquote><p>You should be able to extend a classes behavior, without modifying it<\/p><\/blockquote>\n<p>Resolvemos com este princ\u00edpio outro ponto da complexidade do c\u00f3digo. Quanto mais regras criamos, mais casos existir\u00e3o e a manuten\u00e7\u00e3o da classe ficar\u00e1 invi\u00e1vel.<\/p>\n<p><a href=\"https:\/\/programathor.com.br\/blog\/freelancer-como-comecar\/\"><em>Leia tamb\u00e9m: &#8220;Freelancer: como come\u00e7ar em TI&#8221;<\/em><\/a><\/p>\n<h3>3. Princ\u00edpio da Substitui\u00e7\u00e3o de Liskov<\/h3>\n<p>O princ\u00edpio foi descrito por Barbara Liskov, o qual pondera os cuidados de utilizar a heran\u00e7a no projeto. Apesar de ser um mecanismo poderoso, ela deve ser usada de forma moderada e contextualizada. Esse ponto evita que classes sejam estendidas apenas por possu\u00edrem algo em comum, tornando o c\u00f3digo uma bagun\u00e7a.<\/p>\n<blockquote><p>Derived classes must be substitutable for their base classes<\/p><\/blockquote>\n<p>Uncle Bob, explica que este princ\u00edpio \u00e9 capacitador do princ\u00edpio anterior (OCP), pois a possibilidade de substitui\u00e7\u00e3o de subtipos permite que um m\u00f3dulo possa ser extens\u00edvel sem modifica\u00e7\u00f5es.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-2279 \" src=\"https:\/\/programathor.com.br\/blog\/wp-content\/uploads\/2020\/12\/vaga-desenvolvedor-1-2-300x163.jpg\" alt=\"\" width=\"655\" height=\"356\" srcset=\"https:\/\/programathor.com.br\/blog\/wp-content\/uploads\/2020\/12\/vaga-desenvolvedor-1-2-300x163.jpg 300w, https:\/\/programathor.com.br\/blog\/wp-content\/uploads\/2020\/12\/vaga-desenvolvedor-1-2-676x367.jpg 676w, https:\/\/programathor.com.br\/blog\/wp-content\/uploads\/2020\/12\/vaga-desenvolvedor-1-2.jpg 700w\" sizes=\"(max-width: 655px) 100vw, 655px\" \/><\/p>\n<h3>4. Princ\u00edpio da Segrega\u00e7\u00e3o de Interfaces<\/h3>\n<p>O princ\u00edpio se baseia na ideia de que muitas interfaces espec\u00edficas s\u00e3o melhores que uma interface geral. Ou seja, interfaces que possuem muitos comportamentos s\u00e3o dif\u00edceis de manter e evoluir.<\/p>\n<blockquote><p>Make fine grained interfaces that are client specific<\/p><\/blockquote>\n<p>Mas precisamos tomar cuidado, pois devemos evitar que centenas de interfaces diferentes sejam criadas de forma indevida.<\/p>\n<p><a href=\"https:\/\/programathor.com.br\/blog\/entrevista-front-end\/\"><em>Leia tamb\u00e9m: &#8220;Entrevista Front-end: como se destacar&#8221;<\/em><\/a><\/p>\n<h3>5. Princ\u00edpio da Invers\u00e3o de Depend\u00eancias<\/h3>\n<p>Devemos depender de abstra\u00e7\u00f5es e n\u00e3o de classes concretas. Isso ocorre pelo fato das abstra\u00e7\u00f5es mudarem menos e facilitarem a mudan\u00e7a de comportamento, al\u00e9m de futuras evolu\u00e7\u00f5es no c\u00f3digo.<\/p>\n<blockquote><p>Depend on abstractions, not on concretions<\/p><\/blockquote>\n<p>Uncle Bob separa o princ\u00edpio em dois itens:<\/p>\n<ul>\n<li>&#8220;M\u00f3dulos de alto n\u00edvel n\u00e3o devem depender de m\u00f3dulos de baixo n\u00edvel.&#8221;<\/li>\n<li>&#8220;As abstra\u00e7\u00f5es n\u00e3o devem depender de detalhes. Os detalhes devem depender das abstra\u00e7\u00f5es.&#8221;<\/li>\n<\/ul>\n<h2>Conclus\u00e3o<\/h2>\n<p>Os princ\u00edpios SOLID deveriam ser usados e treinados por todos desenvolvedores, pois com eles, podemos evitar problemas muito comuns, por exemplo:<\/p>\n<ul>\n<li>Dificuldade em testes<\/li>\n<li>Fragilidade<\/li>\n<li>Duplica\u00e7\u00e3o de c\u00f3digo<\/li>\n<\/ul>\n<p>Al\u00e9m de poupar muito tempo no futuro para refatorar o c\u00f3digo. Recomendo que tente aplicar os conceitos em um sistema simples como treinamento. Caso queira ler artigos mais espec\u00edficos sobre o assunto, o pr\u00f3prio Uncle Bob possui um blog de <a href=\"https:\/\/blog.cleancoder.com\/\">Clean Code.<\/a><\/p>\n<p>Outro ponto de extrema import\u00e2ncia: desenvolvedores, os quais se preocupam com o design e qualidade do c\u00f3digo, est\u00e3o em destaque nos processos seletivos das <a href=\"https:\/\/programathor.com.br\/jobs?utm_source=blog&amp;utm_medium=post&amp;utm_campaign=solid_codigo_limpo\">oportunidades<\/a>.<\/p>\n<p>Espero que tenha gostado do conte\u00fado. Utilize o campo dos coment\u00e1rios para enviar feedbacks e experi\u00eancias \ud83d\ude42<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-2280\" src=\"https:\/\/programathor.com.br\/blog\/wp-content\/uploads\/2020\/12\/LOGO-PROGRAMATHOR-1024x171-1-300x50.jpg\" alt=\"PROGRAMATHOR\" width=\"647\" height=\"110\" \/><\/p>\n<hr \/>\n<h3><strong>Consiga um emprego!<\/strong><\/h3>\n<p>Est\u00e1 buscando novas oportunidades como desenvolvedor?\u00a0 Acesse a\u00a0<a href=\"https:\/\/programathor.com.br\/\">ProgramaThor<\/a>, uma startup focada no recrutamento de desenvolvedores. Para se candidatar \u00e0s vagas para programador e receber notifica\u00e7\u00f5es em casos de matching, basta se cadastrar e completar seu perfil corretamente.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/programathor.com.br\/jobs?utm_source=blog&amp;utm_medium=post&amp;utm_campaign=solid_codigo_limpo\" class=\"large otw-greenish radius otw-button\" target=\"_blank\">VAGAS PARA PROGRAMADORES<\/a><\/p>\n<p>Este artigo \u00e9 inspirado no texto do <a href=\"https:\/\/medium.com\/equals-lab\/princ%C3%ADpios-s-o-l-i-d-o-que-s%C3%A3o-e-porque-projetos-devem-utiliz%C3%A1-los-bf496b82b299\">Medium<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um dos maiores desafios dos desenvolvedores \u00e9 manter a qualidade do c\u00f3digo durante todo o desenvolvimento. Por isso, h\u00e1 boas pr\u00e1ticas, como o SOLID. Os princ\u00edpios t\u00eam por finalidade reduzir a complexidade do c\u00f3digo, o acoplamento entre classes, entre outros. Neste artigo, apresentamos todos os princ\u00edpios do SOLID e como eles te ajudar\u00e3o com seu [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1330,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[41,58],"tags":[89,65,90],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SOLID: seu c\u00f3digo mais limpo - Blog ProgramaThor<\/title>\n<meta name=\"description\" content=\"Neste artigo, a ProgramaThor trouxe tudo que voc\u00ea precisa saber sobre SOLID: seu c\u00f3digo mais limpo. Vem conferir e tirar suas d\u00favidas!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SOLID: seu c\u00f3digo mais limpo - Blog ProgramaThor\" \/>\n<meta property=\"og:description\" content=\"Neste artigo, a ProgramaThor trouxe tudo que voc\u00ea precisa saber sobre SOLID: seu c\u00f3digo mais limpo. Vem conferir e tirar suas d\u00favidas!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog ProgramaThor\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ProgramaThorBr\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-19T17:36:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-07T18:19:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/programathor.com.br\/blog\/wp-content\/uploads\/2019\/06\/SOLID.png\" \/>\n\t<meta property=\"og:image:width\" content=\"676\" \/>\n\t<meta property=\"og:image:height\" content=\"366\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Guilherme Luis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ProgramaThor\" \/>\n<meta name=\"twitter:site\" content=\"@ProgramaThor\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Guilherme Luis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SOLID: seu c\u00f3digo mais limpo - Blog ProgramaThor","description":"Neste artigo, a ProgramaThor trouxe tudo que voc\u00ea precisa saber sobre SOLID: seu c\u00f3digo mais limpo. Vem conferir e tirar suas d\u00favidas!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/","og_locale":"pt_PT","og_type":"article","og_title":"SOLID: seu c\u00f3digo mais limpo - Blog ProgramaThor","og_description":"Neste artigo, a ProgramaThor trouxe tudo que voc\u00ea precisa saber sobre SOLID: seu c\u00f3digo mais limpo. Vem conferir e tirar suas d\u00favidas!","og_url":"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/","og_site_name":"Blog ProgramaThor","article_publisher":"https:\/\/www.facebook.com\/ProgramaThorBr\/","article_published_time":"2019-06-19T17:36:34+00:00","article_modified_time":"2021-07-07T18:19:52+00:00","og_image":[{"width":676,"height":366,"url":"https:\/\/programathor.com.br\/blog\/wp-content\/uploads\/2019\/06\/SOLID.png","type":"image\/png"}],"author":"Guilherme Luis","twitter_card":"summary_large_image","twitter_creator":"@ProgramaThor","twitter_site":"@ProgramaThor","twitter_misc":{"Escrito por":"Guilherme Luis","Tempo estimado de leitura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/","url":"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/","name":"SOLID: seu c\u00f3digo mais limpo - Blog ProgramaThor","isPartOf":{"@id":"https:\/\/programathor.com.br\/blog\/#website"},"datePublished":"2019-06-19T17:36:34+00:00","dateModified":"2021-07-07T18:19:52+00:00","author":{"@id":"https:\/\/programathor.com.br\/blog\/#\/schema\/person\/f81d80875539ccc14358e41a86278935"},"description":"Neste artigo, a ProgramaThor trouxe tudo que voc\u00ea precisa saber sobre SOLID: seu c\u00f3digo mais limpo. Vem conferir e tirar suas d\u00favidas!","breadcrumb":{"@id":"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/programathor.com.br\/blog\/solid-codigo-limpo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/programathor.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Dicas","item":"https:\/\/programathor.com.br\/blog\/category\/dicas\/"},{"@type":"ListItem","position":3,"name":"SOLID: seu c\u00f3digo mais limpo"}]},{"@type":"WebSite","@id":"https:\/\/programathor.com.br\/blog\/#website","url":"https:\/\/programathor.com.br\/blog\/","name":"Blog ProgramaThor","description":"A plataforma de recrutamento  para programadores pensada por programadores. Entenda melhor o mundo da programa\u00e7\u00e3o, a cria\u00e7\u00e3o de uma vaga eficiente, dicas de entrevista, as linguagens do momento, o mercado de desenvolvimento e muito mais!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/programathor.com.br\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-PT"},{"@type":"Person","@id":"https:\/\/programathor.com.br\/blog\/#\/schema\/person\/f81d80875539ccc14358e41a86278935","name":"Guilherme Luis","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/programathor.com.br\/blog\/#\/schema\/person\/image\/","url":"https:\/\/programathor.com.br\/blog\/wp-content\/litespeed\/avatar\/e146bc14592ba7da07feb1191cadc4c3.jpg?ver=1781438220","contentUrl":"https:\/\/programathor.com.br\/blog\/wp-content\/litespeed\/avatar\/e146bc14592ba7da07feb1191cadc4c3.jpg?ver=1781438220","caption":"Guilherme Luis"},"description":"Estudante de Administra\u00e7\u00e3o de empresas, transformo ideias em palavras. Fascinado por marketing e cria\u00e7\u00f5es.","sameAs":["https:\/\/www.programathor.com.br\/"],"url":"https:\/\/programathor.com.br\/blog\/author\/guilherme\/"}]}},"_links":{"self":[{"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/posts\/1324"}],"collection":[{"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1324"}],"version-history":[{"count":9,"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/posts\/1324\/revisions"}],"predecessor-version":[{"id":3164,"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/posts\/1324\/revisions\/3164"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/media\/1330"}],"wp:attachment":[{"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programathor.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}