Pular para conteúdo

Projeto 01: Taxonomia e Comparação de Paradigmas de Programação 🧠

Escopo do Projeto

Objetivo: Classificar e implementar soluções em código comparando o modelo imperativo clássico, o modelo orientado a objetos e o modelo funcional declarativo.


🎯 1. Contexto & Desafio Prático

Compreender as premissas de cada paradigma de programação permite ao arquiteto escolher a ferramenta ideal para cada tipo de problema. Neste projeto, você implementará um processador de folha de pagamento sob três prismas de pensamento algorítmico distintos.


📋 2. Requisitos Técnicos Obrigatórios

  • R1 (Implementação Imperativa): Implementar cálculo com controle explícito de fluxo (for, while, mutação de variáveis de acumulador).
  • R2 (Implementação Orientada a Objetos): Encapsular dados e comportamentos em classes (Funcionario, FolhaPagamento), utilizando polimorfismo para cálculo de adicionais.
  • R3 (Implementação Funcional): Utilizar funções puras, imutabilidade de coleções e encadeamento declarativo com map, filter e reduce.
  • R4 (Análise Comparativa): Documentar um quadro de trade-offs comparando legibilidade, facilidade de teste e mutabilidade de estado.

📐 3. Diagrama Conceitual & Arquitetura

graph TD
    Input["Dados de Funcionários (Entrada)"] --> Paradigmas{"Escolha do Paradigma"}
    Paradigmas --> Imp["Imperativo: Loops manuais & Acumuladores mutáveis"]
    Paradigmas --> OO["Orientado a Objetos: Classes, Objetos & Polimorfismo"]
    Paradigmas --> Func["Funcional: Imutabilidade, Funções Puras & Map/Reduce"]
    Imp & OO & Func --> Output["Relatório de Folha Calculada"]
    style Input fill:#e1f5fe,stroke:#01579b
    style Paradigmas fill:#fff3e0,stroke:#e65100
    style Imp fill:#f3e5f5,stroke:#7b1fa2
    style OO fill:#e8f5e9,stroke:#2e7d32
    style Func fill:#e0f2f1,stroke:#00695c

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

// paradigmas_comparacao.py
# 1. Abordagem Imperativa
def calc_imperativo(funcionarios):
    total = 0
    for f in funcionarios:
        if f['ativo']:
            total += f['salario'] * 1.10
    return total

# 2. Abordagem Funcional Pura
from functools import reduce

def calc_funcional(funcionarios):
    ativos = filter(lambda f: f['ativo'], funcionarios)
    salarios = map(lambda f: f['salario'] * 1.10, ativos)
    return reduce(lambda acc, val: acc + val, salarios, 0)

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

  1. Código executável contemplando os três paradigmas no mesmo repositório.
  2. Ausência de efeitos colaterais na função do paradigma funcional.
  3. Tabela analítica sintetizando os prós e contras de cada modelo.