aulify · Mini-Projecto
UC UC02839 · T. Desenv. Software
Versão · Aluno
Mini-Projecto · App C++ moderno
STL, smart pointers, threads, CMake, testes
Contexto
Cada par/trio constrói uma aplicação C++ moderna completa que demonstre as features avançadas: templates, STL, smart pointers, exceptions, threads, CMake, testes. Cenários:
- A: Image converter CLI (lê BMP/PPM, aplica filtros em paralelo, grava).
- B: Word frequency analyzer (multi-threaded, suporte a vários ficheiros).
- C: Mini-database in-memory (com query language simples).
- D: Web scraper concurrent (com libcurl).
- E: Particle simulator (física 2D + render em consola/SDL).
Requisitos
Funcionais
- C++20 mínimo (
-std=c++20). - CMake como build system.
- Mínimo 2 classes com templates ou herança.
- Smart pointers sempre (zero
new/deleteraw). - STL containers e algorithms.
- Lambdas em pelo menos 3 sítios.
- Exceptions custom (mínimo 1).
- Concorrência (threads ou async).
- Testes Catch2 (mínimo 8).
Não-funcionais
- Sem memory leaks — AddressSanitizer ou Valgrind clean.
- Warnings clean com
-Wall -Wextra -Werror. - README completo com setup, comandos, screenshots.
- GitHub com commits regulares.
- CI com GitHub Actions (compila + testa em push).
- Apresentação com demo + análise de performance.
Fases
Fase 1 · Design + setup (2h)
- Escolher cenário.
- Diagrama de classes.
- CMake inicial + estrutura de pastas.
- Entregável: projecto compila "hello".
Fase 2 · Core data structures (3h)
- Classes principais com templates onde faz sentido.
- Smart pointers.
- Operadores
<<,==se útil. - Entregável: tipos do domínio funcionais.
Fase 3 · Lógica de negócio (4h)
- Funcionalidade principal.
- Algorithms STL.
- Lambdas em vez de loops onde possível.
- Entregável: feature core a funcionar.
Fase 4 · Concorrência (2h)
- Identificar partes paralelizáveis.
std::asyncoustd::thread+ mutex.- Medir speedup.
- Entregável: app paralelo mensurável.
Fase 5 · Tratamento de erros (1h)
- Exceptions onde apropriado.
- Custom exception types.
- Entregável: erros tratados elegantemente.
Fase 6 · Testes (2h)
- Catch2 via FetchContent.
- Pelo menos 8 testes cobrindo casos principais.
- Entregável:
ctestpassa tudo.
Fase 7 · CI + README (1h)
- GitHub Actions: workflow .yml com build + test.
- README com badges, exemplos, screenshots.
- Entregável: CI verde, repo apresentável.
Fase 8 · Apresentação (1h)
- Demo ao vivo, análise de performance.
Critérios de avaliação
| Item | Peso |
|---|---|
| C++ moderno idiomático | 15% |
| Smart pointers + RAII | 10% |
| Templates + STL | 15% |
| Lambdas + algorithms | 10% |
| Concorrência funcional | 15% |
| Testes Catch2 | 10% |
| CMake + CI | 10% |
| Sem leaks / warnings | 5% |
| README + apresentação | 10% |
Reflexão
Em meia página: que feature C++ moderna te impressionou mais? Como smart pointers mudaram o teu mindset vs raw pointers? Templates intuitivos ou difíceis de raciocinar? Concorrência correr no teu hardware deu speedup real? C++ vs Rust — explorarias Rust a seguir?