Capítulo 19: Engenharia de Software e Decomposição Algorítmica
🎯 Objetivo da Aula
Programar não é apenas escrever linhas de código: é projetar arquiteturas funcionais. Antes de abrir o computador e digitar, um engenheiro de software precisa entender como quebrar um problema gigantesco em partes pequenas, independentes e testáveis (Top-Down Design).
Nesta aula, você aprenderá a:
- Aplicar o método de Decomposição Top-Down para resolução de problemas complexos.
- Implementar o princípio de Separação de Responsabilidades (Single Responsibility Principle).
- Adotar técnicas de Programação Defensiva (blindagem contra falhas do operador).
- Construir um subsistema modular completo de controle de estoque com operações de cadastro, listagem e auditoria.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.alg): Baixar Capitulo_19.alg (abra diretamente no VisuAlg 3.0)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_19.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O almoxarifado de peças da FastLog opera sem informatização, gerando perdas financeiras por falta de controle do valor total estocado e duplicidade de cadastros. A gerência solicitou um software em terminal que gerencie até 5 produtos em memória, permitindo:
Cadastrar Produtos(com validação de preços e quantidades positivas).Listar Estoque(com exibição tabular alinhada).Calcular Patrimônio Total(somatório financeiro de todos os itens).
Missão: Projetar e programar esse sistema dividindo rigorosamente as tarefas em procedimentos e funções especializadas, sem concentrar tudo no bloco principal.
🧠 Fundamentos: A Metodologia Top-Down
1. Decomposição Top-Down (Do Todo para as Partes)
Em vez de tentar resolver o sistema inteiro de uma só vez, nós o quebramos em camadas hierárquicas:
graph TD
Root["Sistema de Estoque FastLog"] --> M1["Módulo 1: Interface & Menu (Procedimento)"]
Root --> M2["Módulo 2: Entrada & Cadastro (Procedimento)"]
Root --> M3["Módulo 3: Relatórios & Listagem (Procedimento)"]
Root --> M4["Módulo 4: Cálculos Financeiros (Função)"]
style Root fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style M1 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style M2 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style M3 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style M4 fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff2. O Princípio da Responsabilidade Única (SRP)
Cada módulo deve ter um único motivo para mudar:
- O procedimento de Cadastro só se preocupa em ler dados e validar se são válidos.
- O procedimento de Listagem só se preocupa em desenhar a tabela formatada.
- A função de Cálculo só se preocupa em fazer a matemática e devolver o número.
📖 Exemplo Guiado: Subsistema Modular de Estoque
Código do Algoritmo:
🛠️ Prática Obrigatória 1: Procedimento de Busca Modularizada
Passo 1: O Desafio
Adicione ao sistema acima um procedimento chamado BuscarProdutoPorNome():
- O procedimento deve pedir ao usuário o nome do produto a ser pesquisado.
- Varrer o vetor e, se encontrar, imprimir a quantidade e o preço.
- Se não encontrar, emitir o aviso de produto inexistente usando a técnica da flag booleana.
- Adicione a opção
[4] Pesquisar por Nomeao menu principal.
🛠️ Prática Obrigatória 2: Validação Defensiva de Quantidades
Modifique o procedimento de cadastro para implementar Programação Defensiva:
- A quantidade deve ser estritamente maior que zero (
qtd > 0). Se o usuário digitar zero ou negativo, utilize um laçorepita-atepara forçar a digitação de um valor correto.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_SeuNome_SeuSobrenome.alg. - Teste o fluxo completo do menu e certifique-se de que a modularização está impecável.
- No Microsoft Teams, envie na tarefa “VisuAlg Cap 19 - Decomposição Algorítmica”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o conceito de Arquitetura Orientada a Serviços (SOA) e CRUD (Create, Read, Update, Delete). Esse padrão de divisão modular em menus e manipuladores de ação é a fundação de sistemas corporativos como SAP, Totvs e Salesforce.
🔥 Desafio de Fixação: Função de Localização de Item Mais Valioso
Crie uma função ItemMaisValioso() : caractere que percorra o vetor de preços e retorne o nome do produto que possui o maior valor unitário cadastrado.
🔑 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 é a metodologia de Decomposição Top-Down, segundo os Fundamentos deste capítulo?
- Quais são os quatro módulos em que o Sistema de Estoque FastLog é dividido, segundo o diagrama de decomposição?
- Segundo o Princípio da Responsabilidade Única (SRP), qual é a única preocupação do procedimento de Cadastro, do procedimento de Listagem e da função de Cálculo?
- No Cenário Prático, quantos produtos o sistema de almoxarifado deve gerenciar em memória, e quais três operações ele deve permitir?
- No Exemplo Guiado (
Almoxarifado_Modular), quais são os três vetores paralelos usados para armazenar os dados de cada produto? - No algoritmo
Almoxarifado_Modular, qual estrutura de repetição controla o laço do menu principal, e com que condição ela termina? - Na Prática Obrigatória 1, qual técnica (já estudada em capítulo anterior) deve ser usada para avisar quando um produto pesquisado não é encontrado?
- Na Prática Obrigatória 2, qual condição deve ser validada repetidamente com
repita-ateantes de aceitar a quantidade digitada pelo usuário? - Segundo o Checkpoint de Lógica, a que padrão de arquitetura de software (e a que sigla de operações) o sistema modular em menus está associado, e quais três sistemas corporativos são citados como exemplo?
- Na função
CalcularPatrimonioTotal()do Exemplo Guiado, qual cálculo é somado ao acumuladorsomaa cada iteração do laçopara?