{"id":10161,"date":"2023-12-19T11:20:14","date_gmt":"2023-12-19T14:20:14","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?post_type=artigos&#038;p=10161"},"modified":"2023-12-22T09:03:39","modified_gmt":"2023-12-22T12:03:39","slug":"como-padroes-ajudam-a-reduzir-o-impacto-da-escassez-de-recursos","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/como-padroes-ajudam-a-reduzir-o-impacto-da-escassez-de-recursos\/","title":{"rendered":"Como padr\u00f5es ajudam a reduzir o impacto da escassez de recursos"},"content":{"rendered":"\n<p>Quando pensamos em <em>software development<\/em>, um dos grandes desafios \u00e9 criar sistemas eficientes especialmente em ambientes com recursos limitados. Diante disso, como podemos otimizar nossa aplica\u00e7\u00e3o para performar bem mesmo em plataformas com menor poder computacional? A resposta se esconde em um conceito simples, mas extraordinariamente poderoso: padr\u00f5es de design, particularmente os padr\u00f5es criacionais. Mas por que eles s\u00e3o t\u00e3o importantes?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Import\u00e2ncia dos Padr\u00f5es Criacionais em Ambientes Restritos<\/h2>\n\n\n\n<p>Imagine que voc\u00ea est\u00e1 desenvolvendo um aplicativo que exige intensa utiliza\u00e7\u00e3o de CPU e mem\u00f3ria, s\u00f3 que h\u00e1 um por\u00e9m: voc\u00ea n\u00e3o tem disponibilidade infinita desses recursos. Acontece que em muitos casos, a solu\u00e7\u00e3o n\u00e3o est\u00e1 em aumentar a capacidade de processamento ou mem\u00f3ria, porque nem sempre isso \u00e9 vi\u00e1vel. O que fazer ent\u00e3o?<\/p>\n\n\n\n<p>Os padr\u00f5es criacionais v\u00eam como uma luz no fim do t\u00fanel. Eles nos ensinam a reutilizar recursos de maneira inteligente. Ao inv\u00e9s de instantaneamente instanciar novos objetos, que consomem processamento e ocupam espa\u00e7o na mem\u00f3ria, por que n\u00e3o reaproveitar objetos que j\u00e1 existem?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reutilizando Recursos com Efici\u00eancia<\/h2>\n\n\n\n<p>A reutiliza\u00e7\u00e3o \u00e9 um dos pilares para otimizar o uso de recursos em <em>software<\/em>. Imaginemos objetos como pe\u00e7as de um jogo que ocupam um lugar no &#8220;tabuleiro&#8221; da nossa mem\u00f3ria. Se essas pe\u00e7as ainda podem ser usadas, por que descart\u00e1-las para criar novas, gastando mais &#8220;movimentos&#8221; do nosso processador?<\/p>\n\n\n\n<p>Considere o seguinte c\u00f3digo, que ilustra o uso do <em>Singleton Pattern<\/em>, um dos padr\u00f5es criacionais:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"public class DatabaseInstance\n{\n    private static DatabaseInstance _instance;\n\n    private DatabaseInstance() {}\n\n    public static DatabaseInstance Instance\n    {\n        get\n        {\n            if (_instance == null)\n            {\n                _instance = new DatabaseInstance();\n            }\n            return _instance;\n        }\n    }\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">DatabaseInstance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> DatabaseInstance _instance<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DatabaseInstance<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> DatabaseInstance Instance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">get<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">_instance<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">_instance<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> DatabaseInstance<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_instance<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>No exemplo acima, temos uma classe que garante que apenas uma inst\u00e2ncia do objeto <code>DatabaseInstance<\/code> seja criada. Isso significa que, uma vez instanciado, o mesmo objeto ser\u00e1 reutilizado ao longo de toda a aplica\u00e7\u00e3o. Evitamos assim a cria\u00e7\u00e3o desnecess\u00e1ria de novos objetos e economizamos recursos preciosos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Padr\u00f5es criacionais n\u00e3o s\u00e3o apenas ferramentas de design; eles s\u00e3o solu\u00e7\u00f5es estrat\u00e9gicas para problemas reais de otimiza\u00e7\u00e3o de recursos. Com eles, nossa aplica\u00e7\u00e3o pode fazer mais com menos, um princ\u00edpio fundamental em tempos de hardwares limitados e demandas crescentes.<\/p>\n\n\n\n<p>Da pr\u00f3xima vez que voc\u00ea estiver diante de uma limita\u00e7\u00e3o de processamento ou mem\u00f3ria, pense em padr\u00f5es como <em>Singleton<\/em>, <em>Factory Method<\/em>, ou <em>Prototype<\/em>. Eles podem ser a chave para um <em>software<\/em> mais eficiente e responsivo.<\/p>\n\n\n\n<p>\u00c9 importante mencionar que o conte\u00fado abordado em padr\u00f5es e suas implementa\u00e7\u00f5es \u00e9 um t\u00f3pico recorrente em meus grupos de estudos e mentorias. L\u00e1, discutimos a fundo essas e outras estrat\u00e9gias de otimiza\u00e7\u00e3o de recursos em desenvolvimento de software.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Padr\u00f5es criacionais s\u00e3o essenciais para desenvolver sistemas eficientes em ambientes com recursos limitados.<\/li>\n\n\n\n<li>A reutiliza\u00e7\u00e3o inteligente de objetos pode economizar processamento e mem\u00f3ria, evitando a inst\u00e2ncia desnecess\u00e1ria de novos objetos.<\/li>\n\n\n\n<li>O <em>Singleton Pattern<\/em> \u00e9 um exemplo pr\u00e1tico de como padr\u00f5es criacionais podem ser usados para otimizar a gest\u00e3o de recursos em software.<\/li>\n<\/ol>\n","protected":false},"featured_media":10110,"parent":0,"template":"","cursos":[7],"class_list":["post-10161","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-gof"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/10161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/10110"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=10161"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=10161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}