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.


arquitetura e design de projetos Java EE da caelum

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


Faça já sua reserva

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)

Indicação de bibliografia
Bibliografia na Livraria Tempo Real

Conteúdo detalhado do FJ-91

Um treinamento sobre arquitetura

  1. Design e Arquitetura?
  2. Indo da visão micro para a visão macro e gerenciamento

A Plataforma Java

  1. Java
  2. Java Virtual Machine
  3. Implementações da JVM
  4. A JVM por dentro
  5. Client e Server VM
  6. Garbage Collector
  7. System.gc
  8. finalizer
  9. Exercícios: explorando a JVM
  10. JSRs e o JCP
  11. Open source e o Java
  12. IDEs
  13. As edições do Java
  14. Java EE
  15. Outras linguagens e plataformas: .Net
  16. Outras linguagens e plataformas: PHP, Ruby, Python
  17. Outras linguagens na JVM
  18. DSLs
  19. Exercícios: explorando o JCP e a API de Scripting

Orientação a objetos

  1. História e introdução
  2. Objetos
  3. estado e comportamento
  4. Encapsulamento
  5. Interfaces e tipos
  6. Classes
  7. Herança e reutilização de código
  8. Polimorfismo
  9. Modularização
  10. Implementações de OO
  11. Java
  12. Ruby e Dynamic typing
  13. JavaScript e programação baseada em protótipos
  14. UML: Diagrama de classes
  15. Associação, Agregação e Composição
  16. UML: Diagrama de sequência
  17. Exercícios
  18. Exercícios opcionais com Ruby

Tópicos avançados em Orientação a Objetos

  1. JavaBeans e getters e setters
  2. Anemic Domain Model e objetos fantoches
  3. Domain Driven Design
  4. Herança versus Composição
  5. Exercícios: getters, setters e herança versus composição
  6. Interface versus Implementação
  7. Imutabilidade e Concorrência
  8. Fluent Interface
  9. Exercícios: Interface versus Implementação, Imutabilidade e Fluent Interface

Recursos avançados do Java

  1. Introspecção com Reflection
  2. Exercícios: reflection e geração de formulários
  3. Uso de anotações com reflection
  4. Anotações versus XML
  5. Exercícios: Anotações
  6. ClassLoader
  7. Exercícios: Classloaders
  8. Introdução a Programação Orientada a Aspectos
  9. Manipulação de bytecode
  10. Javassist
  11. Excercícios: AOP e Manipulação de bytecode
  12. Proxies dinâmicos
  13. Garbage Collector, Weak References e Caching
  14. Exercícios: Proxy dinâmica e Weak references

Inversão de Controle e Injeção de Dependências

  1. Inversão de controle
  2. Baixo acoplamento, alta coesão
  3. Componentes
  4. Encapsulamento
  5. Objetos
  6. Removendo relacionamentos bidirecionais
  7. Por fim, componentes
  8. UML: Diagrama de componentes
  9. Injeção de dependências
  10. Passando referências para todos os lados
  11. Injeção por setter
  12. Spring IoC
  13. Injeção via construtor
  14. Injeção via anotações
  15. Guice
  16. Ciclo de vida
  17. Exercícios

Design Patterns

  1. Factory Method
  2. Exercícios
  3. Singleton
  4. Exercícios
  5. Iterator
  6. Exercícios
  7. Observer
  8. Exercícios
  9. Visitor
  10. Decorator
  11. Exercício
  12. Composite
  13. Exercícios
  14. Template Method
  15. Exercícios
  16. Mau uso de patterns: Singleton versus Injeção de Dependências
  17. Exercicios

Arquitetura

  1. O que é Arquitetura?
  2. Cliente Servidor
  3. p2p - Peer to Peer
  4. Layers e Tiers
  5. MVC - Model View Controller
  6. MOM: Message Oriented Middleware

Arquitetura orientada a serviços

  1. SOA - Service Oriented Architecture
  2. Tickets, FTP e Sockets
  3. RMI, Corba e DCOM
  4. WebServices - SOAP/WSDL, POX, JSon e texto puro
  5. SOAP e WSDL
  6. Exercícios: WSDL e SOAP
  7. Exercícios opcionais
  8. POX: Plain Old XML
  9. Exercícios: POX
  10. JSON
  11. Restful
  12. Exercícios opcionais
  13. Texto Puro e Html Injection por Javascript
  14. Exercícios: JSON e html scraping
  15. Implementações de SOA no mundo real
  16. Aplicações 100% SOA internamente
  17. Exercícios: sobre uso de Webservices

Especificações Java

  1. Java SE
  2. Applets
  3. Java Web Start
  4. Exercícios: Applets e Java Web Start
  5. JDBC
  6. Exercícios opcionais
  7. Servlet, JSP e Servlet Containers
  8. Taglibs, Expression Language e JSTL
  9. Exercícios opcionais
  10. JSF - Java Server Faces
  11. Exercícios opcionais
  12. RMI
  13. Exercícios: RMI
  14. EJB: Session Beans, Entity Beans e EJB containers
  15. Exercícios: EJB2
  16. Value Object, Data Transfer Object, Session Façade
  17. EJB 3.x e a revolução
  18. Exercícios: EJB3 e webservices
  19. Exercícios opcionais
  20. JMS
  21. Exercícios: JMS
  22. Exercícios opcionais JMS com JBoss e EJB3
  23. JAAS
  24. Exercícios opcionais JAAS

Frameworks

  1. O que é um framework?
  2. Usar opensource?
  3. Struts 1.x
  4. Struts 2
  5. Spring Framework
  6. Spring MVC
  7. Spring Framework 2.1
  8. Convenções ao invés de configurações
  9. Velocity e Freemarker
  10. Hibernate 3

Web 2.0

  1. O que é Web 2.0
  2. Ajax e RIA
  3. Bibliotecas Ajax
  4. Frameworks Ajax para Java
  5. DWR - Direct Web Remoting
  6. Exercícios opcionais
  7. GWT - Google Web Toolkit
  8. Exercícios opcionais
  9. JSF com componentes Ajax
  10. Exercícios opcionais
  11. Adobe Flex
  12. Outras tecnologias
  13. Mashups
  14. Exercícios opcionais

Desenvolvimento e desenvolvedores

  1. Metodologias ágeis
  2. Testes Unitários
  3. Test Driven Development
  4. Errando o teste
  5. Testes e controle de versão
  6. Testes com dependências
  7. Simuladores ou mocks
  8. Testes de Aceitação
  9. Testes de Aceitação automatizados
  10. Exercícios: Testes
  11. Integração Contínua
  12. A bala de prata?

Apêndice A - Bibliografia

Apêndice B - Simulado da parte 1 da SCEA

Apêndice C - Arquitetando um Projeto Java

  1. Introdução
  2. Resultados da primeira análise
  3. Modelo de Classes inicial
  4. Casos de uso
  5. Caso de uso: Novo curso
  6. Caso de uso: Nova turma
  7. Caso de uso: Efetuar Matrícula
  8. Tarefa
  9. Dicas