<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Giancarlo Rocha]]></title><description><![CDATA[Giancarlo Rocha]]></description><link>https://giancarlorocha.com.br</link><generator>RSS for Node</generator><lastBuildDate>Sun, 17 May 2026 12:12:34 GMT</lastBuildDate><atom:link href="https://giancarlorocha.com.br/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Um Pouco Sobre Acoplamento]]></title><description><![CDATA[Acoplamento é a força que une os componentes do software, e se refere ao quanto um componente depende de outro para realizar sua função. Quanto mais acoplado forem os componentes, mais difícil fica para dar manutenção ao código, por isso busca-se des...]]></description><link>https://giancarlorocha.com.br/um-pouco-sobre-acoplamento</link><guid isPermaLink="true">https://giancarlorocha.com.br/um-pouco-sobre-acoplamento</guid><category><![CDATA[solid]]></category><category><![CDATA[software architecture]]></category><category><![CDATA[design principles]]></category><dc:creator><![CDATA[Giancarlo Rocha]]></dc:creator><pubDate>Wed, 11 Aug 2021 15:04:44 GMT</pubDate><content:encoded><![CDATA[<p>Acoplamento é a força que une os componentes do software, e se refere ao quanto um componente depende de outro para realizar sua função. Quanto mais acoplado forem os componentes, mais difícil fica para dar manutenção ao código, por isso busca-se designs de software com o mínimo de acoplamento possível.</p>
<h3 id="exemplos">Exemplos</h3>
<p>Para ficar mais claro o que é acoplamento, vamos imaginar um carro e uma pessoa, caso queiramos trocar os pneus, ou o motor de um carro, nós conseguimos fazer isso sem necessáriamente alterar a estrutura do carro, e o carro continuaria funcionando com a parte nova instalada, então dizemos que o carro possui um baixo acoplamento entre seus componentes.</p>
<p>Já com uma pessoa, não conseguimos, com a mesma facilidade, trocar uma perna, por exemplo, é algo complexo e que envolve o sistema circulatório, sistema nervoso e etc... Portanto podemos dizer que uma pessoa tem alto acoplamento entre seus componentes.</p>
<p>Vejamos um exemplo de alto acoplamento e baixo acoplamento com código:</p>
<pre><code class="lang-java"><span class="hljs-comment">// Classe acoplada ao banco de dados MySQL</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PessoaModel</span> </span>{
    <span class="hljs-keyword">private</span> MySQLDatabase database;
    PessoaModel(MySQLDatabase database) { <span class="hljs-keyword">this</span>.database = database; }
    ...
}

<span class="hljs-comment">// Exemplo de classe que depende de uma interface genérica de banco de dados</span>
<span class="hljs-comment">// que para alterar o banco seria necessário somente alterar a implementação</span>
<span class="hljs-comment">// concreta de IDatabase.</span>
<span class="hljs-comment">//</span>
<span class="hljs-comment">// Imagine que existam as implementações MySQLDatabase, PostgreSQLDatabase</span>
<span class="hljs-comment">// e que elas implementam a interface IDatabase</span>
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IDatabase</span> </span>{
    <span class="hljs-function">IRecord <span class="hljs-title">find</span><span class="hljs-params">(<span class="hljs-comment">/* params */</span>)</span></span>;
    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">create</span><span class="hljs-params">(<span class="hljs-comment">/* params */</span>)</span></span>;
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PessoaModel</span> </span>{
    <span class="hljs-keyword">private</span> IDatabase database;
    PessoaModel(IDatabase database) { <span class="hljs-keyword">this</span>.database = database; }
    ...
}
</code></pre>
<p>No primeiro exemplo a classe <code>PessoaModel</code> depende exclusivamente da implementação de <code>MySQLDatabase</code> , assim, caso seja necessário mudar o banco de dados seria necessário modificar a classe <code>PessoaModel</code> para utilizar a nova implementação de banco de dados, e cada model existente no sistema deveria ser alterado também.</p>
<p>Já no segundo exemplo, possuímos a interface <code>IDatabase</code> que define os métodos genéricos que a classe <code>PessoaModel</code> pode utilizar. Sempre que for necessário alterar o banco de dados, basta criar uma nova implementação de <code>IDatabase</code> que a classe <code>PessoaModel</code> já vai saber utilizar essa nova implementação sem precisar ser alterada.</p>
<h3 id="conclusao">Conclusão</h3>
<p>Desenvolver buscando baixo acoplamento, vai te dar uma facilidade maior para adicionar novas funcionalidades e reduzir o risco de quebrar as funcionalidades já existentes, e vai tornar mais fácil adicionar testes automatizados, caso ainda não esteja utilizando, já que componentes separados são mais fáceis de testar.</p>
<p>É bom lembrar que o acoplamento máximo é difícil de ser atingido, dado que os componentes do software precisam interagir entre si de alguma forma, e que sempre irão existir demandas de tempo para entrega do software, já que reduzir o acoplamento pode trazer mais complexidade pro código, aumentando o tempo necessário para desenvolve-lo.</p>
<h3 id="referencias">Referências</h3>
<ul>
<li><a target="_blank" href="https://stackoverflow.com/questions/2832017/what-is-the-difference-between-loose-coupling-and-tight-coupling-in-the-object-o/37993102#37993102">Explicação de acoplamento no stackoverflow (inglês)</a></li>
<li><a target="_blank" href="https://stackoverflow.com/questions/39946/coupling-and-cohesion/39988#39988">Explicação de acoplamento e coesão nos stackoverflow (inglês)</a></li>
<li><a target="_blank" href="https://mrpicky.dev/a-brief-history-of-coupling-and-cohesion/">A brief history of coupling and cohesion (artigo)</a></li>
<li><a target="_blank" href="https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html">SRP (Uncle Bob)</a></li>
</ul>
]]></content:encoded></item></channel></rss>