Formação Java
[ 100 horas aula ]
É um curso com os 3 mais reconhecidos módulos de Java do mercado:
Ao término dessas 100 horas de curso, divididos em 3 módulos, você estará capacitado a desenvolver sistemas para web usando Java com os padrões, bibliotecas e frameworks mais reconhecidos pelo mercado, além de desenvolver para desktop usando Swing e conhecer os poderosos recursos do Eclipse 3 e seus plugins.
Um curso completo com os nossos qualificados instrutores, a um preço acessível com facilidade de pagamento. Entre em contato conosco, você também pode conversar diretamente com um dos instrutores.
Pré-requisitos: lógica de programação e conhecimento de alguma linguagem procedural (visual basic, delphi, c, php, etc)
Conteúdo detalhado do FormacaoJava
Como Aprender Java
- O que é realmente importante?
- Sobre os exercícios
- Tirando dúvidas
- Bibliografia
O que é Java
- Java
- Máquina Virtual
- Java lento? Hotspot e JIT
- Versões do Java e a confusão do Java2
- JVM? JRE? JDK? O que devo baixar?
- Onde usar e os objetivos do Java
- Especificação versus implementação
- Como o FJ-11 está organizado
- Compilando o primeiro programa
- Executando seu primeiro programa
- O que aconteceu?
- Para saber mais: como é o bytecode?
- Exercícios: Modificando o Hello World
- O que pode dar errado?
- Um pouco mais...
- Exercícios adicionais
Variáveis primitivas e Controle de fluxo
- Declarando e usando variáveis
- Tipos primitivos e valores
- Exercícios: Variáveis e tipos primitivos
- Discussão em aula: convenções de código e código legível
- Casting e promoção
- O If-Else
- O While
- O For
- Controlando loops
- Escopo das variáveis
- Um bloco dentro do outro
- Para saber mais
- Exercícios: Fixação de sintaxe
- Desafios: Fibonacci
Orientação a objetos básica
- Motivação: problemas do paradigma procedural
- Criando um tipo
- Uma classe em Java
- Criando e usando um objeto
- Métodos
- Métodos com retorno
- Objetos são acessados por referências
- O método transfere()
- Continuando com atributos
- Para saber mais: Uma Fábrica de Carros
- Um pouco mais...
- Exercícios: Orientação a Objetos
- Desafios
- Fixando o conhecimento
Um pouco de arrays
- O problema
- Arrays de referências
- Percorrendo uma array
- Percorrendo uma array no Java 5.0
- Exercícios: Arrays
- Um pouco mais...
- Desafios
- Testando o conhecimento
Modificadores de acesso e atributos de classe
- Controlando o acesso
- Encapsulamento
- Getters e Setters
- Construtores
- A necessidade de um construtor
- Atributos de classe
- Um pouco mais...
- Exercícios: Encapsulamento, construtores e static
- Desafios
Orientação a Objetos – herança, reescrita e polimorfismo
- Repetindo código?
- Reescrita de método
- Invocando o método reescrito
- Polimorfismo
- Um outro exemplo
- Um pouco mais...
- Exercícios: Herança e Polimorfismo
- Dicussões em aula: Alternativas ao atributo protected
Eclipse IDE
- O Eclipse
- Apresentando o Eclipse
- Views e Perspective
- Criando um projeto novo
- Criando o main
- Rodando o main
- Pequenos truques
- Exercícios: Eclipse
- Discussão em aula: Refactoring
Orientação a Objetos – Classes Abstratas
- Repetindo mais código?
- Classe abstrata
- Métodos abstratos
- Aumentando o exemplo
- Para saber mais...
- Exercícios: Classes Abstratas
- Desafios
Orientação a Objetos - Interfaces
- Aumentando nosso exemplo
- Interfaces
- Dificuldade no aprendizado de interfaces
- Exemplo interessante: conexões com o banco de dados
- Um pouco mais...
- Exercícios: Interfaces
- Exercícios avançados opcionais
- Discussão em aula: Favorecer composição em relação à herança
Controlando os erros com Exceções
- Motivação
- Exercício para começar com os conceitos
- Exceções de Runtime mais comuns
- Outro tipo de exceção: Checked Exceptions
- Um pouco da grande famíla Throwable
- Mais de um erro
- Lançando exceções
- O que colocar dentro do try?
- Criando seu próprio tipo de exceção
- Para saber mais: finally
- Exercícios: Exceções
- Desafios
- Discussão em aula: catch e throws em Exception
Pacotes - Organizando suas classes e bibliotecas
- Organização
- Diretórios
- Import
- Acesso aos atributos, construtores e métodos
- Usando o Eclipse com pacotes
- Exercícios: Pacotes
Ferramentas: jar e javadoc
- Arquivos, bibliotecas e versões
- Gerando o JAR pelo Eclipse
- Javadoc
- Gerando o Javadoc
- Exercícios: Jar e Javadoc
O pacote java.lang
- Pacote java.lang
- Um pouco sobre a classe System
- java.lang.Object
- Casting de referências
- Métodos do java.lang.Object: equals e toString
- Integer e classes wrappers (box)
- Autoboxing no Java 5.0
- java.lang.String
- java.lang.Math
- Exercícios: java.lang
- Desafio
- Discussão em aula: O que você precisa fazer em Java?
Pacote java.io
- Conhecendo uma API
- Orientação a objetos
- InputStream, InputStreamReader e BufferedReader
- Lendo Strings do teclado
- A analogia para a escrita: OutputStream
- Uma maneira mais fácil: Scanner e PrintStream
- Um pouco mais...
- Exercícios: Java I/O
- Discussão em aula: Design Patterns e o Template Method
Collections framework
- Arrays são trabalhosos, utilizar estrutura de dados
- Listas: java.util.List
- Listas no Java 5.0 com Generics
- A importância das interfaces nas coleções
- Ordenação: Collections.sort
- Exercícios: Ordenação
- Conjunto: java.util.Set
- Principais interfaces: java.util.Collection
- Percorrendo coleções no Java 5
- Para saber mais: Iterando sobre coleções com java.util.Iterator
- Mapas - java.util.Map
- Para saber mais: Properties
- Para saber mais: Equals e HashCode
- Para saber mais: Boas práticas
- Exercícios: Collections
- Desafios
Programação Concorrente e Threads
- Threads
- Escalonador e trocas de contexto
- Garbage Collector
- Para saber mais: problemas com concorrência
- Para saber mais: Vector e Hashtable
- Um pouco mais...
- Exercícios
- Exercícios avançados de programação concorrente e locks
E agora?
- Exercício prático
- Certificação
- Web
- Revistas
- Grupos de Usuários
- Falando em Java - Próximos módulos
Apêndice - Sockets
- Motivação: uma API que usa os conceitos aprendidos
- Protocolo
- Porta
- Socket
- Servidor
- Cliente
- Imagem geral
- Exercícios: Sockets
- Desafio: Múltiplos Clientes
- Desafio: broadcast das mensagens
- Solução do sistema de chat
Apêndice - Instalação do Java
- Escolhendo a VM
- Instalando no Ubuntu e outros Linux
- No Mac OS X e Solaris
- Instalação do JDK em ambiente Windows
Apêndice - Debugging
- O que é debugar
- Debugando no Eclipse
- Perspectiva de debug
- Degub avançado
- Profiling
- Profiling no Eclipse
Enfrentando o Java na Web
- O grande mercado do Java na Web
- Bibliografia
Bancos de dados e JDBC
- Por que usar um banco de dados?
- Persistindo através de Sockets?
- A conexão em Java
- Fábrica de Conexões
- Design Patterns
- Exercícios: ConnectionFactory
- A tabela Contato
- Javabeans
- Inserindo dados no banco
- DAO - Data Access Object
- Exercícios: Javabeans e ContatoDAO
- Fazendo pesquisas no banco de dados
- Exercícios: Listagem
- Um pouco mais...
- Exercícios opcionais
- Outros métodos para o seu DAO
- Exercícios opcionais - Alterar e remover
O que é Java EE?
- Como o Java EE pode te ajudar a enfrentar problemas
- Algumas especificações do Java EE
- Servidor de Aplicação
- Servlet Container
- Preparando o Tomcat
- Preparando o Tomcat em casa
- Outra opção: Jetty
- Integrando o Tomcat no Eclipse
- O plugin WTP
- Configurando o Tomcat no WTP
Novo projeto Web usando Eclipse
- Novo projeto
- Análise do resultado final
- Criando nossas páginas e HTML Básico
- Exercícios: primeira página
- Para saber mais: configurando o Tomcat sem o plugin
- Algumas tags HTML
Servlets
- Páginas dinâmicas
- Servlets
- Mapeando uma servlet no web.xml
- A estrutura de diretórios
- Exercícios: Primeira Servlet
- Erros comuns
- Enviando parâmetros na requisição
- Pegando os parâmetros da requisição
- Exercícios: Criando funcionalidade para gravar contatos
- GET, POST e métodos HTTP
- Tratando exceções dentro da Servlet
- Exercício: Tratando exceções e códigos HTTP
- Init e Destroy
- Uma única instância de cada servlet
- Para saber mais: Facilidades das Servlets 3.0
- Discussão: Criando páginas dentro de uma servlet
JavaServer Pages
- Colocando o HTML no seu devido lugar
- Exercícios: Primeiro JSP
- Listando os contatos com Scriptlet
- Exercícios: Lista de contatos com scriptlet
- Exercícios opcionais
- Misturando código Java com HTML
- EL: Expression language
- Exercícios: parâmetros com a Expression Language
- Para saber mais: Compilando os arquivos JSP
Usando Taglibs
- Taglibs
- Instanciando POJOs
- JSTL
- Instalação
- Cabeçalho para a JSTL core
- For
- Exercícios: forEach
- Exercício opcional
- Evoluindo nossa listagem
- Fazendo ifs com a JSTL
- Exercícios: Melhorando a lista de contatos com condicionais
- Importando páginas
- Exercícios: Adicionando cabeçalhos e rodapés
- Trabalhando com links
- Exercícios: Caminho absoluto
- Formatando as datas
- Exercícios: Formatando a data de nascimento dos contatos
- Para saber mais: Outras tags
Indo além da JSTL
- Porque eu precisaria de outras tags além da JSTL?
- Criando minhas próprias tags com Tagfiles
- Exercícios: criando nossa própria tag para calendário
- Para saber mais: Outras taglibs no mercado
- Desafio: Colocando displaytag no projeto
MVC - Model View Controller
- Servlet ou JSP?
- Request Dispatcher
- Exercícios: RequestDispatcher
- Melhorando o processo
- Retomando o ::design pattern:: Factory
- A configuração do web.xml
- Exercícios: Criando nossas lógicas e servlet de controle
- Exercícios: Lógica para alterar contatos
- Exercícios opcionais
- Model View Controller
- Lista de tecnologias: camada de controle
- Lista de tecnologias: camada de visualização
- Discussão em aula: os padrões Command e Front Controller
Recursos importantes: Filtros e WAR
- Reduzindo o acoplamento com Filtros
- Exercícios opcionais: Filtro para medir o tempo de execução
- Problemas na criação das conexões
- Tentando outras estratégias
- Reduzindo o acoplamento com Filtros
- Exercícios: Filtros
- Deploy do projeto em outros ambientes
- Exercícios: Deploy com war
Struts 2
- Porque precisamos de frameworks MVC?
- Um pouco de história
- Configurando o Struts 2
- Criando as lógicas
- A lógica Olá Mundo!
- Exercícios: Configurando o Struts 2 e testando a configuração
- Adicionando tarefas e passando parâmetros à Action
- Exercícios: Criando tarefas
- Incluindo validação no cadastro de tarefas
- Exercícios: Validando tarefas
- Listando as tarefas e disponibilizando objetos para a view
- Exercícios: Listando tarefas
- Redirecionando a requisição para outra Action
- Exercícios: Removendo e alterando tarefas
- Desafio
- Para saber mais: Outras formas de se trabalhar com o Struts 2
- Melhorando a usabilidade da nossa aplicação
- Exercícios: Utilizando AJAX para marcar tarefas como finalizadas
Struts 2: Autenticação e autorização
- Autenticando usuários: como funciona?
- Cookies
- Sessão
- Configurando o tempo limite
- Registrando o usuário logado na sessão
- Exercício: Fazendo o login na aplicação
- Bloqueando acessos de usuários não logados com Interceptadores
- Exercícios: Interceptando as requisições
- Discussão: Qual a diferença entre Filtro e Interceptor?
Uma introdução prática ao Hibernate
- Mapeamento Objeto Relacional
- Criando seu projeto para usar o Hibernate
- Mapeando uma classe Produto para nosso Banco de Dados
- Configurando o Hibernate com as propriedades do banco
- Criando nosso banco com o Hibernate
- Exercícios: preparando nosso projeto para o Hibernate
- Exercícios: configurando e gerando o schema do banco
- Trabalhando com os objetos: a Session
- Exercícios: o HibernateUtil e gravando objetos
- Criando um DAO para o Hibernate
- Exercícios: criando o DAO
- Buscando com uma cláusula where
- Exercícios
- Exercícios opcionais: para testar o LAZY
- Exercício opcional
E agora?
- Os apêndices dessa apostila
- Certificação SCWCD
- Frameworks Web
- Frameworks de persistência
- Onde seguir seus estudos
Apêndice - VRaptor3 e produtividade na Web
- Motivação: evitando APIs complicadas
- Vantagens de um codigo independente de Request e Response
- VRaptor 3
- A classe de modelo
- Minha primeira lógica de negócios
- Redirecionando após a inclusão
- Criando o formulário
- A lista de produtos
- Exercícios
- Aprofundando em Injeção de Dependências e Inversão de Controle
- Injeção de Dependências com o VRaptor
- Escopos dos componentes
- Exercícios: Usando Injeção de Dependências para o DAO
- Adicionando segurança em nossa aplicação
- Interceptando requisições
- Exercícios: Construindo a autenticação e a autorização
- Melhorando a usabilidade da nossa aplicação
- Para saber mais: Requsições: Síncrono x Assíncrono
- Para saber mais: AJAX
- Adicionando AJAX na nossa aplicação
- Exercícios opcionais: Adicionando AJAX na nossa aplicação
Apêndice - Servlets 3.0 e Java EE 6
- Java EE 6 e as novidades
- Suporte a anotações: @WebServlet
- Suporte a anotações: @WebFilter
- Preparando o Glassfish v3.0 em casa
- Preparando o Glassfish v3.0 no WTP
- Nossa aplicação usando o Glassfish
- Exercício: Usando anotação @WebServlet
- Exercício: Alterando nosso framework MVC
- Exercício: Alterando nosso FiltroConexao
- Processamento assíncrono
- Plugabilidade e Web fragments
- Registro dinâmico de Servlets
Apêndice - Tópicos da Servlet API
- Init-params e context-params
- welcome-file-list
- Propriedades de páginas JSP
- Inclusão estática de arquivos
- Tratamento de erro em JSP
- Descobrindo todos os parâmetros do request
- Trabalhando com links com a c:url
- Context listener
- O ServletContext e o escopo de aplicação
- Outros listeners
Apêndice - Struts 1
- Struts 1 e o mercado
- Exercícios: Configurando o Struts
- Uma ação Struts
- Configurando a ação no struts-config.xml
- Exercícios: TesteSimplesAction
- Erros comuns
- Pesquisando um banco de dados
- Criando a ação
- O arquivo WebContent/lista.jsp
- ListaContatos no struts-config.xml
- Exercício: ListaContatosAction
- Resultado condicional com o Struts
- Exercícios: listagem vazia
- Resultado do struts-config.xml
- Novos contatos
- Formulário
- Mapeando o formulário no arquivo struts-config.xml
- Exercício: ContatoForm
- Erro comum
- Lógica de Negócios
- Exercício: AdicionaContatoAction
- Erros comuns
- Arquivo de mensagens
- Exercícios: Mensagens
- Erros comuns
- Validando os campos
- Exercício: validação
- Erros comuns
- Exercícios opcionais
- Limpando o formulário
- Exercícios: scope
- Exercícios opcionais
- O mesmo formulário para duas ações
- Exercícios opcionais
- Para saber mais
Tornando-se um desenvolvedor pragmático
- O que é realmente importante?
- A importância dos exercícios
- Tirando dúvidas
- Mais bibliografia
- Para onde ir depois?
O modelo da bolsa de valores, datas e objetos imutáveis
- A bolsa de valores
- Candlesticks: O Japão e o arroz
- O projeto Tail
- O projeto Argentum: modelando o sistema
- Palavra chave final
- Imutabilidade de objetos
- Trabalhando com datas: %%Date%% e %%Calendar%%
- Exercícios: o modelo do Argentum
- Exercícios: fábrica de Candlestick
- Exercícios opcionais
Testes Automatizados
- Nosso código está funcionando corretamente?
- Exercícios: testando nosso modelo sem frameworks
- Definindo melhor o sistema e descobrindo mais bugs
- Testes unitários
- JUnit
- Anotações
- JUnit 4 e suas anotações
- Test Driven Development - TDD
- Exercícios: migrando os testes do main para JUnit
- Exercícios: novos testes
- Para saber mais: Import Estático
- Mais exercícios opcionais
- Discussão em aula: testes são importantes?
Trabalhando com XML
- Os dados da bolsa de valores
- XML
- Lendo XML com Java de maneira difícil, o SAX
- XStream
- Exercícios: Lendo o XML
- Exercícios: Separando os candles
- Exercícios opcionais
- Discussão em aula: Onde usar XML e o abuso do mesmo
Interfaces gráficas com Swing
- Interfaces gráficas em Java
- Portabilidade
- Look And Feel
- Componentes
- Começando com Swing - Diálogos
- Exercícios: Escolhendo o XML com JFileChooser
- Componentes: JFrame, JPanel e JButton
- O design pattern Composite: Component e Container
- Tratando eventos
- Classes internas e anônimas
- Exercícios: nossa primeira tela
- JTable
- Implementando um TableModel
- Exercícios: Tabela
- Formatando Datas: DateFormat
- Exercícios: formatação
- Para saber mais
- Discussão em sala de aula: Listeners como classes top level, internas ou anônimas?
Refatoração: os Indicadores da bolsa
- Análise Técnica da bolsa de valores
- Indicadores Técnicos
- As médias móveis
- Exercícios: criando indicadores
- Refatoração
- Exercícios: Primeiras refatorações
- Nossos indicadores e o design pattern Strategy
- Exercícios: refatorando para uma interface e usando bem os testes
- Exercícios opcionais
- Discussão em aula: quando refatorar?
Gráficos com JFreeChart
- JFreeChart
- Utilizando o JFreeChart
- Isolando a API do JFreeChart: baixo acoplamento
- Para saber mais: Design Patterns Factory Method e Builder
- Exercícios: JFreeChart
- Exercícios opcionais
- Indicadores mais Elaborados e o Design Pattern Decorator
- Exercícios: Indicadores mais espertos e o Design Pattern Decorator
- Desafio: Imprimir Candles
- Desafio: Fluent Interface
Mais Swing: layout managers, mais componentes e detalhes
- Gerenciadores de Layout
- Layout managers mais famosos
- Exercícios: usando layout managers
- Integrando JFreeChart
- Exercícios: completando a tela da nossa aplicação
- Input de dados formatados: Datas
- Exercícios: filtrando por data
- Para saber mais: barra de menu
- Exercícios opcionais: escolher os indicador(es) para o gráfico
- Discussão em sala de aula: uso de IDEs para montar a tela
Reflection e Annotations
- Por que Reflection?
- Reflection: Class, Method
- Usando anotações
- Usar JTables é difícil
- Criando sua própria anotação
- Lendo anotação com Reflection
- TableModel com Reflection
- Exercícios: ReflectionTableModel
- Para saber mais: Formatter, printf e String.format
- Exercícios opcionais
- Discussão em sala de aula: quando usar reflection, anotações e interfaces
Apêndice: O processo de Build: Ant e Maven
- O processo de build
- O Ant
- Exercícios com Ant
- O Maven
- O Project Object Model
- Plugins, goals e phases
- Exercícios: build com o Maven
- Discussão em sala de aula: IDE, ant ou Maven?
Apêndice - Swing Avançado
- Dificuldades com Threads e concorrência
- SwingWorker
- Exercícios: resolvendo concorrência com SwingWorker
- Para saber mais: A parte do JFreeChart
Apêndice - Logging com Log4j
- Usando logs - LOG4J
- Exercícios: Adicionando logging com Log4J

