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,filterereduce. - 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
- Código executável contemplando os três paradigmas no mesmo repositório.
- Ausência de efeitos colaterais na função do paradigma funcional.
- Tabela analítica sintetizando os prós e contras de cada modelo.