Módulo 13 - Abstração e modularidade: código que dura

Acoplamento e coesão: a saúde de um módulo

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026

O que você vai aprender

  • Entender acoplamento como o grau de dependência entre módulos.
  • Entender coesão como o grau de foco de um módulo num único assunto.
  • Mirar baixo acoplamento e alta coesão ao dividir o código.
  • Reconhecer sinais de módulos grudados ou dispersos demais.

Duas medidas da divisão

Dividir em módulos é o começo, mas dá para dividir mal. Duas peças podem ficar em arquivos separados e ainda assim viver grudadas, uma espiando os detalhes internos da outra a cada passo. Para julgar se a divisão ficou boa, a engenharia usa duas medidas. A primeira é o acoplamento: o quanto os módulos dependem uns dos outros. Muito acoplamento é como um grupo em que cada pessoa precisa perguntar tudo para as outras antes de agir; qualquer mudança numa exige avisar e ajustar as demais. Baixo acoplamento é o oposto: cada peça sabe o mínimo sobre as outras e conversa por uma interface enxuta.

A segunda medida é a coesão: o quanto um módulo é focado num único assunto. Alta coesão significa que tudo dentro dele trabalha para o mesmo objetivo, como um módulo de cálculo de impostos que só cuida de impostos. Baixa coesão é a gaveta de tranqueira: um módulo chamado utilidades que tem uma função de data, uma de e-mail, uma de desconto e mais um punhado de coisas sem parentesco. As duas medidas andam juntas na direção certa: você quer módulos muito focados por dentro (alta coesão) e pouco dependentes por fora (baixo acoplamento). Esse é o retrato de um código fácil de mudar.

Dois cenários lado a lado. À esquerda, rotulado Ruim, três caixas ligadas por um emaranhado de setas cruzadas entre todas, e dentro de cada caixa itens de assuntos diferentes misturados, mostrando alto acoplamento e baixa coesão. À direita, rotulado Bom, três caixas bem focadas, cada uma com itens de um só assunto, ligadas por pouquíssimas setas retas, mostrando baixo acoplamento e alta coesão.
À esquerda, peças grudadas e bagunçadas por dentro. À direita, o alvo: cada peça focada e com poucas ligações entre elas.

Por que isso decide o custo de mudar

Essas duas medidas não são teoria bonita: elas decidem o quanto dói mudar o programa. Com alto acoplamento, uma alteração pequena vira um efeito dominó. Você mexe num módulo, isso quebra o vizinho que dependia de um detalhe seu, que por sua vez quebra um terceiro. Um dia de trabalho para uma mudança que deveria ser trivial. Com baixa coesão, você nem acha onde mexer, porque a lógica está espalhada em gavetas sem lógica. Já com baixo acoplamento e alta coesão, mudar uma regra é ir ao módulo focado naquele assunto, alterar ali, e pronto: como ninguém dependia dos detalhes internos, nada mais quebra. A meta prática é sempre puxar o código para esse lado.

🎮 Jogo da aula

Saudável ou doente?

Classifique cada situação de código como Bom (baixo acoplamento, alta coesão) ou Ruim (alto acoplamento ou baixa coesão).

Como reduzir acoplamento e subir a coesão

Melhorar as duas medidas tem receitas concretas. Para baixar o acoplamento, faça os módulos conversarem por interfaces pequenas em vez de mexerem nas tripas uns dos outros, e passe os dados de que a peça precisa em vez de deixá-la ir buscar sozinha em toda parte. Para subir a coesão, junte no mesmo módulo o que trata do mesmo assunto e tire de lá o que não pertence; a gaveta utilidades é o sinal de que faltou dar nome aos assuntos. Um bom truque de coesão é o teste do nome: se você não consegue batizar o módulo com um substantivo claro, provavelmente ele faz coisas demais. Nomes fáceis costumam indicar módulos focados.

Teste rápido

Um módulo chamado utilidades reúne uma função de formatar data, uma de enviar e-mail e uma de calcular desconto. Qual é o problema?

Perguntas frequentes

Qual a diferença entre acoplamento e coesão?
Acoplamento é uma relação entre módulos: o quanto um depende do outro. Coesão é uma qualidade interna de um módulo: o quanto ele é focado num assunto só. Um mede o de fora (ligações entre peças), o outro mede o de dentro (foco da peça). O alvo é acoplamento baixo e coesão alta.
Por que baixo acoplamento é melhor que alto?
Porque com baixo acoplamento você muda uma peça sem arrastar as outras. Com alto acoplamento, cada mudança vira efeito dominó: mexer num módulo quebra os vizinhos que dependiam dos seus detalhes. Menos dependência entre peças significa menos coisas quebrando quando você precisa evoluir o código.
Alta coesão pode ser exagerada?
O risco maior é o oposto, a baixa coesão. Mas dá para fragmentar demais e acabar com muitos módulos minúsculos, o que aumenta o número de peças a acompanhar. O equilíbrio é agrupar o que é do mesmo assunto num módulo com nome claro, sem picar em pedaços tão pequenos que a visão do todo se perca.
Como percebo que dois módulos estão acoplados demais?
Sinais típicos: uma peça mexe direto nas variáveis internas da outra, mudar um módulo obriga a mudar vários outros, e para entender um você precisa ler o código de vários. Se as peças só conversassem por uma interface enxuta, essas amarras não existiriam. O efeito dominó ao mudar é o alarme principal.
O que é a tal gaveta utilidades e por que evitar?
É um módulo genérico onde se joga qualquer função solta: data, e-mail, texto, cálculo, tudo junto. Ele tem baixa coesão porque não trata de um assunto, trata de tudo um pouco. Isso dificulta achar as coisas e nomear o módulo. O melhor é separar por assunto, dando a cada função um módulo focado.
O teste do nome funciona mesmo?
É um bom indício rápido. Se você consegue batizar o módulo com um substantivo claro (impostos, frete, autenticação), ele tende a ser coeso. Se o melhor nome que aparece é vago como utilidades ou geral, provavelmente o módulo mistura assuntos e vale separar. O nome não prova nada sozinho, mas costuma denunciar a bagunça.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.