Escolar Documentos
Profissional Documentos
Cultura Documentos
Agenda
Introduo bsica Patterns e certificaes Sun Exemplos GoF patterns J2EE patterns Concluses
Palestrante
Vinicius M. Senger
Trabalha com desenvolvimento de softwares a mais de 12 anos; Foi instrutor e consultor Java da: Sun do Brasil e Oracle; Palestrante em diversos eventos Java: Fenasoft, Objetos Distribudos, JustJava, JavaOne EUA, ; Certificaes: Sun Enterprise Architect (2 fase), Java Programmer 1.4, Sun Official Instructor, Oracle Instructor, Microsoft Certified Professional, Microsoft Certified Trainner; Programador, diretor tcnico e instrutor Globalcode;
Agenda
Introduo bsica Patterns e certificaes Sun Exemplos GoF patterns J2EE patterns Concluses
Introduo bsica
Um design-pattern ... Uma forma padro de organizar classes e objetos; Nomes para solues que voc j modelou; Uma forma de compartilhar conhecimentos sobre POO; Solues POO para problemas que incidem em diversos cenrios de desenvolvimento; Uma definio de conjunto finito de responsabilidades para uma classe;
Introduo bsica
Ao adotar design-patterns... Seu cdigo fica mais organizado; Aumento de qualidade; Menor complexidade; Aumenta comunicao dentro da equipe de desenvolvimento;
Introduo bsica
Diagrama de seqncia UML, cdigo sem pattern
Introduo bsica
Com patterns...
Introduo bsica
A definio de um pattern pode conter... Um nome: Transfer Object Um outro nome (also know as): Value Object Um problema: algumas entidades contm dados que so sempre lidos em grupo... Uma soluo: serializar todos os dados da entidade em um objeto que...
Introduo bsica
Famlias de patterns GoF: 23 patterns Criao: Abstract Factory, Builder, Factory Method, Prototype, Singleton Estrutura: Adapter, Bridge, Composite, Decorator, Faade, Flyweight, Proxy Comportamento: Chain of Resp., Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor
Introduo bsica
Famlias de patterns J2EE: Business Delegate, Composite Entity, Composite View, Data Access Object, Fast Lane Reader, Front Controller, Intercepting Filter, Modelview-controller, Service Locator, Session Faade, Transfer Object, Value List Handler, View Helper Outros: theserverside.com, securitypatterns.org, Microsoft .NET patterns
Agenda
Introduo bsica Patterns e certificaes Sun Exemplos GoF patterns J2EE patterns Concluses parciais sobre patterns
Patterns e Certificao
As seguintes certificaes Sun exigem conhecimentos de patterns: Sun Certified Web Components Developer; Sun Certified Business Component Developer; Sun Certified Enterprise Architect; O que e quanto estudar? Todos patterns J2EE; Aplicar na prtica os principais GoF e os mais obscuros conhecer a teoria bsica;
Patterns e Certificao
Qual das opes no um benefcio da utilizao dos design-patterns: a) Eles fornecem uma linguagem comum para discusses sobre o design. b) Eles fornecem solues para os problemas do mundo real. c) Ele comunicam a experincia obtida previamente. d) Eles fornecem solues aos problemas totalmente inusitados.
Patterns e Certificao
Qual das opes no um benefcio da utilizao dos design-patterns: a) Eles fornecem uma linguagem comum para discusses sobre o design. b) Eles fornecem solues para os problemas do mundo real. c) Ele comunicam a experincia obtida previamente. d) Eles fornecem solues aos problemas totalmente inusitados.
Patterns e Certificao
O design pattern Decorator aparece frequentemente em qual pacote Java: a) java.io b) java.awt c) java.lang d) java.util
Patterns e Certificao
O design pattern Decorator aparece frequentemente em qual pacote Java: a) java.io b) java.awt c) java.lang d) java.util
Agenda
Introduo bsica Patterns e certificaes Sun Exemplos GoF patterns J2EE patterns Concluses parciais sobre patterns
Singleton
Definio: garantir que uma classe tenha somente uma instance. Warning: Devemos tomar cuidado com NullPointerException em servidores em cluster com Singleton implementados com static
public class FormatHelper { private static FormatHelper instance = new FormatHelper(); ... public static FormatHelper getInstance() { return instance; } protected FormatHelper() { } public String fullDateFormat(java.util.Date data) { if(data==null || data.equals("")) return ""; else return dataCompleta.format(data); } }
Command / Action
Definio: encapsula uma requisio ao software em um objeto. Action do Struts o principal exemplo de implementao deste pattern. Transformao do mtodo / cdigo em objeto Anti-pattern:
Command / Action
Aps pattern
Factory
Definio: as responsabilidades de criar objetos a partir de um tipo (interface) atribuda uma classe que contempla tal lgica. Exemplo do anti-pattern:
16 17 18 19 20 21 22 23 24 25 26 27 28 ... CalculadoraDeImpostos calculadora = null; if(p.fornecedor.getUF().equals("SP")) { calculadora = new CalculadoraSaoPaulo(); } else if(p.fornecedor.getUF().equals("RJ")) { calculadora = new CalculadoraRio(); } else if(p.fornecedor.getUF().equals("SC")) { calculadora = new CalculadoraSC(); } double impostos = calculadora.processar(p); ...
Factory
Ao aplicarmos o pattern factory a responsabilidade sob o operador new da factory...
16 17 18 19 20 ... CalculadoraDeImpostos calculadora = null; calculadora = FabricaDeCalculadoras.criar(p); double impostos = calculadora.processar(p); ...
Toda a responsabilidade de criar objetos foi transferida. A factory tem a oportunidade de criar cache / pool de objetos, transparecer qual a classe que implementa tal interface (jdbc), alm de transparncia de localidade.
Factory
Podemos programar fbricas que criam objeto baseados em uma interface; Podemos criar fbricas dinmicas utilizando a API java.reflection: A classe DriverManager uma factory de Connections JDBC que cria dinamicamente um conexo com RDBMS, baseando-se em um URL;
Composite
Definio: define um estrutura de objetos em formato de rvore de dados
public class Produto { private Componente componente; public void setComponente(Componente componente) { this.componente = componente; } public Componente getComponente() { return componente; } } class Componente { private Componente componente; public void setComponente(Componente componente) { this.componente = componente; } public Componente getComponente() { return componente; } } class Motor extends Componente {} class Cilindro extends Componente {}
Composite
class Usa { public void test() { Produto p = new Produto(); Componente motor = new Motor(); motor.setComponente(new Cilindro()); p.setComponente(motor); } }
Proxy
Definio: prover um objeto intermedirio para acessar outro objeto. O maior exemplo de Proxy em Java so Stubs e Skeletons RMI.
Agenda
Introduo bsica Patterns e certificaes Sun Exemplos GoF patterns J2EE patterns Concluses parciais sobre patterns
Service Locator
Definio: simplifica o acesso a recursos J2EE em um aplicativo centralizando lookups JNDI em classes especficas de localizao de servios. Evita que sua soluo tenha alto acoplamento com JNDI Naming Service; Tomar cuidado com Service Locator e cluster; Utilize sempre que possvel ENC; Exemplo no JAREF
Model-view-controller
Definio: divide o aplicativo em dados, comportamento e apresentao. Aplicando MVC podemos reaproveitar o mesmo dado para mltiplas visualizaes; Podemos reaproveitar o comportamento (eventos) da soluo; um pattern de arquitetura, criado h muito tempo. Pode ser aplicado em qualquer linguagem, mais facilmente com OOP.
Model-view-controller
115.000 resultados na busca sobre framework MVC no google Struts, WebWorks, Spring, PicoContainer so exemplos de frameworks J2EE
Model-view-controller
Front-controller
Problema: em aplicativos com mltiplos pontos de entrada (em Web, mltiplas URLs de acesso; em GUI, mtodos espalhados para tratamento de eventos)
Front-controller
Definio: criar um ponto nico de entrada no aplicativo. Para o caso de aplicativos Web, uma nica URL permite o acesso aos recursos do servidor.
Front-controller
Um controlador central pode oferecer servios para o aplicativo: Logging Segurana Undo / Redo Internacionalizao Leitura de formulrios Validao de dados Filtro de contedo
Intercepting Filter
Definio: forma para executar pr e ps processamento em requests da soluo Um Servlet Filter um exemplo de implementao de Intercepting Filter para interceptar requests no Web Container; Ainda no temos na espec J2EE intercepting filter para EJBs
Intercepting Filter
View Helper
Definio: simplifica a renderizao de objetos em views com formatao. Uma Custom Tag pode representar um View Helper; Uma simples classe convencional com mtodos estticos tambm; Exemplo no JAREF
Composite View
Definio: em views complexas, dividimos a tela em diversos pedaos. Depois criamos uma view que rene determinados componentes / pedaos de tela para compor um front-end. Em Web / JSPs utilizamos diversas tcnicas de include; Com aplicativos Swing, uma view composta pode ter diversos panels: panel para botes, panel do menu de opes, panel para apresentar o dado etc.;
2.2. action()
2.2. execute()
2.2.1. action()
2.2.2 sendRedirect()
Agenda
Introduo bsica Patterns e certificaes Sun Exemplos GoF patterns J2EE patterns Introduo ao Jakarta Struts
Jakarta Struts
Utilizando patterns voc cria solues com cdigo-fonte mais claro e organizado, porm esta prtica requer planejamento e modelagem; Planejamento e modelagem de cdigo representa menor produtividade no curto prazo; Frameworks unem qualidade de cdigo, com patterns prmoldados, sem queda de produtividade no curto prazo;
Jakarta Struts
Um framework cuida da infra-estrutura tcnica comum para diversos tipos de aplicativos Um framework disponibiliza um software pr-moldado, basta rechear com as funcionalidades do seu domnio de negcio; O Struts framework de desenvolvimento de aplicativos Web J2EE MVC; O Struts trabalha de acordo com diversos patterns, oferecendo alta qualidade de cdigo aliada alta produtividade no curto prazo;
Download e instalao
Download: http://jakarta.apache.org; Instalao: um zip/jar, basta descompactar...
Primeiro aplicativo
Vamos imaginar um simples exemplo de um aplicativo Web J2EE para verificar se um ano bissexto ou no; Conforme discutimos sobre patterns, temos trs abordagens para desenvolver uma soluo J2EE Web: 1. Sem patterns (somente JSPs); 2. Com patterns (aplicamos patterns com classes de infra-estrutura proprietrias); 3. Com patterns e framework (utilizando Struts);
Arquitetura bsica
Com a primeira alternativa, teramos a seguinte soluo:
Arquitetura bsica
Para esta arquitetura nosso trabalho seria o de desenvolver: 1. Um HTML com formulrio de entrada do ano; 2. VerificarAno.jsp;
MVC proprietrio
A segunda opo, aplicarmos os patterns na raa:
MVC proprietrio
Esta abordagem mais elaborada que a anterior, porm teramos que desenvolver: 1. Um HTML com formulrio de entrada do ano; 2. Um Java Servlet Front Controller; 3. Uma classe ActionFactory; 4. Uma interface para definir o padro de Action; 5. Uma classe com a implementao VerificaAnoAction; 6. A pgina Resultado.jsp;
Vantagens do Struts
Struts cuida do controle (de eventos) do aplicativo; Struts oferece servios para facilitar a construo da actions para formulrios de dados e validao; Struts facilita (muito) a criao de views / pgina de apresentao atravs de diversas tag libraries; Struts facilita internacionalizao do aplicativo; Struts modular e extensvel;
Demo
Ano bissexto com Struts
Demo
Ferramentas e / ou outros exemplos