Table of Contents
🤖 Spec Sistemas com Java
"A educação é a arma mais poderosa que você pode usar para mudar o mundo." — Nelson Mandela (Adaptado para Tecnologia)
🧭 Atalhos Rápidos
-
Trilha de Aprendizagem --- Veja o Mapa da Jornada.
-
Slides Interativos --- Acesse as Apreasentações.
-
Quizzes de Revisão --- Teste seus Conhecimentos.
-
Projetos Práticos --- Mão na massa nos Projetos.
-
Exercícios --- Pratique com Desafios.
-
Setups --- Configure seu Ambiente.
🗺️ Mapa da Jornada
O curso está dividido em 4 Módulos Estratégicos projetados para uma progressão cognitiva sólida.
- Módulo 1: Fundamentos e Conceitos Iniciais.
- Módulo 2: Aprofundamento Técnico.
- Módulo 3: Prática e Consolidação.
- Módulo 4: Especialização e Projeto Final.
Plano de Ensino - Desenvolvimento Desktop 📚
Objetivo Geral
Capacitar o estudante a projetar, codificar, depurar e implementar sistemas desktop orientados a objetos, utilizando o padrão MVC e persistência em banco de dados.
📅 Ementa das Aulas
| Aula | Tópico |
|---|---|
| 01 | Introdução ao Desenvolvimento Desktop |
| 02 | Classes, Objetos e Instanciação |
| 03 | Encapsulamento e Construtores |
| 04 | Herança e Polimorfismo |
| 05 | Classes Abstratas e Interfaces |
| 06 | Organização de Projetos e Pacotes |
| 07 | Padrão MVC na Prática |
| 08 | Introdução à Interface Gráfica (GUI) |
| 09 | Componentes Básicos (Label, Text, Button) |
| 10 | Componentes Intermediários e Layouts |
| 11 | Interfaces Avançadas (Abas, Menus, Tabelas) |
| 12 | Introdução a Banco de Dados Relacional |
| 13 | Conexão com Banco de Dados (JDBC) |
| 14 | CRUD e Padrão DAO |
| 15 | Segurança, SQL Injection e Boas Práticas |
| 16 | Projeto Integrador Final |
🛠 Metodologia
- Projetos Práticos Experimentais.
- Exercícios de Fixação.
- Quizzes de Verificação Cognitiva.
Aulas
Aulas do Curso
Bem-vindo à seção de aulas! Aqui você encontra todo o conteúdo do curso organizado por módulos em um formato visual e prático.
-
:material-desktop-mac: Aula 01 — Desktop --- Intro ao Desktop com Java Swing. Iniciar
-
Aula 02 — Classes --- Classes e Objetos: A base da POO. Ver Aula
-
Aula 03 — OO --- Encapsulamento e Modificadores. Ver Aula
-
Aula 04 — Herança --- Herança e Polimorfismo. Ver Aula
-
Aula 05 — Interfaces --- Abstração e Interfaces. Ver Aula
-
Aula 06 — Camadas --- Organização de Código e Camadas. Ver Aula
-
Aula 07 — MVC --- Padrão MVC em Aplicações Desktop. Ver Aula
-
Aula 08 — Swing --- Interface Gráfica com Java Swing. Ver Aula
-
Aula 09 — Listas --- Componentes Básicos de Interface. Ver Aula
-
Aula 10 — Tabelas --- Componentes Intermediários e Tabelas. Ver Aula
-
Aula 11 — Painéis --- Interfaces Avançadas e Painéis. Ver Aula
-
Aula 12 — DB --- Introdução ao Banco de Dados SQLite. Ver Aula
-
:material-database-plug: Aula 13 — SQL --- Conexão com Banco de Dados JDBC. Ver Aula
-
Aula 14 — DAO --- CRUD e Padrão DAO na prática. Ver Aula
-
Aula 15 — Security --- Segurança e Boas Práticas. Ver Aula
-
Aula 16 — Projeto --- Projeto Final Integrador. Finalizar
Aula 01 - Introdução ao Desenvolvimento Desktop 🖥️
Bem-vindo à primeira aula do curso de Desenvolvimento Desktop! Nesta aula, vamos entender o que é o desenvolvimento de aplicações voltadas para o ambiente de desktop e como configurar nosso ambiente.
😊 O que é Software Desktop?
Sistemas desktop são aplicações instaladas diretamente no sistema operacional (Windows, macOS, Linux) de um computador. Diferente das aplicações web, elas rodam localmente e têm acesso direto ao hardware e arquivos do sistema.
Exemplos de Aplicações
- ERP (Enterprise Resource Planning): Sistemas de gestão empresarial.
- PDV (Ponto de Venda): Sistemas de caixa de supermercados e lojas.
- Sistemas Acadêmicos: Para controle de notas e faltas.
- Editores de Imagem/Vídeo: Como Photoshop ou Premiere.
📊 Estrutura de um Projeto
graph TD
A[Projeto Desktop] --> B[Camada de Visão - GUI]
A --> C[Camada de Lógica - Business]
A --> D[Camada de Dados - Persistence]
B --> E[Eventos de Usuário]
C --> F[Regras de Negócio]
D --> G[Banco de Dados]
🧠 Conceitos Importantes
[!NOTE] Compilação: É o processo de transformar o código fonte (escrito em Java, C#, etc.) em um formato que o computador entenda (Bytecode ou Binário).
[!TIP] IDE: Utilizaremos o IntelliJ IDEA ou Eclipse para facilitar o desenvolvimento, depuração e execução dos nossos programas.
💻 Primeiro Programa
Vamos ver como é a estrutura básica de um programa Java executado via terminal.
📝 Exercícios Progressivos
- Básico: Explique a principal diferença entre uma aplicação Web e uma aplicação Desktop.
- Básico: Pesquise e cite 3 softwares desktop que você utiliza no dia a dia.
- Intermediário: O que acontece quando clicamos no botão "Build" ou "Run" em uma IDE?
- Intermediário: Por que sistemas de PDV (caixas de mercado) ainda são majoritariamente desktop?
- Desafio: Crie um diagrama simples (pode ser no papel ou Mermaid) representando a interação entre um usuário e um sistema de login desktop.
🚀 Mini-projeto: Configure o ambiente Java em sua máquina e execute o clássico "Hello World" no terminal.
Aula 02 - Classes, Objetos e Instanciação 🧱
Hoje vamos mergulhar no coração da Programação Orientada a Objetos (POO): as Classes e os Objetos.
😊 Conceito de Classe e Objeto
Imagine que uma Classe é uma planta de uma casa. Ela define onde ficam as janelas, o tamanho dos quartos, etc. O Objeto é a casa construída a partir dessa planta.
- Classe: O molde/modelo.
- Objeto: A instância real do modelo.
Atributos e Métodos
- Atributos: Características do objeto (ex: cor, peso, preço).
- Métodos: Ações que o objeto pode realizar (ex: acelerar, salvar, calcular).
📊 Modelagem de Produto
classDiagram
class Produto {
+String nome
+double preco
+int quantidade
+exibirDetalhes()
+aplicarDesconto(porcentagem)
}
🧠 Exemplo Prático de Instanciação
[!IMPORTANT] A palavra-chave
newé utilizada para criar (instanciar) um novo objeto a partir de uma classe.
// Criando o objeto
Produto p1 = new Produto();
p1.nome = "Teclado Mecânico";
p1.preco = 250.00;
// Chamando um método
p1.exibirDetalhes();
📝 Exercícios Progressivos
- Básico: Defina com suas palavras o que é uma Classe.
- Básico: Diferencie Atributo de Método.
- Intermediário: Crie uma modelagem simples (Lista de atributos e métodos) para uma classe
Cliente. - Intermediário: Se tivermos a classe
Cachorro, cite 3 possíveis atributos e 2 métodos. - Desafio: Desenhe um diagrama Mermaid para uma classe
ContaBancariacom atributos comosaldoe métodos comodepositaresacar.
🚀 Mini-projeto: Crie uma classe Produto no Java e instancie dois objetos diferentes (ex: Mouse e Monitor), atribuindo valores distintos a eles.
Aula 03 - Encapsulamento e Construtores 🔒
Nesta aula, vamos aprender como proteger nossos dados e como inicializar nossos objetos de forma correta.
😊 Encapsulamento
Encapsulamento é a técnica de esconder os detalhes internos de uma classe e fornecer uma interface segura para interagir com ela. É como um controle remoto: você sabe quais botões apertar, mas não precisa saber como o circuito interno funciona.
Modificadores de Acesso
public: Acesso total.private: Acesso restrito à própria classe.protected: Acesso às subclasses.
Getters e Setters
São métodos utilizados para ler (get) e modificar (set) atributos privados.
📊 Estrutura de Encapsulamento
graph LR
User[Usuário/Outra Classe] -- Getter/Setter --> Interface[Métodos Públicos]
Interface -- Acessa --> Data[Atributos Privados]
🧠 Construtores
Um Construtor é um método especial chamado no momento da criação do objeto. Ele serve para garantir que o objeto comece com valores válidos.
[!CAUTION] Se você não definir nenhum construtor, o Java criará um padrão (vazio). Mas se você criar um, o padrão deixará de existir.
public class Cliente {
private String nome;
// Construtor
public Cliente(String nome) {
this.nome = nome;
}
}
💻 Exemplo no Terminal
📝 Exercícios Progressivos
- Básico: Para que serve o modificador
private? - Básico: Qual a função de um método "Setter"?
- Intermediário: Por que não devemos deixar todos os atributos como
public? - Intermediário: O que é a palavra-chave
thisdentro de um construtor? - Desafio: Crie uma classe
Funcionariocom atributosalarioprivado. Crie um setter que só aceite valores positivos.
🚀 Mini-projeto: Implemente a classe ContaBancaria com encapsulamento total e um construtor que peça o nome do titular e o saldo inicial.
Aula 04 - Herança e Polimorfismo 🧬
Hoje exploraremos dois pilares poderosos da POO que permitem o reuso de código e a flexibilidade do sistema.
😊 Herança
A herança permite que uma classe (Filha ou Subclasse) herde atributos e métodos de outra classe (Pai ou Superclasse).
Vantagem: Evita repetição de código (DRY - Don't Repeat Yourself).
Exemplo de Hierarquia:
- Pessoa (Pai)
- Cliente (Filho)
- Funcionário (Filho)
📊 Diagrama de Herança
classDiagram
Pessoa <-- Cliente
Pessoa <-- Funcionario
class Pessoa {
+String nome
+String cpf
}
class Cliente {
+double limiteCredito
}
class Funcionario {
+double salario
}
🧠 Polimorfismo
Polimorfismo significa "muitas formas". É a capacidade de um objeto ser tratado como sua superclasse, mas se comportar de acordo com sua classe real.
[!IMPORTANT] A Sobre-escrita (@Override) é essencial para o polimorfismo, permitindo que o filho personalize um comportamento herdado do pai.
📝 Exercícios Progressivos
- Básico: Na frase "Todo Carro é um Veículo", quem é a Superclasse?
- Básico: O que significa a anotação
@Override? - Intermediário: Explique a diferença entre Herança e Composição (brevíssimo).
- Intermediário: Crie uma hierarquia entre
Animal,CachorroeGato. Qual método seria sobre-escrito? - Desafio: No sistema de um banco, por que é útil tratar
ContaCorrenteeContaPoupancaapenas comoContaem um loop de processamento?
🚀 Mini-projeto: Crie uma classe Pessoa e duas subclasses. Implemente um método apresentar() na classe pai e mude o comportamento nas classes filhas usando @Override.
Aula 05 - Classes Abstratas e Interfaces 🧩
Hoje vamos aprender como definir contratos e modelos incompletos para garantir a fluidez da nossa arquitetura.
😊 Classes Abstratas
Uma Classe Abstrata é uma classe que não pode ser instanciada diretamente. Ela serve apenas como um "rascunho" ou base para outras classes.
- Pode conter métodos com corpo (comuns).
- Pode conter métodos sem corpo (abstratos), que obrigam os filhos a implementarem.
📊 Exemplo: Forma Geométrica
classDiagram
Forma <|-- Circulo
Forma <|-- Quadrado
class Forma {
<<abstract>>
+String cor
+calcularArea()*
}
🧠 Interfaces
Uma Interface é um "contrato". Ela define o que uma classe deve fazer, mas não como fazer.
[!TIP] Use Interfaces quando quiser definir um comportamento comum a classes que não pertencem necessariamente à mesma hierarquia (ex:
Autenticavel).
🧠 Glossário Rápido
[!NOTE] Extends: Usado para herança (Classes). Implements: Usado para contratos (Interfaces).
📝 Exercícios Progressivos
- Básico: Posso criar um objeto de uma classe abstrata (
new ClasseAbstrata())? - Básico: Quantas interfaces uma classe Java pode implementar?
- Intermediário: Qual a principal diferença entre uma Classe Abstrata e uma Interface?
- Intermediário: Se eu tenho a interface
Voadorcom o métodovoar(), o que acontece se eu esquecer de implementar esse método na classePassaro? - Desafio: Crie um diagrama Mermaid para um sistema de pagamentos (
Pagamentoabstrato,CartaoeBoletocomo filhos).
🚀 Mini-projeto: Crie a classe abstrata Funcionario com o método abstrato calcularBonus(). Implemente as classes Gerente e Operador com cálculos diferentes.
Aula 06 - Organização de Projetos 📂
À medida que o software cresce, a organização se torna fundamental. Hoje vamos aprender como estruturar pastas e pacotes.
😊 Pacotes (Packages)
Pacotes são como pastas que organizam classes relacionadas. Eles evitam conflitos de nomes e facilitam a manutenção.
Convenção: com.empresa.projeto.modulo
📊 Estrutura de Camadas
Um sistema bem projetado deve ser separado em responsabilidades:
graph TD
UI[View - Interface] --> Logic[Controller - Lógica]
Logic --> Data[Model - Dados]
Data --> DB[(Banco de Dados)]
Por que separar em camadas?
- Manutenibilidade: Fácil de encontrar erros.
- Reuso: Posso trocar a interface sem mexer no banco.
- Trabalho em Equipe: Várias pessoas podem mexer em partes diferentes ao mesmo tempo.
🧠 Introdução ao Padrão MVC
- Model: Representa os dados e regras de negócio.
- View: O que o usuário vê (telas).
- Controller: O intermediário que recebe comandos da View e atualiza o Model.
💻 Estrutura de Pastas Sugerida
├── src
│ ├── model # Classes de dados
│ ├── view # Telas (Swing/JavaFX)
│ ├── controller # Lógica de controle
│ └── util # Funções auxiliares
📝 Exercícios Progressivos
- Básico: Por que usamos pacotes em Java?
- Básico: Qual a função da camada
Modelno MVC? - Intermediário: O que acontece se misturarmos código de banco de dados dentro de um botão da tela?
- Intermediário: Cite uma vantagem da separação de responsabilidades.
- Desafio: Organize as classes
Cliente,ClienteControllereTelaClienteem uma estrutura de pastas lógica.
🚀 Mini-projeto: Crie um novo projeto no seu IDE e estruture os pacotes model, view e controller. Mova as classes criadas nas aulas anteriores para os pacotes corretos.
Aula 07 - Padrão MVC na Prática 🏗️
Nesta aula, vamos aprender a separar as responsabilidades do nosso sistema de forma profissional utilizando o padrão MVC (Model-View-Controller).
😊 O que é MVC?
O MVC é um padrão de arquitetura que divide a aplicação em três componentes principais:
- Model (Modelo): Onde os dados vivem. Não conhece a interface nem o banco diretamente.
- View (Visão): A cara do sistema. Botões, campos de texto e janelas.
- Controller (Controle): O cérebro. Escuta os eventos da View e manda o Model agir.
📊 Fluxo de Dados no MVC
sequenceDiagram
participant User
participant View
participant Controller
participant Model
User->>View: Clica no botão "Salvar"
View->>Controller: enviaDados(form)
Controller->>Model: criar(objeto)
Model-->>Controller: Confirmação
Controller-->>View: atualizarTabela()
View-->>User: Mensagem "Sucesso!"
🧠 Separação de Responsabilidades
[!IMPORTANT] A regra de ouro é: A View nunca deve conter lógica de negócio (cálculos, validações complexas, acesso a dados). Ela deve apenas repassar o que o usuário quer para o Controller.
💻 Refatoração para MVC
Imagine que tínhamos tudo em um único arquivo. Agora separamos:
model/ # Produto.java
view/ # Principal.java (JFrame)
📝 Exercícios Progressivos
- Básico: Relacione as siglas: M - __, V - _, C - ___.
- Básico: Por que o Controller é chamado de "intermediário"?
- Intermediário: Se eu quiser mudar a cor de um botão, em qual camada devo mexer?
- Intermediário: Se eu mudar a fórmula de cálculo de imposto de um produto, em qual camada devo mexer?
- Desafio: Descreva o que acontece no MVC quando um usuário solicita a exclusão de um registro em uma tabela.
🚀 Mini-projeto: Refatore o mini-projeto da aula anterior (Produto) para que ele utilize o padrão MVC. O Controller deve ser responsável por imprimir os detalhes no console após a ação da "View" (que por enquanto será um método main).
Aula 08 - Introdução à Interface Gráfica (GUI) 🎨
Chegou a hora de dar "cara" aos nossos sistemas! Vamos sair do terminal e entrar nas janelas.
😊 O que é GUI?
GUI (Graphical User Interface) permite que os usuários interajam com o software através de elementos visuais como ícones, botões e janelas, em vez de apenas texto.
Componentes de uma Janela
- JFrame: A moldura (janela principal).
- JPanel: Uma área dentro da janela para organizar itens.
- JButton: Botões de ação.
- Layouts: Regras que definem onde cada coisa fica.
📊 Ciclo de Eventos
Diferente do terminal (sequencial), uma GUI é baseada em Eventos.
graph LR
Wait[Aguardando Ação] -- Clique --> Listener[Listener de Evento]
Listener -- Dispara --> Action[Lógica do Sistema]
Action -- Atualiza --> UI[Interface Visual]
UI --> Wait
🧠 Tratamento de Eventos (Listeners)
[!NOTE] Um ActionListener é um objeto que "fica ouvindo" se um clique aconteceu em um botão. Quando o clique ocorre, ele executa um código específico.
💻 Minha Primeira Janela
JFrame janela = new JFrame("Meu Sistema");
janela.setSize(400, 300);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setVisible(true);
🧠 Dica de Design
[!TIP] Use nomes claros para seus botões e componentes. Em vez de
jButton1, usebtnSalvaroubtnSair. Isso facilita muito a leitura do código no futuro.
📝 Exercícios Progressivos
- Básico: O que significa a sigla GUI?
- Básico: Qual a função do
JFrame? - Intermediário: Para que serve o método
setDefaultCloseOperation? O que acontece se não usarmos? - Intermediário: Explique o conceito de "Event-Driven Programming" (Programação Orientada a Eventos).
- Desafio: Desenhe (ou use Mermaid) a estrutura de uma janela que contenha 3 botões (Incluir, Alterar, Excluir).
🚀 Mini-projeto: Crie uma janela simples em Java que, ao ser clicada em um botão, exiba uma mensagem de "Olá!" usando JOptionPane.
Aula 09 - Componentes Básicos 🏗️
Nesta aula, vamos conhecer os "tijolos" fundamentais para construir qualquer formulário desktop.
😊 Componentes de Texto e Ação
- JLabel: Usado para exibir textos informativos ou instruções (ex: "Nome:", "Senha:").
- JTextField: Campo de uma única linha para o usuário digitar informações.
- JButton: O botão clássico para disparar ações.
- JOptionPane: Caixas de diálogo prontas para avisos ou perguntas rápidas.
📊 Estrutura de um Componente
graph LR
Comp[Componente] --> Attr[Atributos: Cor, Fonte, Tamanho]
Comp --> Event[Eventos: Clique, Tecla Pressionada]
Comp --> Pos[Posição: X, Y]
🧠 Tratamento de Eventos (Prática)
[!IMPORTANT] Para capturar o texto digitado em um
JTextField, usamos o método.getText(). Para limpar o campo, usamos.setText("").
String nome = txtNome.getText();
if(nome.isEmpty()) {
JOptionPane.showMessageDialog(null, "Digite seu nome!");
}
🧠 Dica de UX
[!TIP] Feedback Visual: Sempre que uma ação for concluída (ou falhar), avise o usuário. Um
JOptionPaneé a forma mais simples de fazer isso.
📝 Exercícios Progressivos
- Básico: Qual a diferença entre um
JLabele umJTextField? - Básico: Como exibimos uma mensagem de erro na tela?
- Intermediário: Qual método é usado para pegar o texto de um campo de entrada?
- Intermediário: Por que devemos validar se um campo está vazio antes de processar os dados?
- Desafio: Escreva o código (ou lógica) para um botão que pegue dois números de dois
JTextField, some-os e exiba o resultado em umJOptionPane.
🚀 Mini-projeto: Crie um formulário de login simples com: Dois JLabel, um JTextField (usuário), um JPasswordField (senha) e um JButton. Ao clicar, verifique se usuário e senha são iguais a "admin".
Aula 10 - Componentes Intermediários 🎛️
Hoje vamos aprender a usar componentes de seleção e como organizar tudo isso de forma bonita usando Layouts.
😊 Componentes de Seleção
- JCheckBox: Permite selecionar múltiplas opções (ex: Interesses, Habilidades).
- JRadioButton: Permite selecionar apenas uma opção de um grupo (ex: Sexo, Estado Civil).
- Nota: Precisam de um
ButtonGrouppara funcionar corretamente.
- Nota: Precisam de um
- JComboBox: Uma lista suspensa (dropdown) para economizar espaço em tela.
📊 Organização com Layouts
Colocar componentes em posições fixas (X, Y) é perigoso porque a janela pode ser redimensionada. Por isso usamos Layout Managers:
| Layout | Descrição |
|---|---|
| FlowLayout | Itens em linha, um após o outro. |
| BorderLayout | Divide em Norte, Sul, Leste, Oeste e Centro. |
| GridLayout | Divide em uma grade de linhas e colunas iguais. |
graph TD
Container[JPanel/JFrame] --> Layout[Layout Manager]
Layout --> C1[Componente 1]
Layout --> C2[Componente 2]
Layout --> C3[Componente 3]
🧠 Dica de Organização
[!NOTE] Use JPanels como sub-containers. Você pode ter um painel com
GridLayoutpara o formulário e outro painel comFlowLayoutapenas para os botões na parte de baixo.
📝 Exercícios Progressivos
- Básico: Qual componente usar para "Termos de Aceite" (onde o usuário marca se concorda)?
- Básico: Qual a diferença entre
JCheckBoxeJRadioButton? - Intermediário: Qual
Layout Managervocê usaria para criar uma calculadora (teclado numérico)? - Intermediário: O que acontece se você não adicionar
JRadioButtonsa umButtonGroup? - Desafio: Desenhe a estrutura (usando blocos) de uma tela de cadastro que use
BorderLayoutpara separar o Título (Norte), Campos (Centro) e Botões (Sul).
🚀 Mini-projeto: Crie uma tela de "Escolha seu Plano" com 3 JRadioButton (Prata, Ouro, VIP) e um JComboBox com as cidades de atendimento. Exiba a escolha do usuário ao clicar em um botão.
Aula 11 - Interfaces Avançadas 📑
Hoje vamos aprender a organizar grandes volumes de informação usando abas, menus e tabelas profissionais.
😊 Componentes de Organização
- JTabbedPane: Cria abas, permitindo separar diferentes formulários ou relatórios em uma mesma janela.
- JMenuBar / JMenu / JMenuItem: Cria a barra de menus no topo da janela (Arquivos, Editar, Ajuda).
- JTable: O componente mais importante para sistemas de gestão. Exibe dados em formato de planilha.
📊 Estrutura de uma JTable
A JTable funciona através de um Model (normalmente DefaultTableModel).
graph TD
Data[Lista de Objetos] --> Model[DefaultTableModel]
Model --> UI[JTable Visual]
UI -- Clique na Linha --> RowData[Dados da Linha]
🧠 Validação e UX (User Experience)
[!IMPORTANT] Validação de Formulários: Antes de adicionar dados à tabela ou ao banco, verifique se os tipos estão corretos (ex: se o preço é realmente um número).
try {
double preco = Double.parseDouble(txtPreco.getText());
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Preço inválido!");
}
🧠 Dica de Carreira
[!TIP] Sistemas desktop modernos dão muita importância às tabelas. Aprender a filtrar, ordenar e colorir linhas de uma
JTableé um diferencial enorme.
📝 Exercícios Progressivos
- Básico: Quando devemos usar abas (
JTabbedPane) em um sistema? - Básico: Qual a diferença entre
JMenueJMenuItem? - Intermediário: Por que usamos um
TableModelem vez de colocar os dados direto naJTable? - Intermediário: Como podemos impedir que o usuário digite letras em um campo de "Idade"?
- Desafio: Desenhe (ou descreva) o menu principal de um "Sistema de Biblioteca", contendo as opções de Cadastro, Movimentação e Relatórios.
🚀 Mini-projeto: Crie uma tela com duas abas: "Cadastro" (com campos de texto) e "Listagem" (com uma JTable). Ao clicar em salvar na primeira aba, os dados devem aparecer na tabela da segunda aba.
Aula 12 - Introdução a Banco de Dados 🗄️
Nesta aula, iniciamos nossa jornada na persistência de dados. O que acontece com os dados quando fechamos o programa?
😊 Banco de Dados Relacional
Um banco de dados relacional (como MySQL, SQL Server ou SQLite) organiza os dados em tabelas que se relacionam entre si.
Conceitos Básicos:
- Tabela: Conjunto de registros de um mesmo tipo (ex: Cliente).
- Registro (Linha): Uma instância de dado (ex: João Santos).
- Coluna (Campo): Uma característica (ex: Nome, CPF).
- Chave Primária (PK): O identificador único de um registro.
📊 Modelagem Simples
erDiagram
PRODUTO {
int id PK
string nome
double preco
int estoque
}
🧠 Linguagem SQL
Para conversar com o banco, usamos o SQL (Structured Query Language).
[!NOTE] CREATE TABLE: Cria a estrutura. INSERT: Adiciona dados. SELECT: Recupera dados.
💻 Comandos Básicos
sqlite> INSERT INTO produto (nome, preco) VALUES ('Mouse', 50.0);
sqlite> SELECT * FROM produto;
1|Mouse|50.0
📝 Exercícios Progressivos
- Básico: O que significa a sigla SQL?
- Básico: Para que serve a "Chave Primária" (Primary Key)?
- Intermediário: Qual a diferença entre um Banco de Dados e uma Planilha de Excel?
- Intermediário: Escreva o comando SQL para inserir um cliente chamado "Maria" com o CPF "123.456.789-00".
- Desafio: Modele uma tabela
Funcionariocom pelo menos 5 colunas e defina os tipos de dados ideais para cada uma.
🚀 Mini-projeto: Instale o SQLite Browser (ou use o terminal) e crie sua primeira tabela de Produtos com 3 registros iniciais.
Aula 13 - Conexão com Banco de Dados 🔌
Nesta aula, aprenderemos como fazer o Java "conversar" com o Banco de Dados através do Driver JDBC.
😊 O que é JDBC?
JDBC (Java Database Connectivity) é um conjunto de classes e interfaces que permite que aplicações Java se conectem a diversos bancos de dados (MySQL, SQLite, PostgreSQL, etc) usando uma linguagem comum.
O Papel do Driver
O Driver é como um tradutor. Cada banco de dados tem o seu próprio driver.
📊 Estrutura de Conexão
graph LR
App[Aplicação Java] -- JDBC API --> Driver[Driver JDBC]
Driver -- Protocolo Nativo --> DB[(Banco de Dados)]
🧠 Testando a Conexão
Para conectar, precisamos de uma URL de Conexão. No caso do SQLite, ela aponta para um arquivo local.
[!IMPORTANT] Sempre feche a conexão (
connection.close()) quando terminar de usá-la para não desperdiçar memória do sistema.
String url = "jdbc:sqlite:meubanco.db";
try (Connection conn = DriverManager.getConnection(url)) {
if (conn != null) {
System.out.println("Conectado com sucesso!");
}
} catch (SQLException e) {
System.out.println("Erro ao conectar: " + e.getMessage());
}
🧠 Dica de Segurança
[!CAUTION] Nunca deixe a senha do seu banco de dados escrita diretamente no código fonte (Hardcoded). Use arquivos de configuração ou variáveis de ambiente.
📝 Exercícios Progressivos
- Básico: Para que serve o JDBC?
- Básico: O que acontece se tentarmos conectar ao banco sem o "Driver" instalado?
- Intermediário: Por que usamos o bloco
try-catchao realizar uma conexão? - Intermediário: Qual a diferença entre uma conexão com SQLite (local) e MySQL (servidor) em termos de URL?
- Desafio: Desenhe um diagrama de sequência mostrando a aplicação pedindo uma conexão ao
DriverManager.
🚀 Mini-projeto: Crie uma classe ConexaoBanco com um método estático que retorne uma Connection ativa para o seu banco SQLite.
Aula 14 - CRUD e DAO 💾
Hoje aprenderemos o padrão mais utilizado no mercado para persistência de dados: o DAO.
😊 O que é DAO?
DAO (Data Access Object) é um padrão de projeto que isola todo o código de acesso ao banco de dados em classes específicas. Isso mantém o restante do sistema (Controller e Model) limpo e focado em suas próprias tarefas.
O que é CRUD?
É o acrônimo para as quatro operações básicas em um banco de dados: * Create (INSERT) * Read (SELECT) * Update (UPDATE) * Delete (DELETE)
📊 Camada DAO no Sistema
graph TD
UI[View] --> Ctrl[Controller]
Ctrl --> DAO[ProdutoDAO]
DAO --> DB[(Banco de Dados)]
DAO -- Retorna List/Object --> Ctrl
🧠 Exemplo de DAO (Insert)
[!IMPORTANT] Ao usar o DAO, o Controller não sabe qual SQL está sendo executado. Ele apenas pede:
dao.salvar(produto).
public void salvar(Produto p) {
String sql = "INSERT INTO produto (nome, preco) VALUES (?, ?)";
// Código para executar...
}
📝 Exercícios Progressivos
- Básico: O que significa a sigla CRUD?
- Básico: Qual a principal vantagem do padrão DAO?
- Intermediário: Por que passamos um objeto (ex:
Produto) para o método do DAO em vez de passar os atributos soltos? - Intermediário: Em qual camada do MVC o DAO deve ser chamado?
- Desafio: Descreva as 4 assinaturas de métodos (nome e parâmetros) que uma classe
ClienteDAOdeveria ter para um CRUD completo.
🚀 Mini-projeto: Crie a classe ProdutoDAO e implemente o método salvar. Teste inserindo um produto através do seu código Java e verifique no banco de dados.
Aula 15 - Segurança e Boas Práticas 🛡️
Na penúltima aula, vamos aprender como proteger nosso sistema contra ataques e como escrever um código profissional e limpo.
😊 Prevenção contra SQL Injection
O SQL Injection é um dos ataques mais comuns, onde um usuário mal-intencionado tenta "injetar" comandos SQL através de campos de formulário.
[!IMPORTANT] A SOLUÇÃO: Nunca concatene strings para montar seu SQL. Use sempre o PreparedStatement.
// ERRADO (Vulnerável)
String sql = "SELECT * FROM usuario WHERE login = '" + login + "'";
// CORRETO (Seguro)
String sql = "SELECT * FROM usuario WHERE login = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, login);
📊 Tratamento de Exceções Profissional
Não basta apenas imprimir o erro. Devemos registrar o que aconteceu para poder consertar depois.
graph LR
Error[Erro no Sistema] --> Log[Arquivo de Log]
Error --> UserMsg[Mensagem Amigável ao Usuário]
Log --> Dev[Desenvolvedor Analisa]
🧠 Boas Práticas (Refatoração)
[!TIP] DRY (Don't Repeat Yourself): Se você está repetindo o mesmo código de conexão em todas as telas, crie uma classe
ConexaoBancoe reutilize-a.
💻 Depuração (Debug)
Aprender a usar o Debug da IDE (colocar Breakpoints) economiza horas de trabalho. Em vez de adivinhar o que está errado, você vê o valor das variáveis em tempo real.
📝 Exercícios Progressivos
- Básico: O que é SQL Injection?
- Básico: Por que não devemos mostrar a "Exception" técnica completa para o usuário final?
- Intermediário: Qual a função do
PreparedStatementna segurança? - Intermediário: O que são "Logs" e por que são importantes em sistemas desktop?
- Desafio: Escreva um pequeno trecho de código que trate uma
SQLExceptione exiba uma mensagem amigável: "Houve um problema ao conectar com o servidor. Tente novamente mais tarde."
🚀 Mini-projeto: Refatore seu ProdutoDAO para que todos os métodos utilizem PreparedStatement e tenham tratamento de erro com try-catch.
Aula 16 - Projeto Integrador 🚀
Parabéns por chegar até aqui! Agora é hora de colocar todo o conhecimento em prática construindo um sistema completo.
😊 O Desafio Final
Você deve desenvolver um sistema desktop funcional seguindo todos os padrões aprendidos: POO + MVC + GUI + Banco de Dados (DAO).
Sugestões de Temas:
- Controle de Vendas: Cadastro de produtos e registro de vendas simples.
- Biblioteca Pessoal: Cadastro de livros e controle de empréstimos.
- Controle de Tarefas (To-do): Lista de tarefas com prioridade e status.
- Gestão de Pets: Cadastro de animais de estimação e histórico de consultas.
📊 Requisitos do Projeto
O projeto será avaliado seguindo estes critérios:
mindmap
root((Projeto Final))
Arquitetura
Padrao MVC
Padrao DAO
Interface GUI
Menus e Abas
Tabelas Funcionais
Validacao de Dados
Banco de Dados
Conexao JDBC
CRUD Completo
Codigo
Boas Praticas
Comentarios em PT-BR
🧠 Checklist de Entrega
- Banco de Dados criado (arquivo
.db). - Telas de Cadastro e Listagem funcionando.
- Operações de Alterar e Excluir implementadas.
- Código organizado em pacotes (
model,view,controller,dao). - Sem erros de execução (Exceptions tratadas).
📝 Documentação Exigida
[!NOTE] Escreva um pequeno arquivo
README.mdpara o seu projeto explicando: 1. O que o sistema faz. 2. Como executá-lo. 3. Quais tecnologias utilizou.
🚀 Mini-projeto: Inicie o desenvolvimento do seu sistema. Comece pela modelagem do banco de dados e pela criação das classes de modelo Java.
Boa sorte e bom trabalho! Você está pronto para o mercado desktop! 🖥️🎓
Exercícios
Exercícios Integrados 📝
Pratique os conceitos aprendidos em aula com exercícios práticos e desafios de codificação.
-
Módulo 1: Fundamentos OO ---
-
Módulo 2: Arquitetura ---
-
Módulo 3: Interfaces (GUI) ---
-
Módulo 4: Persistência ---
Exercícios - Aula 01 📝
🟢 Básicos
- Cite duas vantagens de softwares desktop em relação a sistemas puramente web (ex: acesso offline).
- O que é uma IDE e cite o nome de uma muito utilizada para Java.
🟡 Intermediários
- Descreva o papel do "Bytecode" no ecossistema Java e como ele se relaciona com a compilação.
- Por que a instalação direta no sistema operacional permite que aplicações desktop tenham melhor desempenho em tarefas pesadas (como edição de vídeo)?
🔴 Desafio
- Imagine que você vai desenvolver um sistema para um Supermercado que não tem internet estável. Crie uma pequena justificativa técnica (em 5 linhas) explicando por que a arquitetura Desktop é a ideal para este cenário.
Exercícios - Aula 02 📝
🟢 Básicos
- Qual a diferença prática entre uma Classe e um Objeto? Use uma metáfora diferente da "planta da casa".
- No código Java, qual a palavra-chave utilizada para criar uma instância de um objeto?
🟡 Intermediários
- Se você criar uma classe
Livrocom os atributostituloeautor, escreva como você instanciaria dois livros diferentes. - O que acontece na memória do computador quando executamos o comando
new MinhaClasse()?
🔴 Desafio
- Modele uma classe
Computadorcom 4 atributos (ex: marca, ram) e 2 métodos (ex: ligar, desligar). Represente isso através de um diagrama MermaidclassDiagram.
Exercícios - Aula 03 📝
🟢 Básicos
- Qual a diferença entre os modificadores
publiceprivate? - Para que serve um método construtor em Java?
🟡 Intermediários
- Por que é considerado uma "má prática" deixar os atributos de uma classe como
public? - Explique o uso da palavra-chave
thisdentro de um método ou construtor.
🔴 Desafio
- Crie uma classe
Contacom o atributosaldoprivado. Implemente um métodosacar(double valor)que verifique se o saldo é suficiente antes de realizar a operação. Se não for, exiba uma mensagem de erro.
Exercícios - Aula 04 📝
🟢 Básicos
- Qual a palavra-chave utilizada em Java para indicar que uma classe herda de outra?
- O que acontece se uma classe filha tentar acessar um atributo
privateda classe pai?
🟡 Intermediários
- Explique a diferença entre a "Superclasse" e a "Subclasse".
- Por que usamos a anotação
@Override? O que acontece se o nome do método for digitado errado?
🔴 Desafio
- Imagine um sistema de e-commerce. Crie uma hierarquia de classes para
Produto,Livro(tem autor e páginas) eEletronico(tem voltagem). Use Mermaid para o diagrama.
Exercícios - Aula 05 📝
🟢 Básicos
- Qual a principal diferença entre uma Classe Comum e uma Classe Abstrata?
- Como se chama op processo de uma classe "cumprir" os métodos definidos em uma Interface?
🟡 Intermediários
- Por que dizemos que uma Interface é um "contrato"?
- Uma classe pode herdar de uma classe abstrata e implementar duas interfaces ao mesmo tempo? Explique.
🔴 Desafio
- Projete a interface
Autenticavelcom o métodoautenticar(String login, String senha). Crie a classeUsuarioque implementa essa interface.
Exercícios - Aula 06 📝
🟢 Básicos
- Qual a regra de ouro para nomear pacotes (packages) em Java?
- O que acontece se tivermos duas classes com o mesmo nome em pacotes diferentes?
🟡 Intermediários
- Explique a importância da separação de responsabilidades (camadas).
- O que o comando
importfaz no topo do arquivo Java?
🔴 Desafio
- Desenhe a estrutura de pastas de um projeto chamado "SistEscola" que contenha as camadas de
view,modelecontroller.
Exercícios - Aula 07 📝
🟢 Básicos
- Identifique os papéis: Quem recebe o clique do botão? Quem salva no banco? Quem guarda o nome do produto? (MVC)
- Por que a View não deve ter código de conexão com o banco de dados?
🟡 Intermediários
- Descreva o caminho que a informação percorre no MVC quando um usuário clica para "Listar Produtos".
- Qual o perigo de ter uma "Fat View" (Visão gorda, com muita lógica)?
🔴 Desafio
- Refatore mentalmente um código onde o
JButtonfaz umINSERTdireto no banco. Como você dividiria isso em 3 classes (Produto, ProdutoController, TelaProduto)?
Exercícios - Aula 08 📝
🟢 Básicos
- Qual a função principal do
JFrameem uma aplicação Swing? - Cite 3 componentes visuais que podem ser adicionados a uma janela.
🟡 Intermediários
- Explique por que a programação de interface gráfica é chamada de "Orientada a Eventos".
- O que acontece com o processo do Java quando fechamos uma janela (
JFrame) se não configurarmos osetDefaultCloseOperation?
🔴 Desafio
- Desenhe (ou descreva) o ciclo de vida de um clique em um botão: desde a ação física do usuário até a execução do método no Java.
Exercícios - Aula 09 📝
🟢 Básicos
- Identifique o componente: Qual exibe texto fixo e qual permite que o usuário digite seu e-mail?
- Para que serve o método
.getText()?
🟡 Intermediários
- Como você faria para limpar todos os campos de um formulário após o usuário clicar em "Cancelar"?
- Explique a diferença entre
JTextFieldeJPasswordField. Qual deles é mais seguro para senhas e por quê?
🔴 Desafio
- Escreva um pequeno trecho de lógica que verifique se o campo "Idade" está vazio ou contém um valor negativo. Exiba um aviso caso ocorra.
Exercícios - Aula 10 📝
🟢 Básicos
- Qual componente você usaria para uma pergunta de "Sim/Não" independente?
- Por que usar
Layout Managersem vez de coordenadas fixas (X, Y)?
🟡 Intermediários
- Descreva a diferença entre
FlowLayouteGridLayout. - Como você garantiria que apenas um dos 4
JRadioButtonsde uma pergunta fosse selecionado?
🔴 Desafio
- Projete a estrutura de uma calculadora simples (0-9, +, -, =) usando
BorderLayoutpara o visor eGridLayoutpara os botões.
Exercícios - Aula 11 📝
🟢 Básicos
- Em quais ocasiões é melhor usar
JTabbedPaneem vez de criar várias janelas independentes? - Qual a relação entre uma
JTablee umTableModel?
🟡 Intermediários
- Como você faria para capturar qual linha o usuário clicou em uma
JTable? - Escreva uma breve explicação sobre como o bloco
try-catchajuda no tratamento de erros de conversão de dados (ex: converter texto em número).
🔴 Desafio
- Projete (diagrama ou texto) a barra de menu de um software de "Controle Hospitalar". Quais menus e submenus seriam essenciais?
Exercícios - Aula 12 📝
🟢 Básicos
- Qual a diferença entre uma "Tabela" e um "Registro" em um banco de dados?
- Para que serve o comando
SELECTem SQL?
🟡 Intermediários
- Escreva o comando SQL para criar uma tabela chamada
clientecom as colunasid(chave primária),nome(texto) eemail(texto). - Explique por que não é recomendado guardar senhas de usuários em texto limpo (sem criptografia) no banco de dados.
🔴 Desafio
- Modele um banco de dados para uma "Livraria" com duas tabelas:
LivroeAutor. Como você faria para ligar um livro a um autor?
Exercícios - Aula 13 📝
🟢 Básicos
- Qual a função do "Driver JDBC"?
- O que significa a sigla JDBC?
🟡 Intermediários
- Descreva o que acontece se esquecermos de fechar uma conexão com o banco de dados (
conn.close()). - Qual a diferença entre a URL de conexão do SQLite e a do MySQL?
🔴 Desafio
- Crie uma classe
DatabaseAdminque tenha um método para testar se o arquivo do banco de dados existe antes de tentar a conexão JDBC.
Exercícios - Aula 14 📝
🟢 Básicos
- Explique o que significa cada letra da sigla CRUD.
- Qual o objetivo principal de criar uma classe DAO?
🟡 Intermediários
- Imagine um método
excluir(int id)no DAO. Escreva o comando SQL que seria usado dentro dele. - Por que o Controller não deve conter comandos SQL como
INSERTouSELECT?
🔴 Desafio
- Projete a classe
FuncionarioDAO. Quais métodos ela deveria ter e quais seriam os parâmetros de cada um?
Exercícios - Aula 15 📝
🟢 Básicos
- Explique por que a concatenação de strings em SQL (
"WHERE nome = '" + nome + "'") é perigosa. - O que é um "Log" de sistema?
🟡 Intermediários
- Pesquise e explique brevemente o que é o princípio "DRY" (Don't Repeat Yourself).
- Como um desenvolvedor pode usar o "Breakpoints" para encontrar um erro difícil no código?
🔴 Desafio
- Escreva um bloco de código Java que tente realizar uma divisão por zero, capture a exceção e mostre um
JOptionPanecom uma mensagem educada para o usuário.
Exercícios - Aula 16 📝
🟢 Básicos
- Quais são as 4 camadas obrigatórias que seu projeto final deve ter?
- O que é o arquivo de documentação
README.mde por que ele é importante?
🟡 Intermediários
- Explique a importância de validar os dados na
Viewantes de enviá-los aoControllerno seu projeto final. - Como você organizaria o banco de dados do seu sistema para suportar a busca de registros por nome?
🔴 Desafio
- Escolha um dos temas sugeridos (Vendas, Biblioteca, Tarefas ou Pets) e faça um rascunho rápido (em tópicos) das telas e das tabelas que seu sistema terá.
Projetos
Projetos e Desafios 🚀
Aplicações práticas para consolidar o conhecimento em desenvolvimento desktop.
-
Módulo 1: Labs Arq ---
-
Módulo 2: MVC & Layers ---
-
Módulo 3: Swing UI ---
-
Módulo 4: Persistência ---
Projeto 01 - Primeiro Programa Desktop 🚀
Nesta atividade, vamos configurar o ambiente e executar nosso primeiro código Java no ambiente de terminal e IDE.
Atividades
- Instalar o JDK (Java Development Kit) versão 17 ou superior.
- Configurar uma IDE (IntelliJ IDEA, Eclipse ou VS Code).
- Criar a classe
HelloWorlde executá-la. - Experimentar a compilação manual via comando
javacno terminal.
Entrega
- Print da tela do terminal exibindo a mensagem "Olá, Mundo Desktop!".
- Código-fonte da classe criada.
Projeto 02 - Modelagem de Entidades 🧱
Vamos aplicar os conceitos de Classes e Objetos para modelar produtos de um sistema de estoque.
Atividades
- Criar a classe
Produtocom os atributosnome,precoequantidade. - Implementar um método
exibirInfo()que mostre os dados no console. - No método
main, instanciar pelo menos 3 produtos diferentes (ex: Teclado, Mouse, Monitor). - Atualizar o preço de um dos produtos e exibir os dados novamente.
Entrega
- Código da classe
Produto. - Código da classe
Mainpara teste.
Projeto 03 - Segurança de Dados com Encapsulamento 🔒
Neste projeto, vamos criar uma conta bancária segura protegendo o saldo de acessos indevidos.
Atividades
- Criar a classe
ContaBancaria. - Definir o atributo
saldocomoprivate. - Criar métodos
depositar(valor)esacar(valor)com validações básicas (ex: não aceitar valores negativos). - Implementar um construtor que inicialize o nome do titular e o saldo inicial.
Entrega
- Classe
ContaBancariacom Getters e Setters necessários. - Demonstração de uma tentativa de saque maior que o saldo disponível.
Projeto 04 - Hierarquia de Usuários 🧬
Vamos usar herança para organizar os diferentes tipos de usuários de um sistema empresarial.
Atividades
- Criar a classe base
Pessoa(nome, cpf). - Criar as subclasses
Cliente(limite) eFuncionario(salario). - Usar
@Overridepara personalizar o métodoexibirDados()em cada classe. - Criar uma lista de pessoas no
maine percorrer exibindo os dados de cada uma (Polimorfismo).
Entrega
- Diagrama de classes UML simples (Mermaid).
- Código-fonte das classes e do teste polimórfico.
Projeto 05 - Sistema de Pagamentos Abstrato 🧩
Implementação de diversos métodos de pagamento usando classes abstratas ou interfaces.
Atividades
- Criar a classe abstrata
Pagamentocom o método abstratoprocessar(). - Implementar as classes
CartaoCredito,BoletoePix. - Adicionar lógica específica em cada uma (ex: Cartão pede número, Boleto gera código).
- Simular o processamento de uma venda com diferentes meios de pagamento.
Entrega
- Código completo da estrutura de pagamentos.
- Documentação rápida sobre a vantagem de usar o método abstrato neste caso.
Projeto 06 - Arquitetura de Pastas Profissional 📂
Organização do sistema seguindo os padrões de pacotes da indústria.
Atividades
- Criar a estrutura de pacotes:
br.com.sistema.model,br.com.sistema.view,br.com.sistema.controller. - Mover as classes
Produtopara o pacote model. - Criar uma classe simples em cada pacote e realizar o
importcorreto entre elas. - Validar se o projeto continua compilando e executando após a mudança.
Entrega
- Árvore de diretórios do projeto (comando
treeou print). - Exemplo de um arquivo que utilize classes de mais de um pacote.
Projeto 07 - Implementando o MVC 🏗️
Neste projeto, vamos aplicar a separação total entre Interface, Lógica e Dados.
Atividades
- Criar o
ProdutoControllerpara gerenciar a lista de produtos. - Criar a classe
Produtono model. - Criar um console "View" (ou interface simples) que solicita os dados ao usuário.
- Garantir que a View peça ao Controller para salvar ou listar, sem mexer no Model diretamente.
Entrega
- Código organizado nas 3 pastas (model, view, controller).
- Relato sobre a dificuldade de separar as responsabilidades.
Projeto 08 - Minha Primeira Janela Swing 🎨
Criação da interface visual básica para a aplicação.
Atividades
- Criar uma classe herdando de
JFrame. - Configurar título, tamanho e operação de fechamento.
- Adicionar um
JButtoncentralizado. - Adicionar um
ActionListenerque exiba um "Olá!" ao clicar no botão.
Entrega
- Print da janela aberta.
- Código da classe
MinhaJanela.
Projeto 09 - Formulário de Dados Básicos 🏗️
Construção de um formulário de cadastro funcional com validação simples.
Atividades
- Adicionar
JLabeleJTextFieldpara Nome e E-mail. - Adicionar um botão "Salvar".
- Ao clicar em salvar, validar se os campos não estão vazios.
- Exibir os dados em um
JOptionPanede informação.
Entrega
- Código da classe da tela de cadastro.
- Print da validação de campo vazio funcionando.
Projeto 10 - Seleção de Preferências 🎛️
Uso de componentes de seleção e organização com layouts.
Atividades
- Criar um formulário de "Pesquisa de Perfil".
- Usar
JCheckBoxpara interesses (Programação, Design, Redes). - Usar
JRadioButtonpara nível de experiência (Iniciante, Pleno, Sênior). - Organizar os campos usando
GridLayout.
Entrega
- Código da tela organizado por painéis.
- Print da tela exibindo as seleções feitas pelo usuário.
Projeto 11 - Interface com Abas e Listagem 📑
Organização avançada com JTabbedPane e JTable.
Atividades
- Criar uma janela com duas abas: "Cadastro" e "Relatório".
- Na aba Relatório, adicionar uma
JTable. - Criar um botão na aba Cadastro que adicione os dados digitados diretamente na
JTableda outra aba. - Adicionar uma barra de menu (JMenuBar) com a opção "Sair".
Entrega
- Código da tela com abas e lógica da tabela.
- Print demonstrando a transição entre as abas.
Projeto 12 - Criando a Base de Dados 🗄️
Modelagem e criação física do banco de dados relacional.
Atividades
- Instalar o SQLite Browser (ou usar terminal).
- Criar o arquivo
meusistema.db. - Executar o comando SQL para criar a tabela
produtocom ID auto-incremento. - Inserir manualmente 5 registros de teste no banco.
Entrega
- Print do SQLite Browser exibindo a tabela e os dados.
- O arquivo do banco de dados (
.db).
Projeto 13 - Fábrica de Conexões 🔌
Implementação da ponte segura entre o Java e o SQLite.
Atividades
- Criar a classe
ConexaoDBusando o padrão Singleton ou apenas métodos estáticos. - Implementar o método
getConexao()que retorna umajava.sql.Connection. - Tratar as exceções de banco de dados com
try-catch. - Criar um método
mainsimples apenas para testar se a conexão abre e fecha sem erros.
Entrega
- Código da classe de conexão.
- Console exibindo "Conectado com sucesso!".
Projeto 14 - CRUD Completo com DAO 💾
Implementação da camada de persistência para a entidade Produto.
Atividades
- Criar a classe
ProdutoDAO. - Implementar os métodos
salvar,listar,atualizareexcluir. - Usar
PreparedStatementem todas as queries. - Criar um programa de teste (Console) que execute as 4 operações em sequência.
Entrega
- Código da classe
ProdutoDAO. - Print do console provando que o registro foi inserido, alterado e deletado.
Projeto 15 - Blindando o Sistema 🛡️
Refatoração do sistema focando em segurança e tratamento de erros.
Atividades
- Revisar todos os campos de texto para garantir que não há concatenação de SQL.
- Implementar uma classe de
Logsimples que escreva erros em um arquivo.txt. - Adicionar mensagens personalizadas ao usuário quando o banco de dados estiver inacessível.
- Experimentar o Debug da IDE para acompanhar o fluxo de um
INSERT.
Entrega
- Código refatorado com tratamentos de erro robustos.
- Exemplo do arquivo de log gerado após um erro simulado.
Projeto 16 - Sistema Completo Final 🚀
Consolidação de todos os módulos em um software desktop real.
Atividades
- Escolher um dos temas sugeridos (Vendas, Biblioteca, etc).
- Desenvolver a interface visual com Swing (Menus, Abas, Tabelas).
- Implementar a lógica no Controller e os dados no Model.
- Garantir persistência real no banco de dados via DAO.
- Criar o arquivo
README.mddo seu projeto.
Entrega
- Link do repositório ou arquivo compactado com o projeto completo.
- Documentação simplificada do sistema.
Quizzes
Quizzes Interativos 🧠
Teste seus conhecimentos rapidamente ao final de cada módulo do curso.
-
Fase 1: Fundamentos OO ---
-
Fase 2: Arquitetura ---
-
Fase 3: Componentes ---
-
Fase 4: Dados & Final ---
Quiz 01 - Introdução
Quiz 02 - Introdução
Quiz 03 - Introdução
Quiz 04 - Introdução
Quiz 05 - Introdução
Quiz 06 - Introdução
Quiz 07 - Introdução
Quiz 08 - Introdução
Quiz 09 - Introdução
Quiz 10 - Introdução
Quiz 11 - Introdução
Quiz 12 - Introdução
Quiz 13 - Introdução
Quiz 14 - Introdução
Quiz 15 - Introdução
Quiz 16 - Introdução
Slides
Slides das Aulas 📺
Material visual para acompanhamento dos conceitos teóricos e práticos.
-
Módulo 1: Fundamentos ---
-
Módulo 2: Arquitetura ---
-
Módulo 3: Interface GUI ---
-
Módulo 4: Persistência ---
Configuração
Configuração do Ambiente 🛠️
Guias passo a passo para preparar sua máquina para o desenvolvimento Java Desktop.
-
:material-java: Desenvolvimento Java --- Instalação do JDK 17+ e configuração das variáveis de ambiente.
-
IDE (Ambiente) --- Configuração do IntelliJ IDEA ou Eclipse para projetos Java.
-
Banco de Dados --- Instalação do SQLite e ferramentas de visualização (DB Browser).
Setup 01: Android Studio 🤖
O Android Studio é a IDE oficial para o desenvolvimento Android.
1. Requisitos de Sistema
- RAM: Mínimo 8GB (Sugerido 16GB+).
- Espaço: Mínimo 10GB para IDE + SDKs.
- Processador: Intel Core i5 ou equivalente.
2. Instalação
- Acesse o site oficial: developer.android.com/studio.
- Baixe a versão mais recente para o seu Sistema Operacional.
- Execute o instalador e escolha a opção "Standard" na configuração inicial.
3. Configurando o SDK
- Após a instalação, vá em Settings > Languages & Frameworks > Android SDK.
- Certifique-se de que a versão mais recente do Android (estável) esteja instalada.
- Na aba SDK Tools, instale o "Android Emulator" e o "Intel x86 Emulator Accelerator (HAXM)" se estiver no Windows com Intel.
4. Criando um Emulador (AVD)
- Abra o Device Manager.
- Clique em Create Device.
- Escolha um dispositivo (ex: Pixel 7).
- Selecione uma imagem de sistema (ex: Level 34 - Android 14).
- Finalize e clique no "Play" para iniciar o celular virtual.
5. Solução de Problemas ⚠️
- VT-x is disabled: Você precisa habilitar a virtualização na BIOS do seu computador.
- Studio muito lento: Adicione a pasta do projeto e as pastas do Android SDK nas exclusões do seu Antivírus.
Setup 02: Xcode (iOS Foundation) 🍎
O Xcode é a ferramenta necessária para compilar e testar apps iOS.
[!IMPORTANT] O Xcode requer um computador Mac (macOS).
1. Instalação
- Abra a App Store no seu Mac.
- Pesquise por Xcode.
- Clique em Obter/Instalar.
- Após o download, abra o Xcode para carregar os componentes adicionais do macOS.
2. Configurando Simuladores
- Vá em Settings > Platforms.
- Verifique se o componente "iOS" está baixado.
- Se não estiver, clique em "GET" para baixar a versão mais estável.
3. Comandos de Linha (CLI)
Para que ferramentas de automação funcionem, você precisa instalar os Command Line Tools:
4. Opcional: CocoaPods
Muitos projetos iOS antigos ainda usam CocoaPods para dependências:
5. Solução de Problemas ⚠️
- Espaço em Disco: O Xcode é muito grande. Garanta pelo menos 40GB de espaço livre para ele e os simuladores.
- Build Lento: Use simuladores de modelos mais simples (ex: iPhone SE) para poupar memória RAM se necessário.
Setup 03: Ferramentas de Apoio 🛠️
Além da IDE, você precisará de ferramentas para gerenciar código e testar dados.
1. Git e GitHub
Essencial para versionamento. * Download: git-scm.com. * Configuração Inicial:
2. Postman ou Insomnia
Para testar as APIs REST antes de escrever código Kotlin/Swift. * Postman: postman.com. * Insomnia: insomnia.rest.
3. Vysor (Opcional)
Para espelhar a tela do seu celular real no computador (via cabo USB). * Acesso: vysor.io.
4. ADB (Android Debug Bridge)
Já vem com o Android Studio, mas é útil no PATH do sistema.
* Permite instalar APKs via terminal: adb install app.apk.
* Permite ver logs detalhados: adb logcat.
5. Flipper (Meta)
Uma ferramenta avançada para debugar bancos de dados SQLite e chamadas de rede direto na interface visual. * Acesso: fbflipper.com.
Sobre
Sobre o Curso
🎓 Desenvolvimento Desktop Profissional
Este curso foi projetado para capacitar desenvolvedores na criação de aplicações desktop robustas, focando na Programação Orientada a Objetos, Arquitetura MVC e integração com Banco de Dados Relacional.
🎯 Objetivos do Curso
-
Aplicações Robustas --- Compreender a arquitetura de sistemas que rodam diretamente no sistema operacional, com alto desempenho e acesso a recursos locais.
-
Padrões de Projeto --- Dominar o padrão MVC e DAO para criar códigos organizados, testáveis e fáceis de manter.
-
Persistência de Dados --- Implementar armazenamento real de informações utilizando SQL e drivers JDBC, garantindo a integridade dos dados.
-
Interface Gráfica (GUI) --- Desenvolver interfaces ricas e funcionais utilizando a biblioteca Swing, focando em usabilidade e experiência do usuário.
📚 O Que Você Vai Aprender
Módulo 1 – Fundamentos e OO
- Classes, Objetos e Instanciação
- Encapsulamento, Getters e Setters
- Herança, Polimorfismo e Sobre-escrita
- Classes Abstratas e Interfaces
Módulo 2 – Estruturação e Arquitetura
- Organização de Projetos e Pacotes
- Padrão de Arquitetura MVC
- Separação de Responsabilidades
- Refatoração de Código
Módulo 3 – Interface Gráfica (GUI)
- Conceitos de GUI e Eventos
- Componentes Básicos e Intermediários
- Layout Managers (Border, Flow, Grid)
- Interfaces Avançadas (Tabelas e Menus)
Módulo 4 – Banco de Dados e Persistência
- Introdução ao SQL e SQLite
- Conexão JDBC e Driver Manager
- Padrão DAO (CRUD Completo)
- Segurança e Prevenção de SQL Injection
🛠️ Metodologia
Foco 100% prático baseado em projetos (PBL). Cada aula introduz um novo conceito que é imediatamente aplicado em um mini-projeto, culminando em um sistema completo ao final do curso.
Pronto para dominar o Desktop? Começar Agora
Materiais
Bem-vindo à seção de materiais complementares do curso. Aqui você encontra recursos adicionais para apoiar seus estudos.
-
Slides ---
- Acesse os slides de todas as aulas para revisão.
-
Exercícios ---
- Pratique com listas de exercícios para cada módulo.
-
Quizzes ---
- Teste seus conhecimentos com quizzes interativos.
-
Projetos ---
- Desenvolva projetos práticos para aplicar o que aprendeu.
-
Setup ---
- Guias de instalação e configuração do ambiente.
Versão para Impressão
Esta página foi gerada automaticamente para impressão.