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

Dividir o programa em módulos

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

Velocidade

O que você vai aprender

  • Entender por que um programa grande precisa ser dividido em módulos.
  • Dar a cada módulo uma responsabilidade única e clara.
  • Separar o cálculo (a lógica) da exibição (a tela) e da leitura de dados.
  • Reconhecer um módulo que faz coisas demais e vale a pena separar.

O novelo de código

Todo programa nasce pequeno e simpático. Uma tela, uma conta, um resultado. O problema aparece com o crescimento: mais telas, mais regras, mais casos especiais. Se tudo vive no mesmo lugar, misturado, o programa vira um novelo. Você quer trocar a cor de um botão e, sem querer, quebra o cálculo do frete, porque a conta do frete estava escrita no meio do código que desenha o botão. Cada mudança dá medo, porque ninguém sabe o que mais depende daquele trecho. Esse é o sintoma clássico do código que não foi dividido.

A cura é a mesma de qualquer problema grande, e você já a usou o curso inteiro: dividir para conquistar. Só que aqui não é dividir o dado nem o cálculo, e sim dividir o próprio programa em módulos. Um módulo cuida de calcular, outro de mostrar na tela, outro de ler os dados de onde eles vierem. Cada um tem uma fronteira clara e um assunto. Quando você precisa mexer no cálculo, vai no módulo do cálculo, e só nele. A tela nem fica sabendo. Essa separação é o primeiro passo para um código que aguenta o tempo.

À esquerda, um bloco único chamado programa com tudo dentro embolado: cálculo, tela e dados misturados por linhas cruzadas, um novelo. À direita, o mesmo programa dividido em três caixas separadas e alinhadas, rotuladas Dados, Cálculo e Tela, ligadas por setas simples numa fila, cada caixa com sua fronteira nítida.
À esquerda, tudo misturado num novelo. À direita, o programa dividido em módulos com responsabilidades separadas.

Uma coisa por módulo

O guia prático para dividir é a pergunta da responsabilidade única: qual é o único motivo pelo qual este módulo mudaria? Se você consegue responder com uma frase curta, o módulo está saudável. Se a resposta tem vários "e" (calcula o preço E formata o texto E salva no arquivo), ele faz coisas demais e cada uma dessas tarefas puxa o módulo para uma direção diferente. Separar não é enfeite: é o que permite testar o cálculo sem abrir a tela, trocar a tela sem tocar na conta, e reusar o mesmo cálculo em dois lugares. Uma função que só calcula recebe números e devolve números, previsível e fácil de testar.

// RUIM: uma função só, fazendo tudo, difícil de testar e reusar
funcao processarPedido(pedido)
  preco <- pedido.qtd * pedido.valor
  escreva("Total: R$ ", preco)   // já mostra na tela aqui dentro
  salvarNoArquivo(preco)          // e ainda salva
fim

// BOM: cada responsabilidade num módulo, ligadas por fora
funcao calcularTotal(pedido)      // módulo de cálculo: só conta
  retorne pedido.qtd * pedido.valor
fim
funcao mostrarTotal(total)        // módulo de tela: só exibe
  escreva("Total: R$ ", total)
fim
// quem coordena chama um, depois o outro:
total <- calcularTotal(pedido)
mostrarTotal(total)

A versão ruim mistura contar, mostrar e salvar. A boa dá a cada tarefa uma função com uma responsabilidade.

🎮 Jogo da aula

Cálculo ou tela?

Um sistema de loja está sendo dividido em dois módulos: o que CALCULA (lógica pura) e o que MOSTRA (interface). Classifique cada tarefa no módulo certo.

Quando vale a pena separar

Dividir tem custo: mais peças, mais nomes, mais lugares para olhar. Por isso não se quebra tudo em mil pedaços por esporte. O sinal de que chegou a hora de separar é concreto. Você percebe que copiou o mesmo cálculo em dois lugares (então ele merece virar um módulo reusado). Você não consegue testar a regra sem abrir a tela inteira (então a regra e a tela estão grudadas demais). Uma função passou de umas dezenas de linhas e faz três assuntos diferentes. Quando um desses sinais aparece, separar paga o custo. Antes disso, um programa pequeno pode viver junto sem problema.

Teste rápido

O que significa dizer que um módulo tem uma responsabilidade única?

Perguntas frequentes

Modularidade é a mesma coisa que dividir para conquistar?
É a mesma ideia aplicada ao código em vez de ao problema. Dividir para conquistar quebra um problema em partes menores; modularidade quebra o programa em módulos menores. Nos dois casos, o ganho vem de resolver e entender uma parte de cada vez, em vez de encarar o todo embolado.
Um módulo é sempre um arquivo separado?
Não necessariamente. Nas linguagens reais um módulo costuma ser um arquivo ou uma pasta, mas o conceito é mais amplo: é qualquer conjunto de funções e dados com um assunto e uma fronteira em volta. Você pode ter dois módulos no mesmo arquivo, desde que cada um cuide de uma responsabilidade clara.
Separar demais não deixa o código mais complicado?
Pode deixar, sim. Dividir tem custo: mais peças e mais nomes para acompanhar. O equilíbrio é dividir quando há sinal concreto de que vale, como código repetido ou uma função que faz assuntos demais. Um programa pequeno e simples pode viver junto sem problema; o exagero de fragmentar cedo demais atrapalha.
Por que separar o cálculo da exibição, na prática?
Porque são coisas que mudam por motivos diferentes e em ritmos diferentes. A aparência muda toda hora (cores, textos, layout); a regra de cálculo muda quando a lei ou o negócio muda. Se estão juntas, cada retoque visual arrisca a conta. Separadas, você testa o cálculo com números e mexe na tela à vontade.
Como sei se dividi bem um programa?
Um bom teste é conseguir descrever cada módulo em uma frase curta, sem usar vários "e". Outro é conseguir mudar uma parte sem precisar ler as outras. Se trocar a tela exige mexer no cálculo, ou vice-versa, a divisão ainda não separou de verdade as responsabilidades.
Isso vale só para programas grandes?
O benefício cresce com o tamanho, mas o hábito ajuda desde cedo. Mesmo em um programa pequeno, separar a lógica da tela facilita testar e crescer depois. A ideia é não deixar o novelo se formar: dividir na medida certa, conforme o programa ganha responsabilidades novas.

Fontes

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