Projetos OOP
Estrutura dos Projetos
PROJETO
├── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── netrunner/
│ │ └── project/
│ │ ├── core/
│ │ ├── model/
│ │ ├── service/
│ │ └── util/
│ └── test/
│ └── java/
└── README.md
Sistema Bancário Digital
Objetivos de Aprendizado
Encapsulamento de dados sensíveis
Herança para diferentes tipos de contas
Polimorfismo em operações financeiras
Interfaces para serviços bancários
Records para transações imutáveis
Classes seladas para hierarquia de contas
Componentes Principais
// Hierarquia de contas
public sealed abstract class Account
permits CheckingAccount, SavingsAccount, CryptoAccount {
private final String id;
private BigDecimal balance;
private final SecurityModule security;
// Métodos abstratos e concretos
}
// Transações imutáveis
public record Transaction(
String id,
BigDecimal amount,
LocalDateTime timestamp,
TransactionType type,
String description
) {}
// Interface de serviços
public interface BankingService {
void processTransaction(Transaction tx);
Account getAccount(String id);
List<Transaction> getHistory(String accountId);
}
Objetivos de Aprendizado
Abstração de formas geométricas
Herança para especialização
Polimorfismo em renderização
Interfaces para comportamentos
Records para pontos e dimensões
Classes seladas para tipos de formas
Componentes Principais
// Ponto imutável
public record Point(double x, double y) {
public double distanceTo(Point other) {
// Cálculo de distância
}
}
// Hierarquia de formas
public sealed interface Shape
permits Circle, Rectangle, Triangle {
double area();
double perimeter();
void render(Graphics g);
boolean contains(Point p);
}
// Transformações
public interface Transformable {
void rotate(double angle);
void scale(double factor);
void translate(Point delta);
}
Sistema de Plugins
Objetivos de Aprendizado
Interfaces para extensibilidade
Carregamento dinâmico
Gerenciamento de dependências
Padrão Observer para eventos
Records para configurações
Classes seladas para tipos de plugins
Componentes Principais
// Configuração de plugin
public record PluginConfig(
String name,
String version,
Set<String> dependencies,
Map<String, String> settings
) {}
// Interface base de plugin
public sealed interface Plugin
permits SecurityPlugin, NetworkPlugin, DataPlugin {
void initialize(PluginConfig config);
void start();
void stop();
String getStatus();
}
// Gerenciador de plugins
public class PluginManager {
private final Map<String, Plugin> plugins;
private final DependencyResolver resolver;
public void loadPlugin(String path) {
// Carregamento dinâmico
}
}
Sistema Bancário
Implementar criptografia de dados
Adicionar autenticação biométrica
Criar sistema de alertas
Implementar transações programadas
Adicionar suporte multi-moeda
Implementar formas 3D
Adicionar animações
Criar sistema de colisões
Implementar exportação SVG
Adicionar efeitos visuais
Sistema de Plugins
Implementar hot-reload
Adicionar versionamento
Criar marketplace
Implementar sandbox
Adicionar telemetria
Dicas de Implementação
Planejamento
Comece com diagramas UML
Identifique abstrações
Defina interfaces claras
Desenvolvimento
Use TDD
Refatore frequentemente
Documente decisões
Testes
Cubra casos de borda
Teste integrações
Valide segurança
Próximos Passos
Sistema Bancário
26 June 2025