Capítulo 17: Procedimentos e Escopo de Variáveis (Modularização I)
🎯 Objetivo da Aula
Programas corporativos reais não possuem 20 ou 30 linhas: eles contêm milhares de linhas de código. Escrever tudo em um único bloco contínuo torna o software impossível de ler, testar e manter. A solução consagrada da Engenharia de Software é a Modularização.
Nesta aula, você aprenderá a:
- Compreender o princípio DRY (Don’t Repeat Yourself) e a decomposição modular.
- Dominar a sintaxe de
procedimento Nome(parametros)no VisuAlg. - Diferenciar Variáveis Globais (acessíveis por todo o programa) de Variáveis Locais (exclusivas do procedimento).
- Praticar a Passagem de Parâmetros por Valor.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.alg): Baixar Capitulo_17.alg (abra diretamente no VisuAlg 3.0)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_17.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O sistema de faturamento da FastLog possui mais de 10 telas diferentes (Cadastro de Clientes, Cotação de Frete, Emissão de CT-e, etc.). Em todas as telas, é obrigatório imprimir um Cabeçalho Visual Padronizado com o logotipo da empresa e desenhar molduras de mensagens. Toda vez que a empresa muda de slogan, o programador precisa alterar 10 partes diferentes do código manual.
Missão: Você deve criar o procedimento modular ImprimirCabecalho() e o procedimento ExibirAlerta(msg : caractere), centralizando a formatação visual e eliminando a duplicidade de código no sistema.
🧠 Fundamentos: A Teoria da Modularização
1. O que é um Procedimento?
Um Procedimento (Procedure / Sub-rotina) é um bloco independente de instruções que realiza uma tarefa específica quando é “chamado” pelo programa principal, mas não devolve nenhum valor de retorno diretamente para a variável:
graph TD
A[Algoritmo Principal] -->|1. Chama: ImprimirCabecalho| B["Procedimento ImprimirCabecalho()"]
B -->|2. Desenha moldura e slogan| B
B -->|3. Retorna o controle| A
A -->|4. Continua execução normal| C[Processar Pedido]
style A fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style B fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
style C fill:#217346,stroke:#fff,stroke-width:2px,color:#fff2. Onde Declarar Procedimentos no VisuAlg?
Os procedimentos devem ser escritos na área de declarações, acima do inicio do algoritmo principal:
3. Escopo de Variáveis: Global vs Local
| Tipo de Escopo | Onde é declarada? | Onde pode ser lida/alterada? | Tempo de Vida na RAM |
|---|---|---|---|
| Variável Global | Na seção var principal do topo. | No programa principal e dentro de qualquer procedimento. | Enquanto o programa estiver rodando. |
| Variável Local | Na seção var interna do procedimento. | Apenas e exclusivamente dentro daquele procedimento. | Criada ao chamar e destruída ao sair. |
📖 Exemplo Guiado: Sistema com Procedimentos Parametrizados
Código do Algoritmo:
🛠️ Prática Obrigatória 1: Procedimento de Menu Padronizado
Passo 1: O Desafio
Crie um algoritmo "Menu_Modular" que contenha o procedimento:
procedimento ExibirMenuPrincipal()
Esse procedimento deve desenhar na tela o menu com as opções:
[1] Cadastrar Motorista[2] Consultar Frota[3] Relatório de Viagens[0] Sair do Sistema
No programa principal, chame esse procedimento dentro de um laço repita-ate (opcao = 0).
🛠️ Prática Obrigatória 2: Procedimento Calculador de ICMS Parametrizado
Crie um procedimento chamado CalcularICMS(valorFrete : real, aliquota : real) que receba o valor bruto do frete e a alíquota de imposto (ex: 0.12 para 12%), calculando e imprimindo o valor exato do tributo em moeda.
Chame o procedimento 3 vezes no programa principal para fretes diferentes.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_SeuNome_SeuSobrenome.alg. - Certifique-se de que os procedimentos foram declarados antes do
iniciodo algoritmo. - No Microsoft Teams, envie na tarefa “VisuAlg Cap 17 - Procedimentos”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o princípio DRY (Don’t Repeat Yourself). Em grandes corporações, a reutilização de código através de bibliotecas de procedimentos economiza milhares de horas de trabalho e reduz em até 80% o número de bugs em produção.
🔥 Desafio de Fixação: Procedimento de Moldura com Caractere Customizável
Crie um procedimento DesenharCaixa(texto : caractere, simbolo : caractere) que receba o texto da mensagem e o símbolo de borda (ex: "#" ou "*"), desenhando uma caixa personalizada ao redor da mensagem.
🔑 Gabarito de Código Completo
Prática 1:
Prática 2:
Desafio:
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- O que é um Procedimento, segundo a definição dos Fundamentos, e o que o diferencia quanto à devolução de valor para uma variável?
- Em relação ao
iniciodo algoritmo principal, onde os procedimentos devem ser declarados no VisuAlg? - Segundo a tabela de escopo, em quais lugares uma Variável Global pode ser lida ou alterada, e em quais lugares uma Variável Local pode ser lida ou alterada?
- Qual é o tempo de vida na memória RAM de uma variável local, segundo a tabela de escopo?
- No Cenário Prático, quais dois procedimentos devem ser criados para o sistema de faturamento da FastLog, e que problema de duplicidade de código eles resolvem?
- No Exemplo Guiado (
Sistema_Modular_FastLog), qual procedimento é chamado de dentro de outro procedimento, e qual é esse outro procedimento chamado? - Qual é a diferença entre o procedimento
DesenharLinha()e o procedimentoNotificarStatus(mensagem : caractere)quanto ao uso de parâmetros? - Na Prática Obrigatória 1, dentro de qual estrutura de repetição o procedimento
ExibirMenuPrincipal()deve ser chamado repetidamente? - Na Prática Obrigatória 2, quais dois parâmetros o procedimento
CalcularICMSdeve receber, e quantas vezes ele deve ser chamado no programa principal? - Segundo o Checkpoint de Lógica, a qual princípio de engenharia de software o uso de procedimentos está associado, e qual redução percentual de bugs em produção é mencionada?