Sumário do Curso
Sistemas com Java (Desktop) ☕
"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 🧭
Curso: Sistemas com Java (Desktop)
Público-alvo: Estudantes de ADS, Ciência da Computação e Desenvolvedores de Software
Carga Horária: 20 Aulas (80 Horas Teórico-Práticas)
🎯 1. Objetivos do Curso
- Compreender os fundamentos conceituais e arquiteturais de Sistemas com Java (Desktop).
- Aplicar padrões de projeto, sintaxe moderna e boas práticas da indústria.
- Desenvolver soluções completas através de exercícios práticos e desafios de projeto.
📚 2. Cronograma de Aulas (Matriz de 20 Semanas)
| Aula | Tema Central | Atividades e Entregas |
|---|---|---|
| 01 | Introdução ao Desenvolvimento Desktop ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 02 | Classes, Objetos e Instanciação | Teoria, Prática Guiada, Quiz e Exercícios |
| 03 | Encapsulamento e Construtores | Teoria, Prática Guiada, Quiz e Exercícios |
| 04 | Herança e Polimorfismo | Teoria, Prática Guiada, Quiz e Exercícios |
| 05 | Classes Abstratas e Interfaces | Teoria, Prática Guiada, Quiz e Exercícios |
| 06 | Organização de Projetos | Teoria, Prática Guiada, Quiz e Exercícios |
| 07 | Padrão MVC na Prática ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 08 | Introdução à Interface Gráfica (GUI) | Teoria, Prática Guiada, Quiz e Exercícios |
| 09 | Componentes Básicos ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 10 | Componentes Intermediários ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 11 | Interfaces Avançadas | Teoria, Prática Guiada, Quiz e Exercícios |
| 12 | Introdução a Banco de Dados ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 13 | Conexão com Banco de Dados | Teoria, Prática Guiada, Quiz e Exercícios |
| 14 | CRUD e DAO | Teoria, Prática Guiada, Quiz e Exercícios |
| 15 | Segurança e Boas Práticas ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 16 | Projeto Integrador | Teoria, Prática Guiada, Quiz e Exercícios |
| 17 | JVM Internals, JIT Compiler e Garbage Collection | Teoria, Prática Guiada, Quiz e Exercícios |
| 18 | Concorrência de Alto Desempenho com Virtual Threads | Teoria, Prática Guiada, Quiz e Exercícios |
| 19 | Arquitetura Modular Java (JPMS) e GraalVM | Teoria, Prática Guiada, Quiz e Exercícios |
| 20 | Projeto Capstone: Sistema Java GraalVM Nativo | Teoria, Prática Guiada, Quiz e Exercícios |
🧠 3. Metodologia de Ensino
- Teoria Fundamentada: Aulas com conceitos detalhados, diagramas arquiteturais e sintaxe de referência.
- Ciclo Teoria ⇄ Prática: Cada aula conta com Quiz Interativo (10 questões) para validação imediata, Lista de Exercícios Sanfonados (com Gabarito Explicado) e Desafio de Projeto Prático.
- Laboratório Contínuo: Ambientes configurados passo a passo na seção de Setups da plataforma.
💼 4. Competências e Perfil Desenvolvido
- Dominar as ferramentas e fluxos de desenvolvimento de Sistemas com Java (Desktop).
- Resolver problemas técnicos de alta complexidade com código limpo e performático.
- Construir portfólio prático com 20 projetos aplicados.
📊 5. Critérios de Avaliação
- 20 Listas de Exercícios: Resolução individual dividida em Básico, Intermediário e Desafio.
- 20 Quizzes Interativos: Validação formativa com feedback imediato via JavaScript.
- 20 Desafios de Projetos: Aplicações práticas consolidando o aprendizado de cada unidade.
Aulas
Aulas do Curso
Bem-vindo à seção de aulas! Aqui você encontra todo o conteúdo do curso organizado em 5 módulos estruturados.
📚 Módulos do Curso
-
Módulo 1: Fundamentos & Bases ---
-
Módulo 2: Arquitetura & Conceitos Essenciais ---
-
Módulo 3: Engenharia & Aplicação Prática ---
-
Módulo 4: Software, Ferramentas & Padrões ---
-
Módulo 5: Tópicos Avançados & Projeto Capstone ---
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
$ # Compilando classes com modificadores
$ javac -d . Cliente.java
$ java Main
Erro: Atributo 'nome' é privado! Use getNome().
📝 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
$ tree
.
├── 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:
$ # Antes: Tudo em App.java
$ # Depois:
$ ls src/
controller/ # ProdutoController.java
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, use btnSalvar ou btnSair. 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 GridLayout para o formulário e outro painel com FlowLayout apenas 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
$ # Criando uma tabela
$ sqlite3 sistema.db
sqlite> CREATE TABLE produto (id INTEGER PRIMARY KEY, nome TEXT, preco REAL);
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 ConexaoBanco e 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.md para o seu projeto explicando:
- O que o sistema faz.
- Como executá-lo.
- 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! 🖥️🎓
Aula 17 - JVM Internals, JIT Compiler e Garbage Collection ☕
Objetivo Pedagógico
Objetivo: Compreender a engenharia interna da Java Virtual Machine (JVM): carregamento de classes (ClassLoader), compilação Just-In-Time (C1/C2 JIT e Tiered Compilation), arquitetura de memória (Heap vs Stack/Metaspace) e coletores de lixo de ultrabaixa latência (ZGC e Shenandoah).
📑 1. Fundamentos Teóricos & Análise Técnica
A Java Virtual Machine (JVM) é uma das plataformas de execução de software mais avançadas e otimizadas da ciência da computação moderna, projetada para executar código corporativo de alta performance por meses sem interrupção.
O funcionamento interno da JVM divide-se em componentes vitais: 1. Compilação Just-In-Time (JIT) e Tiered Compilation: - A JVM inicia a execução interpretando Bytecode de forma imediata. - O subsistema de profiling rastreia seções de código executadas com alta frequência (Hotspots). - Compilador C1 (Client Compiler): Aplica otimizações rápidas com compilação básica para acelerar a inicialização. - Compilador C2 (Server Compiler): Aplica otimizações agressivas de baixo nível: - Inlining de Métodos: Elimina o overhead de chamadas de métodos copiando o corpo da função diretamente no local de chamada. - Escape Analysis: Se um objeto alocado dentro de um método não 'escapa' para outras threads ou escopos, a JVM elimina a alocação no Heap e aloca o objeto diretamente na Stack da thread, liberando-o instantaneamente sem intervenção do Garbage Collector. 2. Coletores de Lixo de Ultrabaixa Latência (ZGC - Z Garbage Collector): - Coletores tradicionais (Serial, Parallel, CMS e até G1 em cenários extremos) incorriam em pausas globais que congelavam todas as threads da aplicação (Stop-the-World - STW), variando de centenas de milissegundos a vários segundos. - O ZGC opera de forma concorrente: todas as fases pesadas de marcação e realocação de memória executam simultaneamente com a execução dos threads da aplicação utilizando ponteiros coloridos (Colored Pointers) e barreiras de carga (Load Barriers), garantindo pausas STW inferiores a 1 milissegundo mesmo em Heaps com múltiplos terabytes de tamanho.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Bytecode["Java Bytecode (.class)"] --> Interpreter["Interpretador de Bytecode (Execução Imediata)"]
Interpreter --> Profiler["Profiling de Hotspots de Execução"]
Profiler --> C1["JIT C1 Compiler (Otimizações Rápidas)"]
C1 --> C2["JIT C2 Server Compiler (Escape Analysis & Inlining)"]
C2 --> NativeCode["Código de Máquina Nativo (Execução na CPU)"]
Heap["Heap de Memória (Terabytes)"] --> ZGC["ZGC: Coleta Concorrente com Pausas < 1ms"]
style Bytecode fill:#e1f5fe,stroke:#01579b
style Profiler fill:#fff3e0,stroke:#e65100
style C2 fill:#f3e5f5,stroke:#7b1fa2
style NativeCode fill:#e8f5e9,stroke:#2e7d32
style ZGC fill:#e0f2f1,stroke:#00695c
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Escape Analysis e Alocação na Stack: Otimização revolucionária que elimina a pressão sobre o Garbage Collector alocando objetos locais na pilha. - Pausas Sub-Milissegundo com ZGC: Garantia de latência previsível para sistemas financeiros e plataformas de negociação em tempo real. - Tiered Compilation (Níveis 0 a 4): Equilíbrio perfeito entre tempo de aquecimento (Warm-up) e rendimento máximo de pico em produção. - ClassLoaders Hierárquicos: Isolamento de namespaces e carregamento seguro de classes em tempo de execução.
🛠️ 2. Implementação Prática em Arquitetura da JVM, JIT Compiler e Coletor ZGC
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// JvmTuningDemo.java (Demonstração de Otimizações JIT e Diagnóstico de Memória)
package com.portal.jvm;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
public class JvmTuningDemo {
// Método candidato a Escape Analysis e Inlining pelo compilador C2
public static long computePointDistance(int iterations) {
long sum = 0;
for (int i = 0; i < iterations; i++) {
// Objeto Point efêmero: a JVM aloca na Stack se não houver escape!
Point p = new Point(i, i * 2);
sum += p.x() + p.y();
}
return sum;
}
record Point(int x, int y) {}
public static void main(String[] args) {
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
System.out.println("=== JVM Performance & Tuning Diagnóstico ===");
System.out.printf("Heap Inicial : %d MB\n", memoryBean.getHeapMemoryUsage().getInit() / (1024 * 1024));
System.out.printf("Heap Máximo : %d MB\n", memoryBean.getHeapMemoryUsage().getMax() / (1024 * 1024));
// Aquecimento JIT (Warm-up)
for (int i = 0; i < 50_000; i++) {
computePointDistance(100);
}
long start = System.nanoTime();
long result = computePointDistance(1_000_000);
long elapsed = System.nanoTime() - start;
System.out.printf("Resultado: %d | Tempo Pós-JIT C2: %.2f ms\n", result, elapsed / 1_000_000.0);
}
}
💡 Análise Passo a Passo do Código
- Uso de
record PointImutável: Permite que a JVM aplique otimizações escalares (Scalar Replacement) desmantelando o objeto em variáveis primitivas. - Warm-up com 50.000 Iterações: Estimula o compilador JIT Tiered a promover o método do nível C1 para a compilação de pico C2.
- Inspeção com
MemoryMXBean: Acessa os parâmetros reais de telemetria da memória gerenciada pela JVM em tempo de execução.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 18 - Concorrência de Alto Desempenho com Virtual Threads 🧵
Objetivo Pedagógico
Objetivo: Dominar a maior transformação na concorrência da plataforma Java desde sua concepção: Virtual Threads (Project Loom), concorrência estruturada (StructuredTaskScope) e scoped values, substituindo modelos reativos complexos por código síncrono de altíssima escala.
📑 1. Fundamentos Teóricos & Análise Técnica
Durante décadas, as threads da linguagem Java (java.lang.Thread) mantiveram um mapeamento estrito de 1 para 1 com threads do sistema operacional hospedeiro (Platform Threads). Uma plataforma Linux suporta poucas dezenas de milhares de threads antes de exaurir a memória RAM (cada thread reservava cerca de 1 MB de stack) e sofrer penalidades brutais de chaveamento de contexto (Context Switch).
O Project Loom (Java 21+) introduziu as Virtual Threads:
1. O Modelo M:N do Project Loom:
- Virtual Threads são gerenciadas diretamente pelo runtime da JVM, e não pelo kernel do SO.
- Uma aplicação Java moderna pode alocar milhões de Virtual Threads simultâneas consumindo apenas algumas centenas de bytes por thread.
- Carrier Threads: A JVM mantém um pool fixo de threads de plataforma que carregam as Virtual Threads. Quando uma Virtual Thread executa uma operação bloqueante de I/O (ex: consultar banco relacional JDBC ou chamar API externa), o runtime desmonta (unmounts) a Virtual Thread da Carrier Thread, liberando a thread do sistema para atender outras Virtual Threads.
2. Concorrência Estruturada (StructuredTaskScope):
- Organiza subtarefas concorrentes dentro de um mesmo bloco sintático hierárquico. Se uma subtarefa crítica falhar (ex: chamada de frete caiu), as demais subtarefas concorrentes (ex: consulta de estoque) são canceladas imediatamente de forma coordenada (Short-circuiting), eliminando tarefas órfãs e vazamentos de recursos.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Tasks["Milhares de Tarefas Concorrentes (ex: 500.000 requisições HTTP)"] --> VThreads["Virtual Threads na JVM (Memória em Bytes)"]
VThreads --> Loom["Project Loom Scheduler (ForkJoinPool)"]
Loom --> Carrier["Poucas Carrier Threads do Sistema Operacional (ex: 8 Threads Físicas)"]
Carrier --> CPU["Processador Físico Multi-Core"]
VThreads -.->|Ao encontrar I/O Bloqueante| Unmount["Desmonta da Carrier Thread Instantaneamente!"]
style Tasks fill:#e1f5fe,stroke:#01579b
style VThreads fill:#fff3e0,stroke:#e65100
style Loom fill:#f3e5f5,stroke:#7b1fa2
style Carrier fill:#e8f5e9,stroke:#2e7d32
style Unmount fill:#ffebee,stroke:#c62828
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Morte do Reactive Spaghetti: Retorno ao modelo sequencial limpo (thread-per-request) com rendimento equivalente ou superior a WebFlux/RxJava.
- Concorrência Estruturada Cooperativa: Garantia de que tarefas filhas não sobrevivam ao escopo do chamador pai.
- Pinning Preventions: Substituição de blocos legados synchronized por ReentrantLock para evitar o travamento (pinning) da Carrier Thread.
- Observabilidade Nativa com JFR: Rastreamento de milhões de threads através de eventos do Java Flight Recorder sem impacto na performance.
🛠️ 2. Implementação Prática em Java 21+ Project Loom, Virtual Threads e Structured Concurrency
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// VirtualThreadsStructuredScope.java (Concorrência Estruturada com Virtual Threads em Java 21)
package com.portal.threads;
import java.util.concurrent.StructuredTaskScope;
import java.util.concurrent.Executors;
import java.time.Duration;
public class VirtualThreadsStructuredScope {
record CustomerDashboard(String profile, String creditScore) {}
// Simulação de chamada externa de perfil
private static String fetchProfile() throws InterruptedException {
Thread.sleep(Duration.ofMillis(200)); // Operação bloqueante segura em Virtual Thread!
return "Perfil: Carlos Silva (VIP)";
}
// Simulação de chamada externa de score
private static String fetchScore() throws InterruptedException {
Thread.sleep(Duration.ofMillis(150));
return "Score: 890";
}
public static CustomerDashboard loadCustomerData() throws Exception {
// Concorrência Estruturada que cancela tudo se uma das tarefas falhar
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
StructuredTaskScope.Subtask<String> profileTask = scope.fork(() -> fetchProfile());
StructuredTaskScope.Subtask<String> scoreTask = scope.fork(() -> fetchScore());
scope.join(); // Aguarda ambas as tarefas concluírem
scope.throwIfFailed(); // Propaga exceção se qualquer uma falhou
return new CustomerDashboard(profileTask.get(), scoreTask.get());
}
}
public static void main(String[] args) throws Exception {
System.out.println("Disparando 10.000 requisições simultâneas em Virtual Threads...");
long start = System.currentTimeMillis();
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10_000; i++) {
executor.submit(() -> {
try {
loadCustomerData();
} catch (Exception e) {
e.printStackTrace();
}
});
}
} // O try-with-resources aguarda o término de todas as 10.000 tarefas!
long elapsed = System.currentTimeMillis() - start;
System.out.printf("10.000 operações concluídas com sucesso em %d ms!\n", elapsed);
}
}
💡 Análise Passo a Passo do Código
- Uso de
Executors.newVirtualThreadPerTaskExecutor(): Cria uma nova Virtual Thread sob demanda para cada tarefa com custo computacional desprezível. - Padrão
StructuredTaskScope.ShutdownOnFailure: Coordena as tarefas paralelas garantindo que a falha de uma interrompa imediatamente as demais. - Operações Bloqueantes Transparentes: O
Thread.sleepnão trava threads físicas de sistema operacional, liberando o processador para outras requisições.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 19 - Arquitetura Modular Java (JPMS) e GraalVM 🚀
Objetivo Pedagógico
Objetivo: Conceber sistemas Java altamente modulares com o Java Platform Module System (JPMS / Project Jigsaw) e compilar aplicações em imagens nativas de máquina (Ahead-Of-Time - AOT) com GraalVM, alcançando inicialização em milissegundos e consumo ínfimo de memória.
📑 1. Fundamentos Teóricos & Análise Técnica
Historicamente, aplicações Java corporativas sofriam com dois problemas clássicos: o JAR Hell (conflitos de versões de bibliotecas e classpath aberto sem controle de visibilidade) e o alto tempo de inicialização (Cold Start) e consumo de memória RAM, tornando a linguagem desvantajosa em arquiteturas Serverless e contêineres efêmeros.
A modernização da plataforma resolveu essas dores em dois níveis:
1. Java Platform Module System (JPMS / module-info.java):
- Introduziu o encapsulamento estrito na plataforma Java.
- requires: Declara dependências de outros módulos que devem estar presentes em tempo de compilação e execução.
- exports: Define explicitamente quais pacotes são visíveis externamente. Pacotes internos permanecem 100% inacessíveis para código externo, mesmo através de reflexão (Reflection), prevenindo dependências frágeis em APIs internas.
2. GraalVM Native Image e Compilação Ahead-Of-Time (AOT):
- Em vez de empacotar um arquivo JAR para rodar sobre a JVM tradicional, o GraalVM compila o código Java, suas dependências e um runtime mínimo (SubstrateVM) diretamente em um binário executável nativo de máquina (ELF/PE/Mach-O).
- Análise de Mundo Fechado (Closed-World Assumption): O compilador AOT analisa todo o grafo de código alcançável a partir do método main, eliminando todas as classes, métodos e instruções não utilizadas (Dead Code Elimination).
- Ganhos Extraordinários: Tempo de inicialização reduzido de vários segundos para menos de 15 milissegundos, com consumo de memória RAM caindo de 500 MB para apenas 30 MB.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
JavaCode["Código Java Modular (module-info.java)"] --> AOT["GraalVM AOT Compiler (Closed-World Analysis)"]
AOT --> DeadCode["Eliminação de Código Morto & SubstrateVM"]
AOT --> NativeBinary["Binário Executável Nativo Autocontido"]
NativeBinary --> Perf1["Startup Time: < 15ms (Zero JVM Warm-up)"]
NativeBinary --> Perf2["Consumo de Memória RAM: ~30MB"]
NativeBinary --> Perf3["Container Distroless Compacto (< 50MB)"]
style JavaCode fill:#e1f5fe,stroke:#01579b
style AOT fill:#fff3e0,stroke:#e65100
style NativeBinary fill:#f3e5f5,stroke:#7b1fa2
style Perf1 fill:#e8f5e9,stroke:#2e7d32
style Perf2 fill:#e8f5e9,stroke:#2e7d32
style Perf3 fill:#e0f2f1,stroke:#00695c
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Encapsulamento Forte com JPMS: Bloqueio de acessos ilegais a estruturas internas de pacotes através de contratos explícitos em module-info.java.
- Compilação Ahead-Of-Time (AOT): Tradução prévia de todo o código para binário de máquina eliminando o overhead de inicialização do JIT.
- Arquitetura Ideal para Serverless e Cloud: Binários Java com inicialização instantânea perfeitos para funções AWS Lambda e auto-scaling no Kubernetes.
- Configuração de Reflexão via Metadados: Mapeamento declarativo (reflect-config.json) para viabilizar frameworks modernos em compilações nativas GraalVM.
🛠️ 2. Implementação Prática em Java Platform Module System (JPMS) e GraalVM Native Image
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// module-info.java (Declaração de Módulo JPMS com Encapsulamento Rígido)
module com.portal.core.systems {
// Dependência explícita de módulos da plataforma
requires java.base;
requires java.net.http;
requires java.management;
// Exporta apenas a API pública do domínio
exports com.portal.core.api;
exports com.portal.core.model;
// Pacotes internos NÃO exportados permanecem 100% privados e protegidos
// contra reflexão maliciosa ou indevida de módulos clientes!
}
💡 Análise Passo a Passo do Código
- Diretiva
exports com.portal.core.api: Expõe exclusivamente as interfaces autorizadas para consumo de outros microsserviços. - Proteção Contra Acessos Ilegais: Impede que clientes instanciem classes internas de infraestrutura, garantindo manutenibilidade arquitetural.
- Preparação para JLink e GraalVM: Permite criar runtimes Java customizados (Custom JREs) contendo apenas os módulos estritamente necessários.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 20 - Projeto Capstone: Sistema Java GraalVM Nativo 🚀
Objetivo Pedagógico
Objetivo: Conceber e consolidar um sistema corporativo Java completo compilado nativamente com GraalVM: arquitetura modularizada com JPMS, concorrência orientada a Virtual Threads, telemetria com JFR e empacotamento em imagem distroless ultracompacta.
📑 1. Fundamentos Teóricos & Análise Técnica
O Projeto Capstone de Sistemas com Java consolida a transformação da plataforma Java em uma tecnologia de ponta para computação em nuvem de alta densidade: 1. Ecossistema Java Cloud Native Moderno: - Integração harmônica entre o modelo declarativo de tipagem forte do Java e a eficiência de binários nativos C/Go. 2. Desempenho Extremo em Ambientes Concorrentes: - Respostas a requisições com latência estável e ausência de pausas de Garbage Collection perceptíveis. 3. Resiliência e Sustentabilidade Computacional (Green Computing): - Redução drástica da pegada de carbono e dos custos de faturamento em nuvem através da otimização de CPU e diminuição em dez vezes da memória alocada por contêiner.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
App["Sistema Corporativo em Java 21+"] --> JPMS["Módulos JPMS Encapsulados"]
JPMS --> Loom["Virtual Threads & Structured Concurrency"]
Loom --> BuildNative["Build AOT com GraalVM Native Image"]
BuildNative --> Binary["Binário Nativo Executável (35MB)"]
Binary --> Pod["Pod Kubernetes em Imagem Distroless"]
Pod --> Metrics["Startup: 12ms | Latência: p99 < 5ms"]
style App fill:#e1f5fe,stroke:#01579b
style Loom fill:#fff3e0,stroke:#e65100
style BuildNative fill:#f3e5f5,stroke:#7b1fa2
style Binary fill:#e8f5e9,stroke:#2e7d32
style Metrics fill:#e0f2f1,stroke:#00695c
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Startup Instantâneo para Escalabilidade: Capacidade de absorver ondas de tráfego instantâneas subindo réplicas em milissegundos. - Densidade Máxima de Carga por Nó: Capacidade de hospedar dezenas de microsserviços Java onde anteriormente só cabiam poucos. - Segurança por Imutabilidade e Distroless: Ambientes de execução sem interpretadores de shell, protegidos contra injeções de comando. - Excelência na Engenharia de Plataforma: Demonstração de proficiência nos conceitos mais profundos e modernos do ecossistema Java.
🛠️ 2. Implementação Prática em Engenharia de Sistemas Java, GraalVM Native Image e Quarkus/Micronaut
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// NativeHttpServerCapstone.java (Servidor HTTP Nativo com Virtual Threads e JSON Parsing)
package com.portal.nativeapp;
import com.sun.net.httpserver.HttpServer;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
public class NativeHttpServerCapstone {
public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
// 1. Instancia servidor HTTP nativo
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
// 2. Associa o executor de Virtual Threads para atender requisições
server.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
// 3. Endpoint de saúde e métricas
server.createContext("/api/health", exchange -> {
String response = "{\"status\":\"HEALTHY\",\"runtime\":\"GraalVM Native Image\"}";
exchange.getResponseHeaders().set("Content-Type", "application/json");
exchange.sendResponseHeaders(200, response.getBytes().length);
try (var os = exchange.getResponseBody()) {
os.write(response.getBytes());
}
});
server.start();
long readyTime = System.currentTimeMillis() - startTime;
System.out.printf("=== Servidor Nativo GraalVM Operacional em %d ms na porta 8080 ===\n", readyTime);
}
}
💡 Análise Passo a Passo do Código
- Uso do
HttpServerNativo da JVM: Dispensa contêineres pesados de servlets atingindo performance pura de sockets. - Conexão com Virtual Threads: Permite que o servidor atenda centenas de milhares de conexões simultâneas com consumo mínimo de memória.
- Tempo de Resposta em Milissegundos: Inicialização ultrarrápida demonstrando a ausência de sobrecarga de warm-up.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Exercícios
🏋️ Exercícios do Curso
Lista completa das 20 unidades de exercicios organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
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
5. 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.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Cite duas vantagens de softwares desktop em relação a sistemas puramente web (ex **Resposta Comentada:** - **Fundamentação:** No contexto de **Introdução ao Desenvolvimento Desktop ️**, o conceito abordado (Cite duas vantagens de softwares desktop em relação a sistemas puramente web (ex) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: O que é uma IDE e cite o nome de uma muito utilizada para Java. **Resposta Comentada:** - **Fundamentação:** No contexto de **Introdução ao Desenvolvimento Desktop ️**, o conceito abordado (O que é uma IDE e cite o nome de uma muito utilizada para Java.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Descreva o papel do "Bytecode" no ecossistema Java e como ele se relaciona com a compilação. **Resolução e Implementação:**// Estrutura de implementação recomendada para Descreva o papel do "Bytecode" no ecossistema Java e como ele se relaciona com a compilação.
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para 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.
// Validação de regras de negócio e retorno consistente
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
5. Modele uma classe Computador com 4 atributos (ex: marca, ram) e 2 métodos (ex: ligar, desligar). Represente isso através de um diagrama Mermaid classDiagram.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a diferença prática entre uma **Classe** e um **Objeto**? Use uma metáfora diferente da "planta da casa". **Resolução e Implementação:**// Estrutura de implementação recomendada para Qual a diferença prática entre uma **Classe** e um **Objeto**? Use uma metáfora diferente da "planta da casa".
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para No código Java, qual a palavra
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Se você criar uma classe `Livro` com os atributos `titulo` e `autor`, escreva como você instanciaria dois livros diferentes.
// Validação de regras de negócio e retorno consistente
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
5. Crie uma classe Conta com o atributo saldo privado. Implemente um método sacar(double valor) que verifique se o saldo é suficiente antes de realizar a operação. Se não for, exiba uma mensagem de erro.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a diferença entre os modificadores `public` e `private`? **Resposta Comentada:** - **Fundamentação:** No contexto de **Encapsulamento e Construtores**, o conceito abordado (Qual a diferença entre os modificadores `public` e `private`?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Para que serve um método construtor em Java? **Resolução e Implementação:**// Estrutura de implementação recomendada para Para que serve um método construtor em Java?
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Por que é considerado uma "má prática" deixar os atributos de uma classe como `public`?
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Explique o uso da palavra
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Crie uma classe `Conta` com o atributo `saldo` privado. Implemente um método `sacar(double valor)` que verifique se o saldo é suficiente antes de realizar a operação. Se não for, exiba uma mensagem de erro.
// Validação de regras de negócio e retorno consistente
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
5. Imagine um sistema de e-commerce. Crie uma hierarquia de classes para Produto, Livro (tem autor e páginas) e Eletronico (tem voltagem). Use Mermaid para o diagrama.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a palavra **Resolução e Implementação:**// Estrutura de implementação recomendada para Qual a palavra
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para O que acontece se uma classe filha tentar acessar um atributo `private` da classe pai?
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Explique a diferença entre a "Superclasse" e a "Subclasse".
// Validação de regras de negócio e retorno consistente
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
5. Projete a interface Autenticavel com o método autenticar(String login, String senha). Crie a classe Usuario que implementa essa interface.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a principal diferença entre uma Classe Comum e uma Classe Abstrata? **Resolução e Implementação:**// Estrutura de implementação recomendada para Qual a principal diferença entre uma Classe Comum e uma Classe Abstrata?
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Como se chama op processo de uma classe "cumprir" os métodos definidos em uma Interface?
// Validação de regras de negócio e retorno consistente
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
5. Desenhe a estrutura de pastas de um projeto chamado "SistEscola" que contenha as camadas de view, model e controller.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a regra de ouro para nomear pacotes (packages) em Java? **Resposta Comentada:** - **Fundamentação:** No contexto de **Organização de Projetos**, o conceito abordado (Qual a regra de ouro para nomear pacotes (packages) em Java?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: O que acontece se tivermos duas classes com o mesmo nome em pacotes diferentes? **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Organização de Projetos**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 3: Explique a importância da separação de responsabilidades (camadas). **Resposta Comentada:** - **Fundamentação:** No contexto de **Organização de Projetos**, o conceito abordado (Explique a importância da separação de responsabilidades (camadas).) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: O que o comando `import` faz no topo do arquivo Java? **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Organização de Projetos**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 5: Desenhe a estrutura de pastas de um projeto chamado "SistEscola" que contenha as camadas de `view`, `model` e `controller`. **Resposta Comentada:** - **Fundamentação:** No contexto de **Organização de Projetos**, o conceito abordado (Desenhe a estrutura de pastas de um projeto chamado "SistEscola" que contenha as camadas de `view`, `model` e `controller`.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.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
5. Refatore mentalmente um código onde o JButton faz um INSERT direto no banco. Como você dividiria isso em 3 classes (Produto, ProdutoController, TelaProduto)?
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Identifique os papéis **Resposta Comentada:** - **Fundamentação:** No contexto de **Padrão MVC na Prática ️**, o conceito abordado (Identifique os papéis) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Por que a View não deve ter código de conexão com o banco de dados? **Resolução e Implementação:**// Estrutura de implementação recomendada para Por que a View não deve ter código de conexão com o banco de dados?
// Validação de regras de negócio e retorno consistente
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
5. 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.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a função principal do `JFrame` em uma aplicação Swing? **Resolução e Implementação:**// Estrutura de implementação recomendada para Qual a função principal do `JFrame` em uma aplicação Swing?
// Validação de regras de negócio e retorno consistente
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
5. 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.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Identifique o componente **Resposta Comentada:** - **Fundamentação:** No contexto de **Componentes Básicos ️**, o conceito abordado (Identifique o componente) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Para que serve o método `.getText()`? **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Componentes Básicos ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 3: Como você faria para limpar todos os campos de um formulário após o usuário clicar em "Cancelar"? **Resposta Comentada:** - **Fundamentação:** No contexto de **Componentes Básicos ️**, o conceito abordado (Como você faria para limpar todos os campos de um formulário após o usuário clicar em "Cancelar"?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: Explique a diferença entre `JTextField` e `JPasswordField`. Qual deles é mais seguro para senhas e por quê? **Resposta Comentada:** - **Fundamentação:** No contexto de **Componentes Básicos ️**, o conceito abordado (Explique a diferença entre `JTextField` e `JPasswordField`. Qual deles é mais seguro para senhas e por quê?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 5: 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. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Componentes Básicos ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda.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
5. Projete a estrutura de uma calculadora simples (0-9, +, -, =) usando BorderLayout para o visor e GridLayout para os botões.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual componente você usaria para uma pergunta de "Sim/Não" independente? **Resposta Comentada:** - **Fundamentação:** No contexto de **Componentes Intermediários ️**, o conceito abordado (Qual componente você usaria para uma pergunta de "Sim/Não" independente?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Por que usar `Layout Managers` em vez de coordenadas fixas (X, Y)? **Resposta Comentada:** - **Fundamentação:** No contexto de **Componentes Intermediários ️**, o conceito abordado (Por que usar `Layout Managers` em vez de coordenadas fixas (X, Y)?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Descreva a diferença entre `FlowLayout` e `GridLayout`. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Componentes Intermediários ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 4: Como você garantiria que apenas um dos 4 `JRadioButtons` de uma pergunta fosse selecionado? **Resposta Comentada:** - **Fundamentação:** No contexto de **Componentes Intermediários ️**, o conceito abordado (Como você garantiria que apenas um dos 4 `JRadioButtons` de uma pergunta fosse selecionado?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 5: Projete a estrutura de uma calculadora simples (0 **Resposta Comentada:** - **Fundamentação:** No contexto de **Componentes Intermediários ️**, o conceito abordado (Projete a estrutura de uma calculadora simples (0) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.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
5. Projete (diagrama ou texto) a barra de menu de um software de "Controle Hospitalar". Quais menus e submenus seriam essenciais?
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Em quais ocasiões é melhor usar `JTabbedPane` em vez de criar várias janelas independentes? **Resposta Comentada:** - **Fundamentação:** No contexto de **Interfaces Avançadas**, o conceito abordado (Em quais ocasiões é melhor usar `JTabbedPane` em vez de criar várias janelas independentes?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Qual a relação entre uma `JTable` e um `TableModel`? **Resposta Comentada:** - **Fundamentação:** No contexto de **Interfaces Avançadas**, o conceito abordado (Qual a relação entre uma `JTable` e um `TableModel`?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Como você faria para capturar qual linha o usuário clicou em uma `JTable`? **Resposta Comentada:** - **Fundamentação:** No contexto de **Interfaces Avançadas**, o conceito abordado (Como você faria para capturar qual linha o usuário clicou em uma `JTable`?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: Escreva uma breve explicação sobre como o bloco `try **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Interfaces Avançadas**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 5: Projete (diagrama ou texto) a barra de menu de um software de "Controle Hospitalar". Quais menus e submenus seriam essenciais? **Resposta Comentada:** - **Fundamentação:** No contexto de **Interfaces Avançadas**, o conceito abordado (Projete (diagrama ou texto) a barra de menu de um software de "Controle Hospitalar". Quais menus e submenus seriam essenciais?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.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
5. Modele um banco de dados para uma "Livraria" com duas tabelas: Livro e Autor. Como você faria para ligar um livro a um autor?
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a diferença entre uma "Tabela" e um "Registro" em um banco de dados? **Resposta Comentada:** - **Fundamentação:** No contexto de **Introdução a Banco de Dados ️**, o conceito abordado (Qual a diferença entre uma "Tabela" e um "Registro" em um banco de dados?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Para que serve o comando `SELECT` em SQL? **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Introdução a Banco de Dados ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 3: Escreva o comando SQL para criar uma tabela chamada `cliente` com as colunas `id` (chave primária), `nome` (texto) e `email` (texto). **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Introdução a Banco de Dados ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 4: Explique por que não é recomendado guardar senhas de usuários em texto limpo (sem criptografia) no banco de dados. **Resposta Comentada:** - **Fundamentação:** No contexto de **Introdução a Banco de Dados ️**, o conceito abordado (Explique por que não é recomendado guardar senhas de usuários em texto limpo (sem criptografia) no banco de dados.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 5: Modele um banco de dados para uma "Livraria" com duas tabelas **Resposta Comentada:** - **Fundamentação:** No contexto de **Introdução a Banco de Dados ️**, o conceito abordado (Modele um banco de dados para uma "Livraria" com duas tabelas) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.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
5. Crie uma classe DatabaseAdmin que tenha um método para testar se o arquivo do banco de dados existe antes de tentar a conexão JDBC.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Qual a função do "Driver JDBC"? **Resolução e Implementação:**// Estrutura de implementação recomendada para Qual a função do "Driver JDBC"?
// Validação de regras de negócio e retorno consistente
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
5. Projete a classe FuncionarioDAO. Quais métodos ela deveria ter e quais seriam os parâmetros de cada um?
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Explique o que significa cada letra da sigla CRUD. **Resposta Comentada:** - **Fundamentação:** No contexto de **CRUD e DAO**, o conceito abordado (Explique o que significa cada letra da sigla CRUD.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Qual o objetivo principal de criar uma classe DAO? **Resolução e Implementação:**// Estrutura de implementação recomendada para Qual o objetivo principal de criar uma classe DAO?
// Validação de regras de negócio e retorno consistente
// Estrutura de implementação recomendada para Imagine um método `excluir(int id)` no DAO. Escreva o comando SQL que seria usado dentro dele.
// Validação de regras de negócio e retorno consistente
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
5. Escreva um bloco de código Java que tente realizar uma divisão por zero, capture a exceção e mostre um JOptionPane com uma mensagem educada para o usuário.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Explique por que a concatenação de strings em SQL (`"WHERE nome = '" + nome + "'"`) é perigosa. **Resposta Comentada:** - **Fundamentação:** No contexto de **Segurança e Boas Práticas ️**, o conceito abordado (Explique por que a concatenação de strings em SQL (`"WHERE nome = '" + nome + "'"`) é perigosa.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: O que é um "Log" de sistema? **Resposta Comentada:** - **Fundamentação:** No contexto de **Segurança e Boas Práticas ️**, o conceito abordado (O que é um "Log" de sistema?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Pesquise e explique brevemente o que é o princípio "DRY" (Don't Repeat Yourself). **Resposta Comentada:** - **Fundamentação:** No contexto de **Segurança e Boas Práticas ️**, o conceito abordado (Pesquise e explique brevemente o que é o princípio "DRY" (Don't Repeat Yourself).) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: Como um desenvolvedor pode usar o "Breakpoints" para encontrar um erro difícil no código? **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Segurança e Boas Práticas ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 5: Escreva um bloco de código Java que tente realizar uma divisão por zero, capture a exceção e mostre um `JOptionPane` com uma mensagem educada para o usuário. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Segurança e Boas Práticas ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda.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
5. 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á.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Quais são as 4 camadas obrigatórias que seu projeto final deve ter? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Integrador**, o conceito abordado (Quais são as 4 camadas obrigatórias que seu projeto final deve ter?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: O que é o arquivo de documentação `README.md` e por que ele é importante? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Integrador**, o conceito abordado (O que é o arquivo de documentação `README.md` e por que ele é importante?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Explique a importância de validar os dados na `View` antes de enviá **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Integrador**, o conceito abordado (Explique a importância de validar os dados na `View` antes de enviá) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: Como você organizaria o banco de dados do seu sistema para suportar a busca de registros por nome? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Integrador**, o conceito abordado (Como você organizaria o banco de dados do seu sistema para suportar a busca de registros por nome?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 5: 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á. **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Integrador**, o conceito abordado (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á.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Projetos
🚀 Projetos do Curso
Lista completa das 20 unidades de projetos organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
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 de Fixação
Lista completa das 20 unidades de quizzes organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
🧠 Quiz 01 – Introdução ao Desenvolvimento Desktop 🖥️
- Qual é o conceito fundamental e objetivo principal de Introdução ao Desenvolvimento Desktop 🖥️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Introdução ao Desenvolvimento Desktop 🖥️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Introdução ao Desenvolvimento Desktop 🖥️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Introdução ao Desenvolvimento Desktop 🖥️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Introdução ao Desenvolvimento Desktop 🖥️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Introdução ao Desenvolvimento Desktop 🖥️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Introdução ao Desenvolvimento Desktop 🖥️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Introdução ao Desenvolvimento Desktop 🖥️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Introdução ao Desenvolvimento Desktop 🖥️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Introdução ao Desenvolvimento Desktop 🖥️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 02 – Classes, Objetos e Instanciação 🧱
- Qual é o conceito fundamental e objetivo principal de Classes, Objetos e Instanciação 🧱?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Classes, Objetos e Instanciação 🧱?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Classes, Objetos e Instanciação 🧱, Objetos e Instanciação 🧱, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Classes, Objetos e Instanciação 🧱?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Classes, Objetos e Instanciação 🧱 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Classes, Objetos e Instanciação 🧱, Objetos e Instanciação 🧱, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Classes, Objetos e Instanciação 🧱?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Classes, Objetos e Instanciação 🧱 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Classes, Objetos e Instanciação 🧱 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Classes, Objetos e Instanciação 🧱 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 03 – Encapsulamento e Construtores 🔒
- Qual é o conceito fundamental e objetivo principal de Encapsulamento e Construtores 🔒?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Encapsulamento e Construtores 🔒?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Encapsulamento e Construtores 🔒, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Encapsulamento e Construtores 🔒?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Encapsulamento e Construtores 🔒 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Encapsulamento e Construtores 🔒, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Encapsulamento e Construtores 🔒?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Encapsulamento e Construtores 🔒 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Encapsulamento e Construtores 🔒 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Encapsulamento e Construtores 🔒 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 04 – Herança e Polimorfismo 🧬
- Qual é o conceito fundamental e objetivo principal de Herança e Polimorfismo 🧬?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Herança e Polimorfismo 🧬?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Herança e Polimorfismo 🧬, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Herança e Polimorfismo 🧬?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Herança e Polimorfismo 🧬 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Herança e Polimorfismo 🧬, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Herança e Polimorfismo 🧬?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Herança e Polimorfismo 🧬 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Herança e Polimorfismo 🧬 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Herança e Polimorfismo 🧬 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 05 – Classes Abstratas e Interfaces 🧩
- Qual é o conceito fundamental e objetivo principal de Classes Abstratas e Interfaces 🧩?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Classes Abstratas e Interfaces 🧩?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Classes Abstratas e Interfaces 🧩, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Classes Abstratas e Interfaces 🧩?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Classes Abstratas e Interfaces 🧩 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Classes Abstratas e Interfaces 🧩, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Classes Abstratas e Interfaces 🧩?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Classes Abstratas e Interfaces 🧩 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Classes Abstratas e Interfaces 🧩 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Classes Abstratas e Interfaces 🧩 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 06 – Organização de Projetos 📂
- Qual é o conceito fundamental e objetivo principal de Organização de Projetos 📂?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Organização de Projetos 📂?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Organização de Projetos 📂, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Organização de Projetos 📂?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Organização de Projetos 📂 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Organização de Projetos 📂, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Organização de Projetos 📂?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Organização de Projetos 📂 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Organização de Projetos 📂 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Organização de Projetos 📂 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 07 – Padrão MVC na Prática 🏗️
- Qual é o conceito fundamental e objetivo principal de Padrão MVC na Prática 🏗️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Padrão MVC na Prática 🏗️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Padrão MVC na Prática 🏗️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Padrão MVC na Prática 🏗️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Padrão MVC na Prática 🏗️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Padrão MVC na Prática 🏗️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Padrão MVC na Prática 🏗️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Padrão MVC na Prática 🏗️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Padrão MVC na Prática 🏗️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Padrão MVC na Prática 🏗️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 08 – Introdução à Interface Gráfica (GUI) 🎨
- Qual é o conceito fundamental e objetivo principal de Introdução à Interface Gráfica (GUI) 🎨?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Introdução à Interface Gráfica (GUI) 🎨?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Introdução à Interface Gráfica (GUI) 🎨, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Introdução à Interface Gráfica (GUI) 🎨?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Introdução à Interface Gráfica (GUI) 🎨 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Introdução à Interface Gráfica (GUI) 🎨, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Introdução à Interface Gráfica (GUI) 🎨?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Introdução à Interface Gráfica (GUI) 🎨 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Introdução à Interface Gráfica (GUI) 🎨 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Introdução à Interface Gráfica (GUI) 🎨 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 09 – Componentes Básicos 🏗️
- Qual é o conceito fundamental e objetivo principal de Componentes Básicos 🏗️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Componentes Básicos 🏗️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Componentes Básicos 🏗️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Componentes Básicos 🏗️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Componentes Básicos 🏗️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Componentes Básicos 🏗️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Componentes Básicos 🏗️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Componentes Básicos 🏗️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Componentes Básicos 🏗️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Componentes Básicos 🏗️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 10 – Componentes Intermediários 🎛️
- Qual é o conceito fundamental e objetivo principal de Componentes Intermediários 🎛️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Componentes Intermediários 🎛️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Componentes Intermediários 🎛️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Componentes Intermediários 🎛️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Componentes Intermediários 🎛️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Componentes Intermediários 🎛️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Componentes Intermediários 🎛️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Componentes Intermediários 🎛️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Componentes Intermediários 🎛️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Componentes Intermediários 🎛️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 11 – Interfaces Avançadas 📑
- Qual é o conceito fundamental e objetivo principal de Interfaces Avançadas 📑?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Interfaces Avançadas 📑?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Interfaces Avançadas 📑, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Interfaces Avançadas 📑?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Interfaces Avançadas 📑 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Interfaces Avançadas 📑, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Interfaces Avançadas 📑?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Interfaces Avançadas 📑 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Interfaces Avançadas 📑 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Interfaces Avançadas 📑 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 12 – Introdução a Banco de Dados 🗄️
- Qual é o conceito fundamental e objetivo principal de Introdução a Banco de Dados 🗄️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Introdução a Banco de Dados 🗄️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Introdução a Banco de Dados 🗄️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Introdução a Banco de Dados 🗄️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Introdução a Banco de Dados 🗄️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Introdução a Banco de Dados 🗄️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Introdução a Banco de Dados 🗄️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Introdução a Banco de Dados 🗄️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Introdução a Banco de Dados 🗄️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Introdução a Banco de Dados 🗄️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 13 – Conexão com Banco de Dados 🔌
- Qual é o conceito fundamental e objetivo principal de Conexão com Banco de Dados 🔌?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Conexão com Banco de Dados 🔌?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Conexão com Banco de Dados 🔌, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Conexão com Banco de Dados 🔌?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Conexão com Banco de Dados 🔌 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Conexão com Banco de Dados 🔌, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Conexão com Banco de Dados 🔌?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Conexão com Banco de Dados 🔌 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Conexão com Banco de Dados 🔌 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Conexão com Banco de Dados 🔌 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 14 – CRUD e DAO 💾
- Qual é o conceito fundamental e objetivo principal de CRUD e DAO 💾?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de CRUD e DAO 💾?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em CRUD e DAO 💾, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em CRUD e DAO 💾?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de CRUD e DAO 💾 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em CRUD e DAO 💾, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em CRUD e DAO 💾?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a CRUD e DAO 💾 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar CRUD e DAO 💾 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a CRUD e DAO 💾 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 15 – Segurança e Boas Práticas 🛡️
- Qual é o conceito fundamental e objetivo principal de Segurança e Boas Práticas 🛡️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Segurança e Boas Práticas 🛡️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Segurança e Boas Práticas 🛡️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Segurança e Boas Práticas 🛡️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Segurança e Boas Práticas 🛡️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Segurança e Boas Práticas 🛡️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Segurança e Boas Práticas 🛡️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Segurança e Boas Práticas 🛡️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Segurança e Boas Práticas 🛡️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Segurança e Boas Práticas 🛡️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 16 – Projeto Integrador 🚀
- Qual é o conceito fundamental e objetivo principal de Projeto Integrador 🚀?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Projeto Integrador 🚀?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Projeto Integrador 🚀, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Projeto Integrador 🚀?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Projeto Integrador 🚀 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Projeto Integrador 🚀, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Projeto Integrador 🚀?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Projeto Integrador 🚀 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Projeto Integrador 🚀 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Projeto Integrador 🚀 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 17 – JVM Internals, JIT Compiler e Garbage Collection 🚀
- Qual o propósito principal de JVM Internals, JIT Compiler e Garbage Collection 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de JVM Internals, JIT Compiler e Garbage Collection 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de JVM Internals, JIT Compiler e Garbage Collection 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar JVM Internals, JIT Compiler e Garbage Collection 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de JVM Internals, JIT Compiler e Garbage Collection 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em JVM Internals, JIT Compiler e Garbage Collection 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de JVM Internals, JIT Compiler e Garbage Collection 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a JVM Internals, JIT Compiler e Garbage Collection 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de JVM Internals, JIT Compiler e Garbage Collection 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a JVM Internals, JIT Compiler e Garbage Collection 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 18 – Concorrência de Alto Desempenho com Virtual Threads 🚀
- Qual o propósito principal de Concorrência de Alto Desempenho com Virtual Threads 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Concorrência de Alto Desempenho com Virtual Threads 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Concorrência de Alto Desempenho com Virtual Threads 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Concorrência de Alto Desempenho com Virtual Threads 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Concorrência de Alto Desempenho com Virtual Threads 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Concorrência de Alto Desempenho com Virtual Threads 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Concorrência de Alto Desempenho com Virtual Threads 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Concorrência de Alto Desempenho com Virtual Threads 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Concorrência de Alto Desempenho com Virtual Threads 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Concorrência de Alto Desempenho com Virtual Threads 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 19 – Arquitetura Modular Java (JPMS) e GraalVM 🚀
- Qual o propósito principal de Arquitetura Modular Java (JPMS) e GraalVM 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Arquitetura Modular Java (JPMS) e GraalVM 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Arquitetura Modular Java (JPMS) e GraalVM 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Arquitetura Modular Java (JPMS) e GraalVM 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Arquitetura Modular Java (JPMS) e GraalVM 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Arquitetura Modular Java (JPMS) e GraalVM 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Arquitetura Modular Java (JPMS) e GraalVM 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Arquitetura Modular Java (JPMS) e GraalVM 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Arquitetura Modular Java (JPMS) e GraalVM 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Arquitetura Modular Java (JPMS) e GraalVM 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 20 – Projeto Capstone: Sistema Java GraalVM Nativo 🚀
- Qual o propósito principal de Projeto Capstone: Sistema Java GraalVM Nativo 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Projeto Capstone: Sistema Java GraalVM Nativo 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Projeto Capstone: Sistema Java GraalVM Nativo 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Projeto Capstone: Sistema Java GraalVM Nativo 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Projeto Capstone: Sistema Java GraalVM Nativo 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Projeto Capstone: Sistema Java GraalVM Nativo 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Projeto Capstone: Sistema Java GraalVM Nativo 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Projeto Capstone: Sistema Java GraalVM Nativo 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Projeto Capstone: Sistema Java GraalVM Nativo 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Projeto Capstone: Sistema Java GraalVM Nativo 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
Slides
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.
Setup 04: Java e JDK ☕
1. JDK (Java Development Kit)
O kit essencial para compilar Java.
1. Baixe o JDK 17 LTS (ou 21 LTS) no site da Oracle ou Adoptium.
2. Instale e configure a variável de ambiente JAVA_HOME.
3. Teste: java -version.
2. IntelliJ IDEA (Recomendado)
A melhor IDE para Java/Kotlin. 1. Baixe a versão Community (Gratuita) em jetbrains.com/idea. 2. Instale.
3. VS Code
Se preferir o VS Code: 1. Instale o "Extension Pack for Java" da Microsoft.
4. Solução de Problemas Comuns ⚠️
- 'javac' não reconhecido: A variável de ambiente
JAVA_HOMEou oPathestão errados. Verifique se apontam para a pastabindo JDK. - Erro: "Class names are only accepted...": O nome do arquivo DEVE ser igual ao nome da classe (ex:
Ola.javatem que terpublic class Ola). - Versão antiga do Java: Digite
java -versionpara conferir se está usando a versão que acabou de instalar.
Setup 05: .NET (C# e F#) 🔷
1. .NET SDK
Necessário para rodar C# e F#.
1. Baixe o .NET 8.0 SDK (LTS) em dotnet.microsoft.com.
2. Instale.
3. Teste: dotnet --version.
2. Visual Studio Community
A IDE mais completa para Windows. 1. Baixe em visualstudio.microsoft.com. 2. No instalador, selecione a carga de trabalho: "Desenvolvimento para desktop com .NET".
3. VS Code + C# Dev Kit
Para uma experiência mais leve: 1. Instale a extensão "C# Dev Kit" da Microsoft.
4. Solução de Problemas Comuns ⚠️
- 'dotnet' não encontrado: Reinicie o computador após instalar o SDK.
- Erro de Certificado HTTPS: Na primeira execução, rode
dotnet dev-certs https --trustpara confiar no certificado local. - OmniSharp Error: Se o VS Code reclamar, verifique se instalou o C# Dev Kit e se o SDK é compatível.
Setup 06: Python 🐍
1. Interpretador Python
- Baixe a versão mais recente em python.org.
- IMPORTANTE: Marque a caixa "Add Python to PATH" na instalação!
- Teste:
python --versionoupy --version.
2. PyCharm Community
A IDE mais poderosa para Python. 1. Baixe em jetbrains.com/pycharm.
3. VS Code + Python
- Instale a extensão "Python" da Microsoft.
- Instale a extensão "Jupyter" se quiser usar Notebooks.
4. Solução de Problemas Comuns ⚠️
- 'python' não encontrado: É o erro mais comum. Reinstale e marque a caixa "Add Python to PATH".
- Comando 'python' abre a Microsoft Store: Vá nas configurações do Windows ("Gerenciar Aliases de Execução de Aplicativo") e DESATIVE os itens do "Instalador de Aplicativo" para Python.
- Pip não funciona: Tente
python -m pip install pacote.
Setup 07: Sistemas (Rust e Go) ⚙️
Rust 🦀
O Rust usa o gerenciador rustup.
1. Acesse rustup.rs.
2. Baixe e execute o rustup-init.
3. Aceite o padrão (opção 1).
4. Reinicie o terminal e teste: cargo --version.
5. VS Code: Instale a extensão "rust-analyzer".
Go (Golang) 🐹
- Baixe em go.dev.
- Instale (Next, Next, Finish).
- Teste:
go version. - VS Code: Instale a extensão "Go" oficial.
4. Solução de Problemas Comuns ⚠️
- 'cargo' não encontrado: Reinicie o terminal. Se não funcionar, adicione
~/.cargo/bin(Linux/Mac) ou%USERPROFILE%\.cargo\bin(Windows) ao PATH. - Go Path: Certifique-se de que a variável
GOPATHestá configurada corretamente (geralmenteC:\Users\SeuUsuario\go). - Erro de Linker (Rust): No Windows, pode faltar as ferramentas de build do C++. Baixe o "Build Tools for Visual Studio".
Setup 08: Mobile (Flutter e Kotlin) 📱
Desenvolvimento mobile exige ferramentas mais pesadas.
1. Android Studio
Essencial para emular celulares Android e programar em Kotlin/Java nativo. 1. Baixe em developer.android.com/studio. 2. Instale e deixe ele baixar o Android SDK.
2. Flutter SDK
Para desenvolvimento Dart multiplataforma.
1. Baixe o SDK em flutter.dev.
2. Extraia para C:\src\flutter (exemplo).
3. Adicione C:\src\flutter\bin ao Path do Windows.
4. Rode flutter doctor no terminal para verificar o que falta.
3. VS Code
O editor preferido para Flutter. 1. Instale a extensão "Flutter" (ela instala a do Dart automaticamente).
4. Solução de Problemas Comuns ⚠️
- flutter doctor com erros: É normal. Siga o que ele diz. Geralmente é aceitar licenças (
flutter doctor --android-licenses). - Emulador não abre (HAXM/Hyper-V): Seu processador precisa ter virtualização ativada na BIOS.
- Gradle demorando: A primeira vez demora MUITO (baixa a internet inteira). Tenha paciência.
Setup 09: PHP e Servidor Local 🐘
Como o PHP roda no servidor, precisamos simular um servidor no nosso computador.
1. XAMPP (Tudo em Um)
O pacote mais fácil. Inclui Apache (Servidor), MySQL (Banco) e PHP.
1. Baixe em apachefriends.org.
2. Instale e abra o XAMPP Control Panel.
3. Clique em Start no Apache e MySQL.
4. Seus arquivos devem ficar na pasta C:\xampp\htdocs.
2. Composer (Gerenciador de Pacotes)
Essencial para usar bibliotecas modernas e frameworks como Laravel. 1. Baixe em getcomposer.org. 2. Instale. Ele deve encontrar seu PHP automaticamente.
3. Laravel (Opcional)
Para criar projetos profissionais:
4. Solução de Problemas Comuns ⚠️
- Apache não inicia (Port 80 busy): Skype ou IIS podem estar usando a porta 80. No XAMPP, vá em Config -> httpd.conf e mude
Listen 80paraListen 8080. - MySQL não conecta: Verifique se o serviço está verde no XAMPP.
- Erro de DLL: Pode faltar o "Visual C++ Redistributable" no seu Windows. Atualize-o.
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
Roadmap do Projeto 🗺️
Este documento descreve a evolução do aprendizado ao longo das 16 aulas.
graph TD
A1[Aula 01: Introdução] --> A2[Aula 02-05: Fundamentos OO]
A2 --> A3[Aula 06-07: Arquitetura MVC]
A3 --> A4[Aula 08-11: Interfaces GUI]
A4 --> A5[Aula 12-15: Banco de Dados/DAO]
A5 --> A6[Aula 16: Projeto Final 🚀]
📈 Marcos do Aprendizado
- Marco 1: Pensamento OO (Aulas 01-05)
Capacidade de abstrair problemas reais em classes e objetos.
- Marco 2: Organização Profissional (Aulas 06-07)
Aplicação de padrões de mercado para estruturação de software.
- Marco 3: Domínio da Interface (Aulas 08-11)
Criação de janelas e componentes que interagem com o usuário.
- Marco 4: Persistência Robusta (Aulas 12-15)
Integração segura com bancos de dados relacionais.
- Marco Final: O Desenvolvedor Desktop (Aula 16)
Entrega de um sistema completo e funcional.
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.
🏷️ Índice de Tags Didáticas
Navegue pelas aulas, exercícios e projetos do curso organizados por temas, tecnologias e conceitos fundamentais:
tags.md:145-167/name
Versão para Impressão
Esta página foi gerada automaticamente para impressão.