Table of Contents
Principal
🤖 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.
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
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
Módulo 1 – Fundamentos de OO com Java
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.
Módulo 2 – Abstração e Arquitetura
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.
Módulo 3 – Componentes e Persistência
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.
Módulo 4 – Integração e Projeto Final
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! 🖥️🎓
Materiais
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.
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 ---
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 ---
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 ---
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 ---
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.
Versão para Impressão
Esta página foi gerada automaticamente para impressão.