image

Bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Nathan Ferreira
Nathan Ferreira16/10/2025 17:20
Compartilhe

Dominando Java: POO e SQL para Sistemas Reais e Jogos 3D

    1. Introdução: Java, a Linguagem Multiuso e Multifacetada

    Java consolidou-se como a espinha dorsal de inúmeros sistemas corporativos, financeiros e plataformas em nuvem. Sua filosofia “write once, run anywhere” garante portabilidade e robustez, tornando-a uma das linguagens mais influentes da história da computação.

    Durante o segundo período da faculdade, desenvolvi um projeto de Cardápio Digital na disciplina de Programação Orientada a Objetos (POO), aplicando os fundamentos de Java integrados ao SQL para gerenciar dados de forma eficiente e segura. Este artigo apresenta, de forma técnica e prática, como esses mesmos conceitos podem ser aplicados tanto em sistemas comerciais quanto em contextos mais avançados, como o desenvolvimento de jogos 3D com Java e OpenGL.

    2. Fundamentos Sólidos: A Orientação a Objetos em Java

    Abstração e Estrutura: Classes e Objetos

    Java é uma linguagem fortemente orientada a objetos. As classes funcionam como moldes que definem a estrutura e o comportamento das entidades do sistema, como Prato ou Cliente.

    Um objeto é uma instância concreta da classe, armazena estados e executa ações. Essa estrutura organiza o código e separa responsabilidades de forma lógica.

    public class Prato {
      private String nome;
      private double preco;
    
      // Construtor garante que o objeto seja criado em um estado válido
      public Prato(String nome, double preco) {
          if (preco <= 0) throw new IllegalArgumentException("Preço deve ser positivo.");
          this.nome = nome;
          this.preco = preco;
      }
    
      public String getNome() { return nome; }
      public double getPreco() { return preco; }
    
      public String exibirDetalhes() {
          return nome + " (R$ " + String.format("%.2f", preco) + ")";
      }
    }
    

    A Essência da Segurança: Encapsulamento de Dados

    O encapsulamento protege o estado interno dos objetos, expondo apenas o necessário.

    Atributos são private, e o acesso é controlado por métodos públicos (getters e setters).

    Isso evita inconsistências, valida dados e reforça a integridade do sistema.

    3. Persistência de Dados com Java: A Força do JDBC e SQL

    O Contrato de Dados: JDBC (Java Database Connectivity)

    O JDBC é a API padrão do Java para conectar e manipular bancos de dados.

    Ele atua como uma ponte entre a aplicação e o SGBD (MySQL, PostgreSQL, etc.), permitindo enviar comandos SQL e recuperar resultados de forma uniforme.

    Configuração do Banco de Dados MySQL

    Antes de conectar o sistema, é necessário criar o banco e a tabela do cardápio:

    CREATE DATABASE IF NOT EXISTS restaurante;
    USE restaurante;
    
    CREATE TABLE IF NOT EXISTS cardapio (
      id INT AUTO_INCREMENT PRIMARY KEY,
      prato VARCHAR(50) NOT NULL,
      preco DECIMAL(5,2) NOT NULL
    );
    

    Conexão Segura e Performance: O Imperativo do PreparedStatement

    • SQL Injection
    • Statement: Vulnerável, concatena strings e expõe o sistema a injeções.
    • PreparedStatement: Seguro, separa dados da lógica (bind parameters).
    • Performance
    • Statement: Compilado a cada execução.
    • PreparedStatement: Pré-compilado e reutilizado, ideal para operações repetitivas.
    • Uso ideal
    • Statement: Consultas simples e pontuais.
    • PreparedStatement: CRUD e operações dinâmicas.

    Exemplo de Código: Conexão e Inserção Segura

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    public class CadastroPrato {
      private static final String URL = "jdbc:mysql://localhost:3306/restaurante";
      private static final String USER = "root";
      private static final String PASS = "senha";
    
      public static void inserirPrato(String nomePrato, double valor) throws SQLException {
          String sql = "INSERT INTO cardapio (prato, preco) VALUES (?, ?)";
    
          try (Connection conexao = DriverManager.getConnection(URL, USER, PASS);
               PreparedStatement stmt = conexao.prepareStatement(sql)) {
    
              stmt.setString(1, nomePrato);
              stmt.setDouble(2, valor);
              int linhas = stmt.executeUpdate();
              System.out.println(linhas + " registro inserido com sucesso.");
          }
      }
    }
    

    4. Arquitetura Orientada a Serviço: O Sistema de Cardápio Digital

    Padrão MVC: Separando Preocupações

    O padrão Model-View-Controller (MVC) separa funções:

    • Model: dados e lógica de persistência (ex.: Prato, PratoDAO);
    • View: interface que o usuário vê (CLI ou GUI);
    • Controller: coordena ações entre as camadas.

    Isso facilita manutenção e escalabilidade.

    DAO: Data Access Object

    O padrão DAO isola a lógica de acesso ao banco.

    Assim, a aplicação pode trocar o SGBD (MySQL, PostgreSQL, etc.) sem alterar a lógica principal.

    Exemplo de responsabilidades por camada:

    • Model (Entidade): Estrutura de dados (Prato.java)
    • DAO (Acesso): CRUD e conexões (PratoDAO.java)
    • Controller: Lógica da aplicação (CardapioController.java)
    • View: Interface (MenuCLI.java ou CardapioFrame.java)

    Exemplo de Código: Listagem Dinâmica

    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class PratoDAO {
      private static final String URL = "jdbc:mysql://localhost:3306/restaurante";
      private static final String USER = "root";
      private static final String PASS = "senha";
    
      public List<Prato> listarPratos() throws SQLException {
          List<Prato> cardapio = new ArrayList<>();
          String sql = "SELECT prato, preco FROM cardapio ORDER BY preco ASC";
    
          try (Connection conn = DriverManager.getConnection(URL, USER, PASS);
               PreparedStatement stmt = conn.prepareStatement(sql);
               ResultSet rs = stmt.executeQuery()) {
    
              while (rs.next()) {
                  String nome = rs.getString("prato");
                  double preco = rs.getDouble("preco");
                  Prato prato = new Prato(nome, preco);
                  cardapio.add(prato);
              }
          }
          return cardapio;
      }
    }
    

    5. Prática Essencial: Gerenciamento Automático de Recursos

    O Risco do Vazamento de Conexões

    Antes do Java 7, era preciso fechar manualmente Connection, Statement e ResultSet — um processo propenso a erros.

    A Solução do Java 7+: try-with-resources

    O try-with-resources automatiza o fechamento de conexões.

    Todas as classes do JDBC implementam AutoCloseable, garantindo que close() seja chamado automaticamente.

    Essa técnica evita vazamentos, melhora desempenho e aumenta a escalabilidade de aplicações que fazem múltiplas requisições simultâneas.

    6. Java e o Mundo dos Jogos: Onde a POO Encontra o Alto Desempenho

    Reutilização de Conceitos em Engines Gráficas

    Os mesmos princípios usados para modelar um Prato são aplicados a objetos de jogo como Player, Inimigo e Mundo.

    A POO é essencial para modularizar lógicas complexas e manter o código de jogos limpo e escalável.

    LWJGL: Acesso Direto à GPU

    O Lightweight Java Game Library (LWJGL) conecta o Java às APIs nativas como OpenGL, OpenAL e OpenCL.

    Ele fornece acesso direto à GPU, permitindo renderização 3D de alta performance.

    import org.lwjgl.opengl.GL11;
    
    public class JanelaJogo {
      public void renderizar() {
          GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
          // Renderização dos objetos do jogo
      }
    }
    

    7. Conclusão

    Os fundamentos de Java, alicerçados na Orientação a Objetos, transcendem o escopo de aplicações simples, provando ser a base lógica para sistemas de qualquer complexidade.

    Seja na garantia da integridade de dados por meio do Encapsulamento em um objeto Prato, ou na modelagem de entidades complexas em uma engine gráfica, a correta aplicação dos pilares da linguagem é indispensável.

    A precisão arquitetural, manifestada pela separação de responsabilidades no padrão MVC e DAO, e o uso de recursos de segurança e estabilidade, como o PreparedStatement e o try-with-resources, são os diferenciais que elevam o código de teoria para um sistema escalável e robusto.

    Dominar esses conceitos básicos não só oferece a capacidade de criar sistemas comerciais estáveis com persistência em SQL, mas também abre a porta para explorar áreas de alto desempenho, como o desenvolvimento de motores gráficos com bibliotecas como LWJGL, provando a versatilidade duradoura do ecossistema Java.

    Do Cardápio Digital ao Minecraft, o potencial de Java é ilimitado.

    Crie seu próprio projeto Java + SQL e veja como a teoria se transforma em resultado real! 🚀

    8. Referências

    Compartilhe
    Recomendados para você
    Cognizant - Mobile Developer
    Luizalabs - Back-end com Python
    PcD Tech Bradesco - Java & QA Developer
    Comentários (0)