Pular para conteúdo

Projeto 02: Decomposição Estruturada e Modularização Algorítmica ⚙️

Escopo do Projeto

Objetivo: Conceber um sistema estruturado rigoroso aplicando modularização top-down, coesão funcional e acoplamento frouxo sem o uso de classes.


🎯 1. Contexto & Desafio Prático

O paradigma estruturado é o alicerce do pensamento computacional. Você construirá uma suíte de processamento estatístico de dados de telemetria baseada puramente em funções coesas, módulos desacoplados e passagem explícita de argumentos.


📋 2. Requisitos Técnicos Obrigatórios

  • R1 (Decomposição Top-Down): Quebrar o problema em funções especializadas: leitura de dados, sanitização, cálculo estatístico e emissão de relatório.
  • R2 (Coesão Funcional): Cada procedimento deve realizar uma única tarefa bem definida sem efeitos colaterais imprevistos.
  • R3 (Eliminação de Variáveis Globais): Proibido o uso de variáveis globais; todo fluxo de dados deve ocorrer via parâmetros e retornos formais.
  • R4 (Tratamento de Dados Inválidos): Implementar validação defensiva contra vetores vazios ou dados nulos com códigos de status explícitos.

📐 3. Diagrama Conceitual & Arquitetura

graph LR
    RawData["Dados Brutos de Sensores"] --> Clean["sanitizar_dados()"]
    Clean --> Stats["calcular_metricas() (Média, Desvio)"]
    Stats --> Format["formatar_relatorio()"]
    Format --> Output["Saída Formatada no Terminal"]
    style RawData fill:#e1f5fe,stroke:#01579b
    style Clean fill:#fff3e0,stroke:#e65100
    style Stats fill:#f3e5f5,stroke:#7b1fa2
    style Format fill:#e8f5e9,stroke:#2e7d32

💻 4. Especificação Técnica & Código de Referência

// processamento_estruturado.py
def sanitizar_dados(amostras: list[float]) -> list[float]:
    """Remove valores negativos e ruídos anômalos."""
    return [x for x in amostras if x is not None and x >= 0]

def calcular_media(valores: list[float]) -> float:
    if not valores:
        return 0.0
    return sum(valores) / len(valores)

def gerar_relatorio_estruturado(dados_brutos: list[float]) -> dict:
    validos = sanitizar_dados(dados_brutos)
    media = calcular_media(validos)
    return {"total_amostras": len(validos), "media": media}

📦 5. Critérios de Avaliação e Entrega

  1. Script executando sem erros e com funções independentes.
  2. Zero dependência de estado global compartilhado.
  3. Testes unitários comprovando o isolamento de cada função.