📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Sistemas com C++. Recomendado revisar antes de começar.

⚙️ Simulador de Física com C++23 & Padrão RAII

v1.0 — C++23 Moderno, Idioma RAII, Smart Pointers e Move Semantics

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: Engenheiro de C++ Moderno / Game Engine Developer. O C++ moderno (C++20/C++23) abandonou os perigosos ponteiros crus e o delete manual. Hoje, a indústria de jogos AAA, finanças de alta frequência (HFT) e veículos autônomos exige RAII, Smart Pointers e Move Semantics para garantir velocidade máxima sem riscos de vazamento.

—`

🎯 Objetivo & Escopo do Projeto

Construir um Simulador de Corpos Rígidos e Gravidade em C++23 Moderno, aplicando o princípio fundamental do RAII (Resource Acquisition Is Initialization) com std::unique_ptr e std::vector, implementando cálculo vetorial em ponto flutuante e transferência de posse via Move Semantics (std::move).

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Líder Técnico de Game Engine)

“Nossa engine de física não pode usar new e delete soltos no código porque exceções estavam causando vazamentos graves. Queremos um subsistema de partículas e corpos celestes em C++23 que gerencie os objetos através do idioma RAII e Smart Pointers (std::unique_ptr), calcule trajetórias e velocidades a cada frame (tick) e seja 100% à prova de vazamentos mesmo se ocorrer uma exceção.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Criar classe CorpoFisico com massa, vetor posição $(x, y)$ e vetor velocidade $(vx, vy)$. “corpos celestes e partículas”
RF02 Funcional Gerenciar coleção de corpos utilizando std::vector<std::unique_ptr<CorpoFisico>>. “usar Smart Pointers”
RF03 Funcional Atualizar posições a cada tick de tempo ($\Delta t$) aplicando equações de aceleração gravitacional. “calcule trajetórias e velocidades”
RNF01 Não-Funcional Idioma RAII estrito: zero chamadas a delete manual. Padrão C++ Moderno
RNF02 Não-Funcional Compilação em padrão C++20 / C++23 com Clang ou GCC. Desempenho Moderno

—`

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como desenvolvedor da engine, quero adicionar corpos dinâmicos sem me preocupar com desalocação manual. Alta
US02 Como usuário da simulação, quero avançar 100 frames e ver a órbita calculada. Alta

—`

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-cpp23-raii-physics

# Compilar com g++ moderno
g++ -std=c++23 -O3 -Wall -Wextra main.cpp -o physics_sim && ./physics_sim

—`

🛠️ Fase 4 — Implementação Guiada (main.cpp)

#include <iostream>
#include <memory>
#include <vector>

class CorpoFisico {
public:
    double x, y, vx, vy;
    CorpoFisico(double x, double y, double vx, double vy) : x(x), y(y), vx(vx), vy(vy) {}
    ~CorpoFisico() { std::cout << "Corpo destruido deterministicamente via RAII.
"; }

    void atualizar(double dt) {
        x += vx * dt;
        y += vy * dt;
    }
};

int main() {
    std::vector<std::unique_ptr<CorpoFisico>> cena;
    cena.push_back(std::make_unique<CorpoFisico>(0.0, 0.0, 10.0, 5.0));

    for (int i = 0; i < 5; ++i) {
        cena[0]->atualizar(0.1);
        std::cout << "Frame " << i << ": Posicao = (" << cena[0]->x << ", " << cena[0]->y << ")
";
    }
    return 0; // Memoria liberada automaticamente ao destruir o vetor cena!
}

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd sistemas_cpp_01_simulacao_raii

2. Execute a aplicação ou testes

g++ -std=c++20 -O2 src/main.cpp -o app && ./app

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/sistemas_cpp_01_simulacao_raii`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Asserções

assert(cena[0]->x > 0.0); // Validacao de integridade fisica

—`

✅ Checkpoint Final

  1. Aplicação compilada em C++23 com otimização -O3.
  2. Padrão RAII garantindo desalocação automática dos objetos.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal