Formação Java
[ 100 horas aula ]
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 de programação (Visual Basic, Delphi, C, PHP, ASP, etc)
A opinião de quem fez o FormacaoJava
Cursei o Fj-11, Fj-21 e Fj-16 e fiquei muito satisfeito Já tinha algum conhecimento sobre Java, mas após cursar estes módulos me senti conhecendo muito mais sobre Java, além de perceber que há muito mais por aprender, tanto, que planejo fazer outros módulos futuramente. Gostaria também de ressaltar a qualidade e o jeito atencioso dos instrutores. Para mim, sem dúvida, este é o grande diferencial da Caelum.
Ivo La Puma, Raia Drogasil S/A em 01/04/2012
Após terceiro treinamento na Caelum [FJ-11, FJ-21, FJ-16], mais uma vez as expectativas foram atendidas. Apesar de ser um curso mais curto [o FJ-16], o conteúdo é passado de forma bacana, para que todos possam acompanhar. Ótimas referências da escola e sempre que possível espero realizar novos treinamentos aqui.
Emerson Cora, Raia Drogasil S/A em 01/04/2012
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
- Discussõ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 no java.io
- 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?
- Praticando Java e usando bibliotecas
- Web
- Certificação
- 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
- Debug avançado
- Profiling
- Profiling no Eclipse TPTP
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
- Exercícios opcionais
- 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
- ForEach
- 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
- Formatando as datas
- Exercícios: Formatando a data de nascimento dos contatos
- Para saber mais: Trabalhando com links com
- Exercícios opcionais: Caminho absoluto
- Para saber mais: Outras tags
Tags customizadas com Tagfiles
- Porque eu precisaria de outras tags além da JSTL?
- Calendários com JQuery
- 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
- 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
Spring MVC
- Porque precisamos de frameworks MVC?
- Um pouco de história
- Configurando o Spring MVC
- Criando as lógicas
- A lógica Olá Mundo!
- Para saber mais: Configurando o Spring MVC em casa
- Exercícios: Configurando o Spring MVC e testando a configuração
- Adicionando tarefas e passando parâmetros
- Exercícios: Criando tarefas
- Incluindo validação no cadastro de tarefas
- Validação com Bean Validation
- Exercícios: Validando tarefas
- Listando as tarefas e disponibilizando objetos para a view
- Exercícios: Listando tarefas
- Redirecionando a requisição para outra ação
- Exercícios: Removendo e alterando tarefas
- Desafio - Calendário
- Melhorando a usabilidade da nossa aplicação
- Utilizando AJAX para marcar tarefas como finalizadas
- Configurar o Spring MVC para acessar arquivos comuns
- Exercícios: Ajax
Spring MVC: Autenticação e autorização e deploy da aplicaçao
- 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
- Exercícios opcionais: Logout
- Deploy do projeto em outros ambientes
- Exercícios: Deploy com war
- Discussão em aula: lidando com diferentes nomes de contexto
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
- Usando o Hibernate
- Exercícios: configurando e gerando o schema do banco
- Trabalhando com os objetos: a Session
- Exercícios: Gravando e Carregando objetos
- Buscando com uma cláusula where
- Exercícios: Buscando com HQL
E agora?
- Os apêndices dessa apostila
- Certificação SCWCD
- Frameworks Web
- Frameworks de persistência
- Onde seguir seus estudos
Apêndice - Mais Hibernate
- Exercícios: o HibernateUtil e gravando objetos
- Criando um DAO para o Hibernate
- Exercícios: criando o DAO
- Buscando com Criteria
- Exercícios
- Exercícios opcionais: para testar o LAZY
- Exercício opcional
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
Apêndice - 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!
- Para saber mais: Configurando o Struts 2 em casa
- 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 - Calendário
- Diminuindo o acoplamento
- Exercícios: Action sem classe
- Para saber mais: Outras formas de se trabalhar com o Struts 2
- Melhorando a usabilidade da nossa aplicação
- Utilizando AJAX para marcar tarefas como finalizadas
- Exercícios: Ajax
- 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
- Interceptadores Padrões
- Exercícios: Interceptando as requisições
- Exercícios opcionais: Aplicando o interceptador em todas as actions
- Exercícios opcionais: Logout
- Deploy do projeto em outros ambientes
- Exercícios: Deploy com war
- Discussão em aula: lidando com diferentes nomes de contexto
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
- Trabalhando com dinheiro
- Palavra chave final
- Imutabilidade de objetos
- Trabalhando com datas: %%Date%% e %%Calendar%%
- Exercícios: o modelo do Argentum
- Resumo diário dos negócios
- 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 de Unidade
- JUnit
- Anotações
- JUnit4, convenções e anotação
- Exercícios: migrando os testes do main para JUnit
- Vale a pena testar classes de modelo?
- 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
- Separando as candles
- Test Driven Design - TDD
- 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 - Mensagens
- 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
- Exercícios opcionais: melhorando a apresentaçã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
- Refatorações maiores
- 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
- Nossos indicadores e o design pattern Strategy
- Exercícios: refatorando para uma interface e usando bem os testes
- Exercícios opcionais
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
- Indicadores mais Elaborados e o Design Pattern Decorator
- Exercícios: Indicadores mais espertos e o Design Pattern Decorator
- Discussão em sala de aula: uso de IDEs para montar a tela
Reflection e Annotations
- Por que Reflection?
- Class, Field e Method
- Usando anotações
- Usar JTables é difícil
- Usando bem anotações
- Criando sua própria anotação
- Exercícios: ArgentumTableModel
- Exercícios opcionais: nomes das colunas
- Para saber mais: Formatter, printf e String.format
- Para saber mais: parâmetros opcionais
- Exercícios opcionais: formatações na tabela
- 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
- Uso dentro do Eclipse
- Discussão em sala de aula: IDE, ant ou Maven?
Apêndice - Mais swing e recursos avançados
- Input de dados formatados: Datas
- Exercícios opcionais: filtrando por data
- Para saber mais: barra de menu
- Exercício: escolhendo indicadores para o gráfico
- Dificuldades com Threads e concorrência
- SwingWorker
- Exercícios: pesquisando mais na API
Apêndice - Logging com Log4j
- Usando logs - LOG4J
- Níveis de logs
- Appenders e layout
- Exercícios: Adicionando logging com Log4J
- O sl4j
* Os apêndices listados são conteúdos adicionais que não fazem parte do curso regular.

