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
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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Dividir o programa em módulos.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
O novelo de código. Modularidade é quebrar o programa em partes menores, cada uma com um trabalho claro.
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?
Quando vale a pena separar. O mesmo trecho de lógica aparece copiado em dois ou mais lugares.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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.
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.