FJ-91 - Arquitetura e Design de Projetos Java
Confuso com tantos design patterns, padrões, frameworks e boas práticas?
Criar um projeto em Java é atualmente grande desafio: são centenas de opções de tecnologias que podemos escolher e de modos diferentes de poder fazer as diversas camadas se comunicarem. O objetivo do curso é expor o aluno a uma grande quantidade dessas opções, desde a modelagem e design das classes, até a escolha das tecnologias mais adequadas para formar uma arquitetura robusta, com exercícios não apenas teóricos e de discussão, mas que também apresentam o código e propõem mudanças e melhorias. Durante o curso, realizamos diversos testes simulados para a certificação de arquiteto Java (SCEA), assim como modelagem de diagramas e debates sobre as decisões tomadas, formando um excelente preparatório para todas as três fases dessa cobiçada certificação.
Conceitos de orientação a objetos são revistos, desde os já muito conhecidos, como herança, encapsulamento e uso de interfaces, até o domain driven design, injeção de dependências, más práticas de orientação a objetos e o uso incorreto da herança e dos getters e setters. Os Design Patterns são apresentados de maneira prática dentro de uma aplicação real, e exemplos dentro do Java SE e Java EE. Não ficamos apenas nos patterns do GoF e do Core Java EE, vamos passar pelas novidades e também pelos quais já viraram anti patterns.
As principais tecnologias Java, assim como os grandes frameworks open source, são discutidos por meio de pequenos códigos e aplicações, que são apresentados, lidos, executados e comparados durante o curso. Das Servlets, EJB, JMS ao Struts, Spring, Hibernate e muito mais. O uso das tecnologias remotas é amplamente discutido, assim como a escolha do protocolo de troca de informações, seja numa aplicação web ou seja desktop.
SOA é um dos tópicos abordados, no qual fazemos um grande comparativo entre as diversas formas de implementá-la. Desde os WebServices com WSDL e Soap até o modelo Restful ou ainda transferência de POX e JSon. Todas as siglas serão destrinchadas, e o procedimento da criação de um webservice, desde a definição do serviço java até a geração do WSDL e seus stubs, será estudado.
Como implementar uma interface rica, gerenciar muito conteúdo e facilitar buscas usando os preceitos da Web 2.0? Existem diversas tecnologias para tal, e veremos o uso de diversas delas, desde o simples AJAX até o uso de componentes JSF ricos e o Adoble Flex. Por último, práticas de desenvolvimento são discutidas: os testes unitários e de aceitação, as metodologias ágeis, o problema da estimativa em homem-horas, até o build da aplicação e seu empacotamento para deploy.
Não conhecia a Caelum até precisar fazer este curso de Arquitetura. Com um curriculum de mais a 50 cursos técnicos me julgo apto a dizer que foi o melhor curso que já participei. Obrigado pela oportunidade
Samuel Cerqueira Vaz, FJ-91
Informações
Carga Horária: 40 horas aula
Pré-requisitos: Curso FJ-11 ou: linguagem Java, variáveis primitivas e orientação a objetos,
tratamento de erro, conhecimentos fundamentais de Java SE, entrada e saída, coleções, básico de multi-threading em Java.
Conhecimento de desenvolvimento para web, noções básicas de http, html e xml.
É necessário certa familiaridade com a plataforma Java EE no geral, como
EJB, Servlets, JSF e ter passado pelas dificuldades naturais de médios e
grandes projetos em TI.
Próximas Turmas
| Início | Término | Período |
|---|---|---|
| 01/12 | 05/12 | Integral (9:00 as 17:00) |
| 12/01 | 16/01 | Integral (9:00 as 17:00) |
| 19/01 | 30/01 | Noturno (19:00 as 23:00) |
| 31/01 | 07/03 | Sabado (9:00 as 17:00) |
| Início | Término | Período |
|---|---|---|
| 05/01 | 16/01 | Noturno (18:00 as 22:00) |
| Início | Término | Período |
|---|---|---|
| 24/11 | 05/12 | Noturno (19:00 as 23:00) |
Conteúdo detalhado do FJ-91
Um treinamento sobre arquitetura
- Design e Arquitetura?
- Indo da visão micro para a visão macro e gerenciamento
A Plataforma Java
- Java
- Java Virtual Machine
- Implementações da JVM
- A JVM por dentro
- Client e Server VM
- Garbage Collector
- System.gc
- finalizer
- Exercícios: explorando a JVM
- JSRs e o JCP
- Open source e o Java
- IDEs
- As edições do Java
- Java EE
- Outras linguagens e plataformas: .Net
- Outras linguagens e plataformas: PHP, Ruby, Python
- Outras linguagens na JVM
- DSLs
- Exercícios: explorando o JCP e a API de Scripting
Orientação a objetos
- História e introdução
- Objetos
- estado e comportamento
- Encapsulamento
- Interfaces e tipos
- Classes
- Herança e reutilização de código
- Polimorfismo
- Modularização
- Implementações de OO
- Java
- Ruby e Dynamic typing
- JavaScript e programação baseada em protótipos
- UML: Diagrama de classes
- Associação, Agregação e Composição
- UML: Diagrama de sequência
- Exercícios
- Exercícios opcionais com Ruby
Tópicos avançados em Orientação a Objetos
- JavaBeans e getters e setters
- Anemic Domain Model e objetos fantoches
- Domain Driven Design
- Herança versus Composição
- Exercícios: getters, setters e herança versus composição
- Interface versus Implementação
- Imutabilidade e Concorrência
- Fluent Interface
- Exercícios: Interface versus Implementação, Imutabilidade e Fluent Interface
Recursos avançados do Java
- Introspecção com Reflection
- Exercícios: reflection e geração de formulários
- Uso de anotações com reflection
- Anotações versus XML
- Exercícios: Anotações
- ClassLoader
- Exercícios: Classloaders
- Introdução a Programação Orientada a Aspectos
- Manipulação de bytecode
- Javassist
- Excercícios: AOP e Manipulação de bytecode
- Proxies dinâmicos
- Garbage Collector, Weak References e Caching
- Exercícios: Proxy dinâmica e Weak references
Inversão de Controle e Injeção de Dependências
- Inversão de controle
- Baixo acoplamento, alta coesão
- Componentes
- Encapsulamento
- Objetos
- Removendo relacionamentos bidirecionais
- Por fim, componentes
- UML: Diagrama de componentes
- Injeção de dependências
- Passando referências para todos os lados
- Injeção por setter
- Spring IoC
- Injeção via construtor
- Injeção via anotações
- Guice
- Ciclo de vida
- Exercícios
Design Patterns
- Factory Method
- Exercícios
- Singleton
- Exercícios
- Iterator
- Exercícios
- Observer
- Exercícios
- Visitor
- Decorator
- Exercício
- Composite
- Exercícios
- Template Method
- Exercícios
- Mau uso de patterns: Singleton versus Injeção de Dependências
- Exercicios
Arquitetura
- O que é Arquitetura?
- Cliente Servidor
- p2p - Peer to Peer
- Layers e Tiers
- MVC - Model View Controller
- MOM: Message Oriented Middleware
Arquitetura orientada a serviços
- SOA - Service Oriented Architecture
- Tickets, FTP e Sockets
- RMI, Corba e DCOM
- WebServices - SOAP/WSDL, POX, JSon e texto puro
- SOAP e WSDL
- Exercícios: WSDL e SOAP
- Exercícios opcionais
- POX: Plain Old XML
- Exercícios: POX
- JSON
- Restful
- Exercícios opcionais
- Texto Puro e Html Injection por Javascript
- Exercícios: JSON e html scraping
- Implementações de SOA no mundo real
- Aplicações 100% SOA internamente
- Exercícios: sobre uso de Webservices
Especificações Java
- Java SE
- Applets
- Java Web Start
- Exercícios: Applets e Java Web Start
- JDBC
- Exercícios opcionais
- Servlet, JSP e Servlet Containers
- Taglibs, Expression Language e JSTL
- Exercícios opcionais
- JSF - Java Server Faces
- Exercícios opcionais
- RMI
- Exercícios: RMI
- EJB: Session Beans, Entity Beans e EJB containers
- Exercícios: EJB2
- Value Object, Data Transfer Object, Session Façade
- EJB 3.x e a revolução
- Exercícios: EJB3 e webservices
- Exercícios opcionais
- JMS
- Exercícios: JMS
- Exercícios opcionais JMS com JBoss e EJB3
- JAAS
- Exercícios opcionais JAAS
Frameworks
- O que é um framework?
- Usar opensource?
- Struts 1.x
- Struts 2
- Spring Framework
- Spring MVC
- Spring Framework 2.1
- Convenções ao invés de configurações
- Velocity e Freemarker
- Hibernate 3
Web 2.0
- O que é Web 2.0
- Ajax e RIA
- Bibliotecas Ajax
- Frameworks Ajax para Java
- DWR - Direct Web Remoting
- Exercícios opcionais
- GWT - Google Web Toolkit
- Exercícios opcionais
- JSF com componentes Ajax
- Exercícios opcionais
- Adobe Flex
- Outras tecnologias
- Mashups
- Exercícios opcionais
Desenvolvimento e desenvolvedores
- Metodologias ágeis
- Testes Unitários
- Test Driven Development
- Errando o teste
- Testes e controle de versão
- Testes com dependências
- Simuladores ou mocks
- Testes de Aceitação
- Testes de Aceitação automatizados
- Exercícios: Testes
- Integração Contínua
- A bala de prata?
Apêndice A - Bibliografia
Apêndice B - Simulado da parte 1 da SCEA
Apêndice C - Arquitetando um Projeto Java
- Introdução
- Resultados da primeira análise
- Modelo de Classes inicial
- Casos de uso
- Caso de uso: Novo curso
- Caso de uso: Nova turma
- Caso de uso: Efetuar Matrícula
- Tarefa
- Dicas
