PROJETOS Voltar para home
Ver todos os projetos

Java Bank - Controle de Transações POO

Um sistema bancário em console desenvolvido em Java puro para praticar os pilares de POO, repositórios desacoplados e tratamento rigoroso de exceções customizadas.

Sobre o Projeto

Desenvolvi este sistema bancário interativo via terminal durante meus estudos de Java com o propósito claro de consolidar o entendimento prático de arquitetura modular e boas práticas de Programação Orientada a Objetos. A aplicação simula o ecossistema interno de um banco, permitindo a criação de contas, gerenciamento de investimentos, transferências entre carteiras e auditoria simples de saldos.

O objetivo principal aqui foi ir além dos exemplos teóricos simples da internet, criando um fluxo de backend realista que lida com validações pesadas de regras de negócio e simula o isolamento de camadas que encontramos em sistemas corporativos de verdade.

Estrutura e Decisões Técnicas

A engenharia do software adota um padrão focado no desacoplamento de código. Em vez de concentrar toda a lógica no ponto de entrada do terminal, o projeto separa as responsabilidades de forma clara: os modelos contêm apenas as propriedades e comportamentos de domínio, os repositórios gerenciam os mapas de dados na memória, e a classe de serviço dita as regras lógicas de transação.

Tecnologias Aplicadas e Decisões
Java

Escolhido por ser uma linguagem robusta e fortemente tipada, ideal para exercitar conceitos avançados de orientação a objetos, herança e polimorfismo.

Gradle

Utilizado como ferramenta de automação para estruturar o projeto, gerenciar o build e organizar o escopo das pastas de forma limpa.

Controle de Erros e Desafios de Código

Durante o desenvolvimento, o maior foco técnico esteve em garantir que as operações de movimentação monetária não permitissem furos lógicos, como saldos negativos não autorizados ou contas fantasmas.

Desafios Resolvidos

Desafio 1: Modelagem de Domínio e Extensibilidade

Organização de diferentes tipos de carteiras e regras

Problema

O sistema precisava lidar com carteiras comuns de transações (AccountWallet) e carteiras focadas em ativos (InvestmentWallet) sem duplicar regras de saldo básicas herdadas de um modelo comum.

Solução Aplicada

Desenvolvi uma estrutura de herança a partir da classe base 'Wallet', aplicando encapsulamento rígido através de modificadores de acesso protegidos e polimorfismo. Isso permitiu que o 'BankService' processe operações comuns de movimentação financeira independentemente da especialização da carteira.

Desafio 2: Centralização do Fluxo de Erros

Prevenção de estados inconsistentes nas transferências

Problema

Operações financeiras simuladas (como Pix e investimentos) podiam falhar por diversos motivos lógicos, e o programa em console não podia encerrar de forma abrupta por causa de erros de digitação ou saldo insuficiente.

Solução Aplicada

Criei um pacote dedicado de exceções de domínio mapeadas de forma cirúrgica (como 'NoFundsEnoughException', 'AccountNotFoundException' e 'PixInUseException'). A camada de serviço valida todas as pré-condições de saldo e chaves antes de alterar os repositórios, disparando esses erros de forma controlada para serem capturados e exibidos amigavelmente no loop da classe 'Main'.

Conclusão

O desenvolvimento do Java Bank foi uma excelente experiência para entender na prática a importância do encapsulamento e do design de código defensivo. Conseguir estruturar múltiplos repositórios em memória e amarrar toda a lógica através de exceções personalizadas me deu uma base sólida de como construir códigos Java legíveis, organizados e fáceis de estender. Por ser uma aplicação console focada em lógica pura, o resultado cumpriu seu papel didático sem a necessidade de frameworks externos ou telas complexas.