java_xml_ajax_padroes_Livro_wikipedia

Embed Size (px)

Citation preview

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    1/81

    PDF gerado usando o pacote de ferramentas em cdigo livre mwlib. Veja http://code.pediapress.com/ para mais informao.

    PDF generated at: Fri, 20 Aug 2010 20:05:17 UTC

    Java e Padres de ProjetoConhecimentos Bsicos

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    2/81

    Contedo

    Pginas

    Introduo 1

    Java (linguagem de programao) 1

    Padro de projeto de software 11

    Padres de Criao 15

    Abstract Factory 15

    Builder 20

    Factory Method 24

    Prototype 30

    Singleton 33

    Padres Estruturais 38

    Adapter 38

    Bridge (padro de projeto de software) 39

    Composite 40

    Decorator 41

    Faade 42

    Flyweight 43

    Proxy (padres de projeto) 43

    Padres Comportamentais 46

    Chain of Responsibility 46

    Command 47

    Interpreter 48

    Iterator 48

    Mediator 48

    Memento (informtica) 52

    Observer 52

    State 53

    Strategy 53

    Template Method 54

    Visitor 57

    Ajax 58

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    3/81

    AJAX (programao) 58

    JavaScript 63

    JavaScript 63

    XML 71

    XML 71

    Referncias

    Fontes e Editores da Pgina 76

    Fontes, licenas e editores da imagem 77

    Licenas das pginas

    Licena 78

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    4/81

    1

    Introduo

    Java (linguagem de programao)

    Java

    Paradigma orientao a objeto

    Surgido em 1995

    Criado por Sun Microsystems

    Estilo de tipagem: esttica, forte

    Compiladores GCJ, Javac

    Influenciada por Objective-C, C++, Smalltalk

    Influenciou C#, Fantom, J#, Jython

    Java uma linguagem de programao orientada a objeto desenvolvida na dcada de 90 por uma equipe de

    programadores chefiada por James Gosling, na empresa Sun Microsystems. Diferentemente das linguagens

    convencionais, que so compiladas para cdigo nativo, a linguagem Java compilada para um "bytecode" que

    executado por uma mquina virtual. A linguagem de programao Java a linguagem convencional da Plataforma

    Java, mas no sua nica linguagem.

    Histrico

    Em 1991, na Sun Microsystems, foi iniciado o Green Project, o bero do Java, uma linguagem de programaoorientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan, e James Gosling. O objetivo do

    projeto no era a criao de uma nova linguagem de programao, mas antecipar e planejar a prxima onda do

    mundo digital. Eles acreditavam que, em algum tempo, haveria uma convergncia dos computadores com os

    equipamentos e eletrodomsticos comumente usados pelas pessoas no seu dia-a-dia.

    Para provar a viabilidade desta idia, 13 pessoas trabalharam arduamente durante 18 meses. No vero de 1992 eles

    emergiram de um escritrio de Sand Hill Road no Menlo Park com uma demonstrao funcional da idia inicial. O

    prottipo se chamava *7 (leia-se StarSeven), um controle remoto com uma interface grfica touchscreen. Para o

    *7, foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O trabalho do Duke no *7 era ser

    um guia virtual ajudando e ensinando o usurio a utilizar o equipamento. O *7 tinha a habilidade de controlar

    diversos dispositivos e aplicaes. James Gosling especificou uma nova linguagem de programao para o *7.

    Gosling decidiu batiz-la de Oak, que quer dizer carvalho, uma rvore que ele podia observar quando olhava pela

    sua janela.

    O prximo passo era encontrar um mercado para o *7. A equipe achava que uma boa idia seria controlar televises

    e vdeo por demanda com o equipamento. Eles construram um demo chamado MovieWood, mas infelizmente era

    muito cedo para que o vdeo por demanda bem como as empresas de TV a cabo pudessem viabilizar o negcio. A

    idia que o *7 tentava vender, hoje j realidade em programas interativos e tambm na televiso digital. Permitir ao

    telespectador interagir com a emissora e com a programao em uma grande rede de cabos, era algo muito visionrio

    e estava muito longe do que as empresas de TV a cabo tinham capacidade de entender e comprar. A idia certa, na

    poca errada.

    http://pt.wikipedia.org/w/index.php?title=Televis%C3%A3o_digitalhttp://pt.wikipedia.org/w/index.php?title=TV_a_cabohttp://pt.wikipedia.org/w/index.php?title=Oakhttp://pt.wikipedia.org/w/index.php?title=Duke_%28mascote%29http://pt.wikipedia.org/w/index.php?title=Interface_gr%C3%A1ficahttp://pt.wikipedia.org/w/index.php?title=James_Goslinghttp://pt.wikipedia.org/w/index.php?title=Orienta%C3%A7%C3%A3o_a_objetohttp://pt.wikipedia.org/w/index.php?title=Linguagem_de_programa%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Sunhttp://pt.wikipedia.org/w/index.php?title=Plataforma_Javahttp://pt.wikipedia.org/w/index.php?title=Plataforma_Javahttp://pt.wikipedia.org/w/index.php?title=M%C3%A1quina_virtual_Javahttp://pt.wikipedia.org/w/index.php?title=Bytecode_Javahttp://pt.wikipedia.org/w/index.php?title=C%C3%B3digo_nativohttp://pt.wikipedia.org/w/index.php?title=Compiladorhttp://pt.wikipedia.org/w/index.php?title=Sun_Microsystemshttp://pt.wikipedia.org/w/index.php?title=James_Goslinghttp://pt.wikipedia.org/w/index.php?title=D%C3%A9cada_de_1990http://pt.wikipedia.org/w/index.php?title=Orienta%C3%A7%C3%A3o_a_objetohttp://pt.wikipedia.org/w/index.php?title=Linguagem_de_programa%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Jythonhttp://pt.wikipedia.org/w/index.php?title=J_sharphttp://pt.wikipedia.org/w/index.php?title=Fantomhttp://pt.wikipedia.org/w/index.php?title=C_sharphttp://pt.wikipedia.org/w/index.php?title=Smalltalkhttp://pt.wikipedia.org/w/index.php?title=C%2B%2Bhttp://pt.wikipedia.org/w/index.php?title=Objective-Chttp://pt.wikipedia.org/w/index.php?title=Javachttp://pt.wikipedia.org/w/index.php?title=GCJhttp://pt.wikipedia.org/w/index.php?title=Compiladorhttp://pt.wikipedia.org/w/index.php?title=Tipo_de_dadohttp://pt.wikipedia.org/w/index.php?title=Sun_Microsystemshttp://pt.wikipedia.org/w/index.php?title=1995http://pt.wikipedia.org/w/index.php?title=Orienta%C3%A7%C3%A3o_a_objetohttp://pt.wikipedia.org/w/index.php?title=Paradigma_de_programa%C3%A7%C3%A3o
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    5/81

    Java (linguagem de programao) 2

    Entretanto, o estouro da Internet aconteceu e rapidamente uma grande rede interativa estava se estabelecendo. Era

    este tipo de rede interativa que a equipe do *7 estava tentando vender para as empresas de TV a cabo. E, da noite

    para o dia, no era mais necessrio construir a infra-estrutura para a rede, ela simplesmente estava l. Gosling foi

    incumbido de adaptar o Oak para a Internet e em janeiro 1995 foi lanada uma nova verso do Oak que foi

    rebatizada para Java. A tecnologia Java tinha sido projetada para se mover por meio das redes de dispositivos

    heterogneos, redes como a Internet. Agora aplicaes poderiam ser executadas dentro dos browsers nos Applets

    Java e tudo seria disponibilizado pela Internet instantaneamente. Foi o esttico HTML dos browsers que promoveu a

    rpida disseminao da dinmica tecnologia Java. A velocidade dos acontecimentos seguintes foi assustadora, o

    nmero de usurios cresceu rapidamente, grandes fornecedores de tecnologia, como a IBM anunciaram suporte para

    a tecnologia Java.

    Desde seu lanamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra

    linguagem de programao na histria da computao. Em 2004 Java atingiu a marca de 3 milhes de

    desenvolvedores em todo mundo[1] . Java continuou crescendo e hoje uma referncia no mercado de

    desenvolvimento de software. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de

    execuo presente em web browsers, mainframes, SOs, celulares, palmtops, cartes inteligentes etc.

    Padronizao

    Em 1997 a Sun Microsystems tentou submeter a linguagem a padronizao pelos rgos ISO/IEC e ECMA, mas

    acabou desistindo. [2] [3] [4] Java ainda um standard de fato, que controlada atravs da JCP Java Community

    Process.[5] Em 13 de Novembro de 2006, a Sun lanou a maior parte do Java como Software Livre sob os termos da

    GNU General Public License (GPL). Em 8 de Maio de 2007 a Sun finalizou o processo, tornando praticamente todo

    o cdigo Java como software de cdigo aberto, menos uma pequena poro da qual a Sun no possui copyright. [6]

    Principais Caractersticas da Linguagem Java

    A linguagem Java foi projectada tendo em vista os seguintes objectivos: Orientao a objecto - Baseado no modelo de Simula67;

    Portabilidade - Independncia de plataforma - "escreva uma vez, execute em qualquer lugar" ("write once, run

    anywhere");

    Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a cooperao com protocolos TCP/IP, como

    HTTP e FTP;

    Segurana - Pode executar programas via rede com restries de execuo;

    Alm disso, podem-se destacar outras vantagens apresentadas pela linguagem:

    Sintaxe similar a Linguagem C/C++.

    Facilidades de Internacionalizao - Suporta nativamente caracteres Unicode; Simplicidade na especificao, tanto da linguagem como do "ambiente" de execuo (JVM);

    distribuda com um vasto conjunto de bibliotecas (ou APIs);

    Possui facilidades para criao de programas distribudos e multitarefa (mltiplas linhas de execuo num mesmo

    programa);

    Desalocao de memria automtica por processo de coletor de lixo (garbage collector);

    Carga Dinmica de Cdigo - Programas em Java so formados por uma coleco de classes armazenadas

    independentemente e que podem ser carregadas no momento de utilizao.

    http://pt.wikipedia.org/w/index.php?title=Coletor_de_lixohttp://pt.wikipedia.org/w/index.php?title=Multitarefahttp://pt.wikipedia.org/w/index.php?title=APIhttp://pt.wikipedia.org/w/index.php?title=JVMhttp://pt.wikipedia.org/w/index.php?title=Unicodehttp://pt.wikipedia.org/w/index.php?title=C%2B%2Bhttp://pt.wikipedia.org/w/index.php?title=Linguagem_Chttp://pt.wikipedia.org/w/index.php?title=FTPhttp://pt.wikipedia.org/w/index.php?title=HTTPhttp://pt.wikipedia.org/w/index.php?title=TCP/IPhttp://pt.wikipedia.org/w/index.php?title=Orienta%C3%A7%C3%A3o_a_objectohttp://pt.wikipedia.org/w/index.php?title=2007http://pt.wikipedia.org/w/index.php?title=8_de_Maiohttp://pt.wikipedia.org/w/index.php?title=GNU_General_Public_Licensehttp://pt.wikipedia.org/w/index.php?title=Software_Livrehttp://pt.wikipedia.org/w/index.php?title=2006http://pt.wikipedia.org/w/index.php?title=Java_Community_Processhttp://pt.wikipedia.org/w/index.php?title=Java_Community_Processhttp://pt.wikipedia.org/w/index.php?title=ECMAhttp://pt.wikipedia.org/w/index.php?title=IEChttp://pt.wikipedia.org/w/index.php?title=ISOhttp://pt.wikipedia.org/w/index.php?title=1997http://pt.wikipedia.org/w/index.php?title=PDAhttp://pt.wikipedia.org/w/index.php?title=Celularhttp://pt.wikipedia.org/w/index.php?title=Sistema_Operacionalhttp://pt.wikipedia.org/w/index.php?title=Mainframehttp://pt.wikipedia.org/w/index.php?title=Navegadorhttp://pt.wikipedia.org/w/index.php?title=Internethttp://pt.wikipedia.org/w/index.php?title=Hist%C3%B3ria_da_computa%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Linguagem_de_programa%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=IBMhttp://pt.wikipedia.org/w/index.php?title=HTMLhttp://pt.wikipedia.org/w/index.php?title=Navegadorhttp://pt.wikipedia.org/w/index.php?title=Linguagem_de_programa%C3%A7%C3%A3o_Javahttp://pt.wikipedia.org/w/index.php?title=Internet
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    6/81

    Java (linguagem de programao) 3

    Exemplos de cdigo

    Mtodo main

    O mtodo main onde o programa inicia. Pode estar presente em qualquer classe. Os parmetros de linha de

    comando so enviados para a array args[], do tipo String.

    publicclassOlaMundo{

    /**

    * Mtodo que executa o programa

    * public = visto em qualquer lugar da aplicao

    * static = iniciado automaticamente pela JVM, sem precisar de uma

    instncia

    * void = Mtodo sem retorno (retorno vazio)

    * main = Nome do mtodo, que obrigatorio ser este. Recebe como

    parmetro um array de String.

    * String[] args = Array de argumentos que podem ser repassados na

    chamada do programa.

    */

    publicstaticvoidmain(String[] args){

    System.out.println("Ol, Mundo!");//Imprime na tela a frase

    }

    }

    Criao de classes

    Exemplo:

    publicabstractclassAnimal{

    publicabstractvoidfazerBarulho();

    }

    ----

    publicclassCachorroextends Animal {

    publicvoidfazerBarulho(){

    System.out.println("AuAu!");

    }

    }

    ----

    publicclassGatoextends Animal {

    publicvoidfazerBarulho(){

    System.out.println("Miau!");

    }

    }

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    7/81

    Java (linguagem de programao) 4

    O exemplo acima cria a classe Animal e duas classes derivadas de Animal.

    Java no suporta herana mltipla, e todas as classes em Java derivam de Object(Classe).

    A nica possibilidade de se ver herana mltipla em java no uso de interfaces, pois uma so interfaces pode herdar

    vrias outras interfaces.

    InterfacesUma interface modela um comportamento esperado. Pode-se entend-la como uma classe que contenha apenas

    mtodos abstratos. Embora uma classe no possa conter mais de uma super classe, a classe pode implementar mais

    de uma interface. Exemplo:

    publicinterfacePesado{

    doubleobterPeso();

    }

    publicinterfaceColorido{

    Color obterCor();}

    publicclassPorcoextends Animal implements Pesado, Colorido {

    publicvoidfazerBarulho(){

    System.out.println("inc!");

    }

    //Implementao da interface Pesado

    publicdoubleobterPeso(){

    return50.00; }

    //Implementao da interface Colorido

    public Color obterCor(){

    return Color.BLACK;

    }

    //Uma propriedade s do porco

    publicbooleanenlameado(){

    returntrue; }

    }

    Classes internas

    Java pode ter classes internas. Exemplos:

    publicclassCavaloextends Animal {

    publicvoidfazerBarulho(){

    System.out.println("RIINCH!");

    } //Classe interna e privada. Existe s no contexto da classe

    "Cavalo".

    http://pt.wikipedia.org/w/index.php?title=Heran%C3%A7a_m%C3%BAltipla
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    8/81

    Java (linguagem de programao) 5

    privateclassParasitaextends Animal {

    publicvoidfazerBarulho(){

    System.out.println("SQRRT");

    }

    }

    }

    Objetos annimos

    Podemos ter tambm objetos annimos, aonde no necessrio instanciar o objeto em uma varivel para utiliz-lo.

    Exemplo:

    publicclassMostraBarulho{

    publicstaticvoidmain(String args[]){

    newCavalo().fazerBarulho();//Objeto annimo.

    //Abaixo um objeto e classe annimos!

    newAnimal(){//novo objeto

    publicvoidfazerBarulho(){

    System.out.println("QUAC!");//imprime na tela

    }

    }.fazerBarulho();

    }

    }

    Programas simples

    Programa em Java para somar dois nmeros inteiros:importjavax.swing.JOptionPane;

    publicclassSoma{

    publicstaticvoidmain(String[]args){

    //declarao das variveis

    String numeroA, numeroB;

    int numero1, numero2, soma;

    //pede dois nmeros inteiros

    numeroA = JOptionPane.showInputDialog("Entre com o primeiro nmero

    inteiro");

    numeroB = JOptionPane.showInputDialog("Entre com o segundo nmero

    inteiro");

    //converte os nmeros de string para inteiro

    numero1 = Integer.parseInt(numeroA);

    numero2 = Integer.parseInt(numeroB);

    //outra forma de converso seria utilizar o mtodo valueOf

    numero1 = Integer.valueOf(numeroA);

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    9/81

    Java (linguagem de programao) 6

    numero2 = Integer.valueOf(numeroB);

    //efetua a soma dos nmeros

    soma = numero1 + numero2;

    //mostra o resultado da soma para o usurio

    JOptionPane.showMessageDialog(null,"A soma dos nmeros : "+

    soma,"Resultado",JOptionPane.PLAIN_MESSAGE);

    }

    }

    Extenses

    Extenses em Java:

    J2ME (Micro-Edition for PDAs and cellular phones)

    J2SE (Standard Edition)

    J3D (A high level API for 3D graphics programming)

    JAAS (Java Authentication and Authorization Service)

    JAIN (Java API for Integrated Networks)

    Java Card

    JMX (Java Management Extensions)

    JavaFX

    JSF (JavaServer Faces)

    JSP (JavaServer Pages)

    JavaSpaces

    JCE (Java Cryptography Extension)

    JDBC (Java Database Connectivity)

    JDMK (Java Dynamic Management Kit)

    JDO (Java Data Objects)

    JEE (Enterprise Edition)

    Jini (a network architecture for the construction of distributed systems)

    Jiro

    JMF (Java Media Framework)

    JMI (Java Metadata Interface)

    JMS (Java Message Service)

    JNDI (Java Naming and Directory Interface)

    JNI (Java Native Interface)

    JOGL (A low level API for 3D graphics programming, using OpenGL)

    JSML (Java Speech API Markup Language)

    JXTA (open source-based peer-to-peer infrastructure)

    MARF (Modular Audio Recognition Framework)

    OSGi (Dynamic Service Management and Remote Maintenance)

    SuperWaba (JavaVMs for handhelds)

    http://pt.wikipedia.org/w/index.php?title=SuperWabahttp://pt.wikipedia.org/w/index.php?title=OSGihttp://pt.wikipedia.org/w/index.php?title=Modular_Audio_Recognition_Frameworkhttp://pt.wikipedia.org/w/index.php?title=JXTAhttp://pt.wikipedia.org/w/index.php?title=JSMLhttp://pt.wikipedia.org/w/index.php?title=OpenGLhttp://pt.wikipedia.org/w/index.php?title=JOGLhttp://pt.wikipedia.org/w/index.php?title=JNIhttp://pt.wikipedia.org/w/index.php?title=JNDIhttp://pt.wikipedia.org/w/index.php?title=JMShttp://pt.wikipedia.org/w/index.php?title=JMIhttp://pt.wikipedia.org/w/index.php?title=JMFhttp://pt.wikipedia.org/w/index.php?title=Jirohttp://pt.wikipedia.org/w/index.php?title=Distributed_systemhttp://pt.wikipedia.org/w/index.php?title=Jinihttp://pt.wikipedia.org/w/index.php?title=JEEhttp://pt.wikipedia.org/w/index.php?title=JDOhttp://pt.wikipedia.org/w/index.php?title=JDMKhttp://pt.wikipedia.org/w/index.php?title=JDBChttp://pt.wikipedia.org/w/index.php?title=JCEhttp://pt.wikipedia.org/w/index.php?title=JavaSpaceshttp://pt.wikipedia.org/w/index.php?title=JavaServer_Pageshttp://pt.wikipedia.org/w/index.php?title=JavaServer_Faceshttp://pt.wikipedia.org/w/index.php?title=JavaFXhttp://pt.wikipedia.org/w/index.php?title=Java_Management_Extensionshttp://pt.wikipedia.org/w/index.php?title=Java_Cardhttp://pt.wikipedia.org/w/index.php?title=JAINhttp://pt.wikipedia.org/w/index.php?title=Jaashttp://pt.wikipedia.org/w/index.php?title=J3Dhttp://pt.wikipedia.org/w/index.php?title=J2SEhttp://pt.wikipedia.org/w/index.php?title=J2ME
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    10/81

    Java (linguagem de programao) 7

    Polimorfismo

    O Polimorfismo uma caracterstica muito importante em sistemas orientados a objetos. Termo proveniente do

    grego que significa "muitas formas". Atravs dele conseguimos realizar vrias tarefas.

    Existem 4 tipos de polimorfismo divididos em 2 categorias (todos eles so implementados em Java), so descritos a

    seguir:

    Polimorfismo Universal

    Como o prprio nome diz, ele universal, ou seja, ele pode ser aplicado em vrios casos, logo no consegue saber

    quantas vezes ser aplicado o polimorfismo. Trabalha potencialmente num conjunto infinito de tipos, de modo

    disciplinado. Este polimorfismo possui duas formas:

    Paramtrico ou parametrizao

    A idia do polimorfismo universal paramtrico ao definir um elemento(que pode ser uma classe, um mtodo ou

    alguma outra estrutura da linguagem), a definio do tipo sozinha ela incompleta, ela precisa parametrizar este

    tipo, ou seja, teoricamente no existiria o tipo sozinho, o que sim existe e o tipo de alguma coisa de alguma coisa,

    por exemplo, uma list no seria s do tipo list, e sim do tipo list de elefantes. Vale lembrar que este polimorfismo s

    foi implementado em Java apartir da verso 1.5.

    Exemplo de Polimorfismo Paramtrico em Java

    //Aqui no exemplo criado um ArrayList do tipo ArrayList de Aluno, e

    no ArrayList, isso o polimorfismo universal paramtrico

    ArrayList alunos =new ArrayList();//aqui ha o como aluno

    Aluno a =new Aluno("Rafael");

    alunos.add( a );

    Aluno x = alunos.get(0);

    System.out.println("Nome: "+ x.getNome());

    Incluso

    quando voc tem um ponteiro para me e ele consegue apontar para um objeto da filha, j que esse polimorfismo

    muito bsico, difcil voc conseguir outras coisas sem ele, por isso boa parte das linguagens orientadas a objetos

    conhecidas implementam esse polimorfismo.

    Exemplo em Cdigo:

    classPorca{

    int faces;

    voidacopleETorca();

    }

    classPorca8mmextends Porca {

    voidacopleETorca(){

    if(...)...

    }

    }classPorca10mmextends Porca {

    http://pt.wikipedia.org/w/index.php?title=Polimorfismo
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    11/81

    Java (linguagem de programao) 8

    voidacopleETorca(){

    for(...)...

    }

    }

    Polimorfismo Ad-Hoc implementado quando queremos definir uma coisa especfica, ou seja, este polimorfismo, diferente do universal,

    no pode ser usado em todo lugar, logo sabemos quantas vezes ele ser aplicado. Este polimorfismo possui duas

    formas:

    Sobrecarga (Overloading)

    Permite que um nome de funo seja utilizado mais de uma vez com diferentes assinaturas, ou seja, dois mtodos

    com o mesmo nome, porm com tipos de parmetros diferentes por quantidades ou por tipo. O compilador

    automaticamente chama a funo correta que deve ser utilizada.

    Exemplo em cdigo: Podemos citar como exemplo uma funo f aplicada aos parmetros reais a e b, onde,

    dependendo dos tipos dos parmetros, podemos ter a execuo da primeira ou da segunda funo, caracterizando opolimorfismo ad-hoc de overloading.

    classAritmetica{

    intf(int x,int y){

    return x+y;

    }

    doublef(double x,double y){

    return x*x + y*y;

    }

    }

    classTesta{

    publicstaticvoidmain(String[] args){

    f(a,b);

    }

    }

    Coero

    A idia que a linguagem quem faz uma coero de tipos e no o programador, ou seja, que esta no feita

    voluntariamente pelo programador e sim pela linguagem.

    Exemplo: se o operador + definido para somar dois nmeros reais, e um nmero inteiro passado como parmetroento o inteiro "coergido" para real.

    Exemplo em cdigo:

    classFuncionario{

    protected String CPF, RG, telefone, nome;

    }

    classGerenteextends Funcionario {

    private String departamento;

    }

    classSupervisorextends Funcionario {

    private String setor;

    }

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    12/81

    Java (linguagem de programao) 9

    classAuxiliarextends Funcionario {

    }

    publicclassTesteUpcasting{

    publicstaticvoidmain(String[] args){

    Gerente ger =new Gerente();

    Supervisor sup =new Supervisor();

    Funcionario func = ger;

    }

    //func do tipo Funcionario, mas recebe uma instncia do tipo

    Gerente - no caso ocorre um UPCASTING

    }

    Frameworks

    possvel utilizar frameworks para facilitar o desenvolvimento de aplicaes. Dentre os mais utilizados pode-se

    destacar:

    Hibernate ferramenta para ORM;

    Junit ferramenta para auxiliar na criao de testes unitrios;

    Log4j ferramenta para facilitar a criao de logs na aplicao;

    Spring ferramenta que auxilia principalmente implementao de injeo de dependncias e inverso de controle;

    Struts controlador MVC (Model 2) web.

    Ambientes de desenvolvimento

    possvel desenvolver aplicaes em Java atravs de vrios ambientes de desenvolvimento integrado (IDEs). Dentre

    as opes mais utilizadas pode-se destacar:

    BlueJ um ambiente desenvolvido por uma faculdade australiana (considerado muito bom para iniciantes); JCreator (gratuito/shareware) um ambiente desenvolvido pela Xinox (recomendado para programadores

    iniciantes);

    jEdit (recomendado para programadores iniciantes);

    IDEs completas (recomendado para programadores profissionais):

    Eclipse um projeto aberto iniciado pela IBM;

    IntelliJ IDEA (comercial) uma IDE desenvolvida pela JetBrains;

    JBuilder um ambiente desenvolvido pela empresa Borland;

    JDeveloper (gratuito OTN) uma IDE desenvolvida pela empresa Oracle;

    NetBeans (software livre) uma IDE desenvolvida pela Sun Microsystems;Outras IDEs (menos populares):

    Gel (IDE) open source;

    Greenfoot bem parecido com o BlueJ;

    JGRASP bom para intermedirios, feito pela equipe do Projeto GRASP;

    Java Studio Creator/Enterprise (gratuito SDN) um ambiente criado pela empresa Sun Microsystems;

    Workshop for WebLogic (comercial/desenvolvedor) um ambiente criado pela empresa Oracle;

    WebSphere Studio Application Developer um ambiente criado pela empresa IBM;

    http://pt.wikipedia.org/w/index.php?title=IBMhttp://pt.wikipedia.org/w/index.php?title=WebSphere_Studio_Application_Developerhttp://pt.wikipedia.org/w/index.php?title=Oraclehttp://pt.wikipedia.org/w/index.php?title=Sun_Microsystemshttp://pt.wikipedia.org/w/index.php?title=Projeto_GRASPhttp://pt.wikipedia.org/w/index.php?title=JGRASPhttp://pt.wikipedia.org/w/index.php?title=BlueJhttp://pt.wikipedia.org/w/index.php?title=Greenfoothttp://pt.wikipedia.org/w/index.php?title=Gel_%28IDE%29http://pt.wikipedia.org/w/index.php?title=Sun_Microsystemshttp://pt.wikipedia.org/w/index.php?title=NetBeanshttp://pt.wikipedia.org/w/index.php?title=Oraclehttp://pt.wikipedia.org/w/index.php?title=JDeveloperhttp://pt.wikipedia.org/w/index.php?title=Borlandhttp://pt.wikipedia.org/w/index.php?title=JBuilderhttp://pt.wikipedia.org/w/index.php?title=JetBrainshttp://pt.wikipedia.org/w/index.php?title=IntelliJ_IDEAhttp://pt.wikipedia.org/w/index.php?title=IBMhttp://pt.wikipedia.org/w/index.php?title=Open_sourcehttp://pt.wikipedia.org/w/index.php?title=Eclipse_%28IDE%29http://pt.wikipedia.org/w/index.php?title=JEdithttp://pt.wikipedia.org/w/index.php?title=Xinoxhttp://pt.wikipedia.org/w/index.php?title=JCreatorhttp://pt.wikipedia.org/w/index.php?title=BlueJhttp://pt.wikipedia.org/w/index.php?title=Ambiente_de_desenvolvimento_integradohttp://pt.wikipedia.org/w/index.php?title=MVChttp://pt.wikipedia.org/w/index.php?title=Strutshttp://pt.wikipedia.org/w/index.php?title=Invers%C3%A3o_de_controlehttp://pt.wikipedia.org/w/index.php?title=Inje%C3%A7%C3%A3o_de_depend%C3%AAnciahttp://pt.wikipedia.org/w/index.php?title=Spring_Frameworkhttp://pt.wikipedia.org/w/index.php?title=Log_de_dadoshttp://pt.wikipedia.org/w/index.php?title=Log4jhttp://pt.wikipedia.org/w/index.php?title=Teste_unitariohttp://pt.wikipedia.org/w/index.php?title=Junithttp://pt.wikipedia.org/w/index.php?title=ORMhttp://pt.wikipedia.org/w/index.php?title=Hibernatehttp://pt.wikipedia.org/w/index.php?title=Frameworks
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    13/81

    Java (linguagem de programao) 10

    Certificaes

    Existem 8 tipos de certificaes[7] da Sun Microsystems para Java:

    Sun Certified Enterprise Architect (SCEA)

    Sun Certified Mobile Application Developer (SCMAD)

    Sun Certified Developer For Java Web Services (SCDJWS)

    Sun Certified Business Component Developer (SCBCD) Sun Certified Web Component Developer (SCWCD)

    Sun Certified Java Developer (SCJD)

    Sun Certified Java Programmer (SCJP)

    Sun Certified Java Associate (SCJA)

    Cada certificao testa algum tipo de habilidade dentro da plataforma e linguagem Java. Todos os testes so

    realizados pela empresa Prometric[8] e so reconhecidos internacionalmente.

    Comunidade

    A comunidade de desenvolvedores Java rene-se em grupo denominados JUGs (Java User Groups). No Brasil omovimento de grupos de usurios expandiu-se bastante e tem formado alguns dos maiores grupos de usurios Java

    do mundo[carece de fontes?], como por exemplo o PortalJava, GUJ e o JavaFree.

    Licena

    A Sun disponibiliza a maioria das distribuies Java gratuitamente e obtm receita com programas mais

    especializados como o Java Enterprise System. Em 13 de novembro de 2006, a Sun liberou partes do Java como

    software livre, sob a licena GNU General Public License.[9] A liberao completa do cdigo fonte sob a GPL

    ocorreu em maio de 2007.[10]

    Curiosidades

    O nmero mgico de uma classe Java, quando representado em Hexadecimal fica 0xCAFEBABE. Leia abaixo:

    Patrick Naughton

    Strangely enough the magic number for .class files was chosen long before the name Java was ever uttered in reference to this language.

    We were looking for something fun, unique and easy to remember. 0xcafebabe was better than the second runner-up, 0xdeadbabe. It is only

    a coincidence that the oblique reference to the cute barristas at Peet's Coffee was foreshadowing for the name Java.

    Ver tambm

    Java (plataforma de software)

    [1] http://www.sun.com/2004-0511/feature/

    [2] Java Study Group (http://www.open-std.org/JTC1/SC22/JSG/)

    [3] Why Java Was - Not - Standardized Twice (http://csdl2.computer.org/comp/proceedings/hicss/2001/0981/05/09815015.pdf)

    [4] What is ECMA--and why Microsoft cares (http://techupdate. zdnet.com/techupdate/stories/main/0,14179,2832719,00.html)

    [5] Java Community Process website (http://www.jcp.org/en/home/index)

    [6] open.itworld.com - JAVAONE: Sun - The bulk of Java is open sourced (http://open.itworld.com/4915/070508opsjava/page_1.html)

    [7] Java Certification (http://www.sun. com/training/certification/java/index.xml)

    [8] Prometric: Testing and Assessment (http://www.prometric.com)

    [9] Sun begins releasing Java under the GPL (http://www. fsf. org/news/fsf-welcomes-gpl-java.html) (em ingls). Pgina visitada em 6 de

    julho de 2010.

    [10] JavaOne opening keynote notes and comments (http://rollerweblogger.

    org/roller/entry/javaone_opening_keynote_notes)(em ingls).Pgina visitada em 6 de julho de 2010.

    http://rollerweblogger.org/roller/entry/javaone_opening_keynote_noteshttp://www.fsf.org/news/fsf-welcomes-gpl-java.htmlhttp://www.prometric.com/http://www.sun.com/training/certification/java/index.xmlhttp://open.itworld.com/4915/070508opsjava/page_1.htmlhttp://www.jcp.org/en/home/indexhttp://techupdate.zdnet.com/techupdate/stories/main/0,14179,2832719,00.htmlhttp://csdl2.computer.org/comp/proceedings/hicss/2001/0981/05/09815015.pdfhttp://www.open-std.org/JTC1/SC22/JSG/http://www.sun.com/2004-0511/feature/http://pt.wikipedia.org/w/index.php?title=Plataforma_Javahttp://pt.wikipedia.org/w/index.php?title=Patrick_Naughtonhttp://pt.wikipedia.org/w/index.php?title=Hexadecimalhttp://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=N%C3%BAmeros_m%C3%A1gicoshttp://pt.wikipedia.org/w/index.php?title=2007http://pt.wikipedia.org/w/index.php?title=Maiohttp://pt.wikipedia.org/w/index.php?title=C%C3%B3digo_fontehttp://pt.wikipedia.org/w/index.php?title=GNU_General_Public_Licensehttp://pt.wikipedia.org/w/index.php?title=Software_livrehttp://pt.wikipedia.org/w/index.php?title=2006http://pt.wikipedia.org/w/index.php?title=13_de_novembrohttp://pt.wikipedia.org/w/index.php?title=Java_Enterprise_Systemhttp://pt.wikipedia.org/w/index.php?title=Sun_Microsystemshttp://pt.wikipedia.org/w/index.php?title=JavaFreehttp://pt.wikipedia.org/w/index.php?title=GUJhttp://pt.wikipedia.org/w/index.php?title=PortalJavahttp://pt.wikipedia.org/w/index.php?title=Wikipedia:Livro_de_estilo/Cite_as_fonteshttp://pt.wikipedia.org/w/index.php?title=Prometrichttp://pt.wikipedia.org/w/index.php?title=Sun_Certified_Java_Associatehttp://pt.wikipedia.org/w/index.php?title=SCJPhttp://pt.wikipedia.org/w/index.php?title=Sun_Certified_Java_Developerhttp://pt.wikipedia.org/w/index.php?title=Sun_Certified_Web_Component_Developerhttp://pt.wikipedia.org/w/index.php?title=Sun_Certified_Business_Component_Developerhttp://pt.wikipedia.org/w/index.php?title=Sun_Certified_Developer_For_Java_Web_Serviceshttp://pt.wikipedia.org/w/index.php?title=Sun_Certified_Mobile_Application_Developerhttp://pt.wikipedia.org/w/index.php?title=Sun_Certified_Enterprise_Architecthttp://pt.wikipedia.org/w/index.php?title=Sun_Microsystems
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    14/81

    Java (linguagem de programao) 11

    Ligaes externas

    Pgina oficial da linguagem Java (http://java.sun.com/)

    Iniciando em Java (http://www.javafree.org/topic-850964-Iniciando-em-Java.html)

    Tutoriais oficiais da Sun (http://java.sun.com/docs/books/tutorial/)

    O que Java? (http://www.javafree.org/artigo/871498/Tutorial-Java-O-que-e-Java.html)

    Caractersticas Bsicas (http://www.javafree.org/artigo/871496/Tutorial-Java-2-Caracteristicas-Basicas. html) Orientao a Objetos com Java (http://www.javafree.org/artigo/871497/

    Tutorial-Java-3-Orientacao-a-Objetos.html)

    Padro de projeto de software

    Os padres de projeto de software ou padres de desenho de software, tambm muito conhecido pelo termo

    original em ingls: Design Patterns, descrevem solues para problemas recorrentes no desenvolvimento de

    sistemas de software orientados a objetos. Um padro de projeto estabelece um nome e define o problema, a soluo,

    quando aplicar esta soluo e suas conseqncias.Os padres de projeto visam facilitar a reutilizao de solues de desenho - isto , solues na fase de projeto do

    software, sem considerar reutilizao de cdigo. Tambm acarretam um vocabulrio comum de desenho, facilitando

    comunicao, documentao e aprendizado dos sistemas de software.

    Histria

    O conceito de padro de projeto foi criado na dcada de 70 pelo arquiteto Christopher Alexander.[1] [2] Em seus

    livrosNotes on the Synthesis of Form, The Timeless Way of Building eA Pattern Language, ele estabelece que um

    padro deve ter, idealmente, as seguintes caractersticas:

    Encapsulamento: um padro encapsula um problema/soluo bem definida. Ele deve ser independente,especfico e formulado de maneira a ficar claro onde ele se aplica.

    Generalidade: todo padro deve permitir a construo de outras realizaes a partir deste padro.

    Equilbrio: quando um padro utilizado em uma aplicao, o equilbrio d a razo, relacionada com cada uma

    das restries envolvidas, para cada passo do projeto. Uma anlise racional que envolva uma abstrao de dados

    empricos, uma observao da aplicao de padres em artefatos tradicionais, uma srie convincente de exemplos

    e uma anlise de solues ruins ou fracassadas pode ser a forma de encontrar este equilbrio.

    Abstrao: os padres representam abstraes da experincia emprica ou do conhecimento cotidiano.

    Abertura: um padro deve permitir a sua extenso para nveis mais baixos de detalhe.

    Combinatoriedade: os padres so relacionados hierarquicamente. Padres de alto nvel podem ser compostos

    ou relacionados com padres que endeream problemas de nvel mais baixo.

    Alm da definio das caractersticas de um padro, Alexander definiu o formato que a descrio de um padro deve

    ter. Ele estabeleceu que um padro deve ser descrito em cinco partes:

    Nome: uma descrio da soluo, mais do que do problema ou do contexto.

    Exemplo: uma ou mais figuras, diagramas ou descries que ilustrem um prottipo de aplicao.

    Contexto: a descrio das situaes sob as quais o padro se aplica.

    Problema: uma descrio das foras e restries envolvidos e como elas interagem.

    Soluo: relacionamentos estticos e regras dinmicas descrevendo como construir artefatos de acordo com o

    padro, freqentemente citando variaes e formas de ajustar a soluo segundo as circunstncias. Inclui

    referncias a outras solues e o relacionamento com outros padres de nvel mais baixo ou mais alto.

    http://pt.wikipedia.org/w/index.php?title=Empirismohttp://pt.wikipedia.org/w/index.php?title=Christopher_Alexanderhttp://pt.wikipedia.org/w/index.php?title=D%C3%A9cada_de_1970http://pt.wikipedia.org/w/index.php?title=Orienta%C3%A7%C3%A3o_a_objetohttp://pt.wikipedia.org/w/index.php?title=Softwarehttp://pt.wikipedia.org/w/index.php?title=L%C3%ADngua_inglesahttp://www.javafree.org/artigo/871497/Tutorial-Java-3-Orientacao-a-Objetos.htmlhttp://www.javafree.org/artigo/871497/Tutorial-Java-3-Orientacao-a-Objetos.htmlhttp://www.javafree.org/artigo/871496/Tutorial-Java-2-Caracteristicas-Basicas.htmlhttp://www.javafree.org/artigo/871498/Tutorial-Java-O-que-e-Java.htmlhttp://java.sun.com/docs/books/tutorial/http://www.javafree.org/topic-850964-Iniciando-em-Java.htmlhttp://java.sun.com/
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    15/81

    Padro de projeto de software 12

    Em 1987, a partir dos conceitos criados por Alexander, os programadores Kent Beck e Ward Cunningham

    propuseram os primeiros padres de projeto para a rea da cincia da computao. Em um trabalho para a

    conferncia OOPSLA, eles apresentaram alguns padres para a construo de janelas na linguagem Smalltalk.[3] Nos

    anos seguintes Beck, Cunningham e outros seguiram com o desenvolvimento destas idias.

    O movimento ao redor de padres de projeto ganhou popularidade com o livro Design Patterns: Elements of

    Reusable Object-Oriented Software, publicado em 1995. Os autores desse livro so Erich Gamma, Richard Helm,Ralph Johnson e John Vlissides, conhecidos como a "Gangue dos Quatro" (Gang of Four) ou simplesmente "GoF".

    Posteriormente, vrios outros livros do estilo foram publicados, como Applying UML and Patterns: An Introduction

    to Object-Oriented Analysis and Design and Iterative Development, que introduziu um conjunto de padres

    conhecidos como GRASP (General Responsibility Assignment Software Patterns).

    Padres GoF

    Os padres "GoF" so organizados em famlias de padres: de criao, estruturais e comportamentais. Os padres de

    criao so relacionados criao de objetos, os estruturais tratam das associaes entre classes e objetos e os

    comportamentais das interaes e divises de responsabilidades entre as classes ou objetos.

    Um padro "GoF" tambm classificado segundo o seu escopo: de classe ou de objeto. Nos padres com escopo de

    classe os relacionamentos que definem este padro so definidos atravs de herana e em tempo de compilao. Nos

    padres com escopo de objeto o padro encontrado no relacionamento entre os objetos definidos em tempo de

    execuo.

    Padres "GoF" organizados nas suas famlias:

    Padres de criao

    Abstract Factory

    Builder

    Factory Method Prototype

    Singleton

    Padres estruturais

    Adapter

    Bridge

    Composite

    Decorator

    Faade

    Flyweight Proxy

    http://pt.wikipedia.org/w/index.php?title=Tempo_de_execu%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Tempo_de_execu%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Tempo_de_compila%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Heran%C3%A7ahttp://pt.wikipedia.org/w/index.php?title=John_Vlissideshttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Erich_Gammahttp://pt.wikipedia.org/w/index.php?title=1995http://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Smalltalkhttp://pt.wikipedia.org/w/index.php?title=OOPSLAhttp://pt.wikipedia.org/w/index.php?title=Ci%C3%AAncia_da_computa%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Ward_Cunninghamhttp://pt.wikipedia.org/w/index.php?title=Kent_Beckhttp://pt.wikipedia.org/w/index.php?title=Programadorhttp://pt.wikipedia.org/w/index.php?title=1987
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    16/81

    Padro de projeto de software 13

    Padres comportamentais

    Chain of Responsibility

    Command

    Interpreter

    Iterator

    Mediator Memento

    Observer

    State

    Strategy

    Template Method

    Visitor

    Padres GRASP

    Controller

    Creator

    Expert

    Law of Demeter

    Low Coupling/High Cohesion

    Polymorphism

    Pure Fabrication

    [1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.Design Patterns: Elements of Reusable Object-Oriented Software.

    1.ed. Estados Unidos da Amrica: Addison-Wesley, 1995. ISBN 0-201-63361-2

    [2] Doug Lea. Christopher Alexander:An Introduction for Object-Oriented Designers (http://g. oswego.edu/dl/ca/ca/ca. html) (em Ingls).

    Pgina visitada em 18 de abril de 2007.

    [3] Kent Beck, Ward Cunningham. Using Pattern Languages for Object-Oriented Programs (http://c2.

    com/doc/oopsla87.

    html) (em Ingls).Pgina visitada em 18 de abril de 2007.

    Bibliografia

    Christopher Alexander.Notes on the Synthesis of Form . Estados Unidos da Amrica: Harvard University Press,

    1964. ISBN 0-674-62751-2

    Christopher Alexander. The Timeless Way of Building. Estados Unidos da Amrica: Oxford University Press,

    1979. ISBN 0-19-502402-8

    Christopher Alexander.A Pattern Language. Estados Unidos da Amrica: Oxford University Press, 1977. ISBN

    0-19-501919-9

    Craig Larman.Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design andIterative Development. 1.ed. Estados Unidos da Amrica: Prentice Hall, 2004. pp.736. ISBN 0-13-148906-2

    Gregor Hohpe, Bobby Woolf.Enterprise Integration Patterns: Designing, Building, And Deploying Messaging

    Solutions. 1.ed. Estados Unidos da Amrica: Addinson-Wesley, 2004. pp.659. ISBN 0-321-20068-3

    Pablo Dall'Oglio.PHP Programando com Orientao a Objetos (http://www. adianti.com.br/phpoo): Inclui

    Design Patterns. 1.ed. So Paulo: Novatec, 2007. pp.576. ISBN 978-85-7522-137-2

    Alexandre Altair de Melo e Mauricio G. F. Nascimento.PHP Profissional (http://www.novatec.com. br/livros/

    phppro): Aprenda a desenvolver sistemas profissionais orientados a objetos com padres de projeto. 1.ed. So

    Paulo: Novatec, 2007. pp.464. ISBN 978-85-7522-141-9

    http://www.novatec.com.br/livros/phpprohttp://www.novatec.com.br/livros/phpprohttp://www.adianti.com.br/phpoohttp://c2.com/doc/oopsla87.htmlhttp://pt.wikipedia.org/w/index.php?title=2007http://pt.wikipedia.org/w/index.php?title=18_de_abrilhttp://g.oswego.edu/dl/ca/ca/ca.htmlhttp://pt.wikipedia.org/w/index.php?title=Estados_Unidos_da_Am%C3%A9ricahttp://pt.wikipedia.org/w/index.php?title=John_Vlissideshttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Erich_Gammahttp://pt.wikipedia.org/w/index.php?title=Pure_Fabricationhttp://pt.wikipedia.org/w/index.php?title=Polymorphismhttp://pt.wikipedia.org/w/index.php?title=Law_of_Demeterhttp://pt.wikipedia.org/w/index.php?title=Expert_%28GRASP%29http://pt.wikipedia.org/w/index.php?title=Creatorhttp://pt.wikipedia.org/w/index.php?title=Controller
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    17/81

    Padro de projeto de software 14

    Ligaes externas

    Lista de alguns padroes comuns (http://www.mindspring.com/~mgrand/pattern_synopses2.htm) (em ingls)

    Pgina com descries e exemplos dos padres GoF (http://www.vincehuston.org/dp/) (em ingls)

    http://pt.wikipedia.org/w/index.php?title=L%C3%ADngua_inglesahttp://www.vincehuston.org/dp/http://pt.wikipedia.org/w/index.php?title=L%C3%ADngua_inglesahttp://www.mindspring.com/~mgrand/pattern_synopses2.htm
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    18/81

    15

    Padres de Criao

    Abstract FactoryAbstract Factory um padro de projeto de software (tambm conhecido como design pattern em ingls). Este

    padro permite a criao de famlias de objetos relacionados ou dependentes, atravs de uma nica interface e sem

    que a classe concreta seja especificada.

    Utilizao

    O padro Abstract Factory pode ser utilizado na implementao de um toolkit que disponibilize controles que

    funcionam em diferentes interfaces grficas, tal como Motif, GTK+ (GNOME) ou Qt (KDE). Estas GUIs possuem

    diferentes padres de controles visuais e, para facilitar a construo de aplicativos que interajam facilmente com

    diferentes interfaces grficas, interessante que se defina interfaces comuns para acesso aos controles,

    independentemente da GUI utilizada. Este problema pode ser resolvido atravs de uma classe abstrata que declara

    uma interface genrica para criao dos controles visuais e de uma classe abstrata para criao de cada tipo de

    controle. O comportamento especfico, de cada um dos padres tecnolgicos contemplados, implementado atravs

    de uma classe concreta. O aplicativo, ou "cliente", interage com o toolkit atravs das classes abstratas sem ter

    conhecimento da implementao das classes concretas.

    Um exemplo bem simplista seria um projeto com interface para Mobile e para Desktop, uma boa opo para

    reaproveitar os mesmos controles de interface seria criar pacotes com classes abstratas e os pacotes com as classes

    concretas implementando apenas as diferenas. Esse padro tambm se aplica na padronizao de ambientes, por

    exemplo, tamanhos de botes, fontes, cores de fundo, largura de bordas. Com isso e havendo uma poltica que exijaque os desenvolvedores usem essas classes em vez das nativas da linguagem, ajudar a padronizar a aparncia e

    comportamento das aplicaes.

    Exemplo

    Neste exemplo, a classe abstrata WidgetFactory possui duas especializaes: MotifWidgetFactory para widgets

    Motif e QtWidgetFactory para widgets Qt. Essas especializaes so classes concretas capazes de "produzir" os

    elementos da interface grfica. O cliente do toolkitobtm os elementos grficos de que necessita atravs da classe

    (interface) WidgetFactory sem ter conhecimento das classes concretas. Da mesma maneira, o cliente somente

    interage com as interfaces que representam os elementos produzidos pela Abstract Factory (no exemplo, a classe

    Janela e a classe Botao).

    http://pt.wikipedia.org/w/index.php?title=Widgetshttp://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29%23Classes_abstratas_e_concretashttp://pt.wikipedia.org/w/index.php?title=Interface_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Aplicativohttp://pt.wikipedia.org/w/index.php?title=GUIhttp://pt.wikipedia.org/w/index.php?title=KDEhttp://pt.wikipedia.org/w/index.php?title=Qthttp://pt.wikipedia.org/w/index.php?title=GNOMEhttp://pt.wikipedia.org/w/index.php?title=GTK%2Bhttp://pt.wikipedia.org/w/index.php?title=Motifhttp://pt.wikipedia.org/w/index.php?title=Interface_gr%C3%A1ficahttp://pt.wikipedia.org/w/index.php?title=Toolkithttp://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Interface_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Objetohttp://pt.wikipedia.org/w/index.php?title=L%C3%ADngua_inglesahttp://pt.wikipedia.org/w/index.php?title=Padr%C3%B5es_de_projeto_de_software
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    19/81

    Abstract Factory 16

    Estrutura

    Exemplo de Diagrama em UML para o Padro Abstract Factory.

    Cdigo em Java

    Este cdigo, escrito na linguagem Java, mostra a implementao do diagrama mostrado acima. Por uma questo de

    simplicidade, o cdigo relacionado s janelas omitido.

    abstractclassWidgetFactory{

    publicstatic WidgetFactory obterFactory()

    {

    if( Configuracao.obterInterfaceGraficaAtual()==

    Configuracao.MotifWidget)

    {

    returnnewMotifWidgetFactory();

    }

    else {

    returnnewQtWidgetFactory();

    }

    }

    publicabstract Botao criarBotao();

    }

    classMotifWidgetFactoryextends WidgetFactory

    {

    public Botao criarBotao() {

    http://pt.wikipedia.org/w/index.php?title=Ficheiro:Abstract_Factory.gifhttp://pt.wikipedia.org/w/index.php?title=UML
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    20/81

    Abstract Factory 17

    returnnewBotaoMotif();

    }

    }

    classQtWidgetFactoryextends WidgetFactory

    {

    public Botao criarBotao() {

    returnnewBotaoQt();

    }

    }

    abstractclassBotao

    {

    publicabstractvoiddesenhar();

    }

    classBotaoMotifextends Botao

    {

    publicvoiddesenhar() {

    System.out.println("Eu sou um botao Motif!");

    }

    }

    classBotaoQtextends Botao

    {

    publicvoiddesenhar() {System.out.println("Eu sou um botao Qt!");

    }

    }

    publicclassCliente

    {

    publicstaticvoidmain(String[] args)

    {

    WidgetFactory factory = WidgetFactory.obterFactory();

    Botao botao = factory.criarBotao();

    botao.desenhar();

    }

    }

    Este exemplo imprimiria na tela o texto "Eu sou um botao Motif!" ou "Eu sou um botao Qt!" dependendo do valor

    retornado pelo mtodo Configuracao.obterInterfaceGraficaAtual(), que descobre a interface grfica, Motif ou Qt,

    utilizada pelo sistema.

    http://pt.wikipedia.org/w/index.php?title=M%C3%A9todo_%28programa%C3%A7%C3%A3o%29
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    21/81

    Abstract Factory 18

    Cdigo em VB.NET

    PublicMustInheritClassWidgetFactory

    SharedFunction obterFactory() As WidgetFactory

    If Configuracao.obterInterfaceGraficaAtual() Is

    Configuracao.MotifWidget Then ReturnNew MotifWidgetFactory()

    Else

    ReturnNew QtWidgetFactory()

    EndIf

    EndFunction

    PublicMustOverrideFunction criarBotao() As Botao

    EndClass

    PublicClassMotifWidgetFactory

    Inherits WidgetFactory

    PublicOverridesFunction criarBotao() As Botao

    ReturnNew BotaoMotif

    EndFunction

    EndClass

    PublicClassQtWidgetFactory Inherits WidgetFactory

    PublicOverridesFunction criarBotao() As Botao

    ReturnNew BotaoQt

    EndFunction

    EndClass

    PublicMustInheritClassBotao

    PublicMustOverrideSub desenhar()

    EndClass

    PublicClassBotaoMotif

    Inherits Botao

    PublicOverridesSub desenhar()

    Console.Out.WriteLine("Eu sou um boto Motif.")

    EndSub

    EndClass

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    22/81

    Abstract Factory 19

    PublicClassBotaoQt

    Inherits Botao

    PublicOverridesSub desenhar()

    Console.Out.WriteLine("Eu sou um boto Qt.")

    EndSub

    EndClass

    PublicClassClient

    PublicSharedSub main()

    Dim factory As WidgetFactory = WidgetFactory.obterFactory

    Dim botao As Botao = factory.criarBotao

    botao.desenhar()

    EndSub

    EndClass

    Padres relacionados

    Factory Method

    Prototype

    Singleton

    Bibliografia

    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.Design Patterns: Elements of Reusable

    Object-Oriented Software. 1.ed. Estados Unidos da Amrica: Addison-Wesley, 1995. ISBN 0-201-63361-2

    Steven John Metsker.Padres de Projeto Em Java. 1.ed. Brasil: Bookman, 2004. ISBN 85-363-0411-1

    http://pt.wikipedia.org/w/index.php?title=Brasilhttp://pt.wikipedia.org/w/index.php?title=Steven_John_Metskerhttp://pt.wikipedia.org/w/index.php?title=Estados_Unidos_da_Am%C3%A9ricahttp://pt.wikipedia.org/w/index.php?title=John_Vlissideshttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Erich_Gamma
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    23/81

    Builder 20

    Builder

    Builder um padro de projeto de software que permite a separao da construo de um objeto complexo da sua

    representao, de forma que o mesmo processo de construo possa criar diferentes representaes.

    Estrutura

    Diagrama UML da estrutura do padro Builder

    O padro Builder, da forma como foi

    descrito no livro Design Patterns:

    Elements of Reusable Object-Oriented

    Software, contm os seguintes

    elementos:

    director constri um objeto

    utilizando a interface do builder;

    builder especifica uma interface

    para um construtor de partes do

    objeto-produto;

    concrete builder define uma implementao da interface builder, mantm a representao que cria e fornece

    interface para recuperao do produto;

    product o objeto complexo em construo. Inclui classes que definem as parte constituintes.

    Utilizao

    O padro Builder pode ser utilizado em uma aplicao que converte o formato RTF para uma srie de outros

    formatos e que permite a incluso de suporte para converso para outros formatos, sem a alterao do cdigo fonte

    do leitor de RTF.A implementao da soluo para esse problema pode ser realizada atravs de uma classe de leitura ( director)

    associada a uma classe capaz de converter o formato RTF para outra representao ( builder). O objeto da classe de

    leitura l cada token do texto e executa o mtodo apropriado no objeto de converso, de acordo com tipo do token. A

    classe de converso possui um mtodo para cada tipo de token, incluindo os caracteres comuns, pargrafos, fontes e

    etc. Para cada formato de texto suportado criada uma classe de converso especializada (concrete builder). Um

    conversor para formato ASCII, por exemplo, poderia ignorar qualquer requisio para converter tokens que no

    fossem caracteres comuns. Um conversor para o formato PDF, por outro lado, iria processar qualquer requisio para

    poder converter o estilo, alm do texto.

    Comparao com o Abstract Factory

    O padro Builder muitas vezes comparado com o padro Abstract Factory pois ambos podem ser utilizados para a

    construo de objetos complexos. A principal diferena entre eles que o Builder constri objetos complexos passo

    a passo e o Abstract Factory constri famlias de objetos, simples ou complexos, de uma s vez.

    Exemplo

    Neste exemplo, o mtodo lerRTF() (classe LeitorRTF) percorre uma lista com os tokens encontrados no texto de

    entrada (formato RTF) e, para cada tipo de token, chama um mtodo do objeto de tipo ConversorTexto. Dependendo

    do formato escolhido para o texto de destino, ser escolhida uma implementao da classe ConversorTexto:

    ConversorPDF, ConversorTeX ou ConversorASCII. Cada uma destas classes implementa os mtodos de acordo com

    as caractersticas do formato relacionado. A classe ConversorASCII no implementa os mtodos converteParagrafo()

    http://pt.wikipedia.org/w/index.php?title=PDFhttp://pt.wikipedia.org/w/index.php?title=ASCIIhttp://pt.wikipedia.org/w/index.php?title=Caracterehttp://pt.wikipedia.org/w/index.php?title=Tokenhttp://pt.wikipedia.org/w/index.php?title=RTFhttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Ficheiro:Builder_UML_class_diagram.svghttp://pt.wikipedia.org/w/index.php?title=Objetohttp://pt.wikipedia.org/w/index.php?title=Padr%C3%B5es_de_projeto_de_software
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    24/81

    Builder 21

    e converteFonte() pois este formato (ASCII) no possui elementos de estilo.

    Diagrama

    Exemplo de Diagrama em UML para o Padro Builder.

    Cdigo

    Este cdigo, escrito na linguagem Java, mostra a implementao do diagrama mostrado acima.

    abstractclassConversorTexto{ publicvoidconverterCaractere(char c){

    // vazio

    }

    publicvoidconverterParagrafo(){

    // vazio

    }

    publicvoidconverterFonte(Fonte f){

    // vazio }

    }

    classConversorPDFextends ConversorTexto {

    publicvoidconverterCaractere(char c){

    System.out.print("Caractere PDF");

    }

    publicvoidconverterParagrafo(){

    System.out.print("Pargrafo PDF"); }

    http://pt.wikipedia.org/w/index.php?title=Ficheiro:Builder_(padr%E3%AF%A9.pnghttp://pt.wikipedia.org/w/index.php?title=UMLhttp://pt.wikipedia.org/w/index.php?title=ASCII
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    25/81

    Builder 22

    publicvoidconverterFonte(Fonte f){

    System.out.print("Fonte PDF");

    }

    }

    classConversorTeXextends ConversorTexto {

    publicvoidconverterCaractere(char c){

    System.out.print("Caractere Tex");

    }

    publicvoidconverterParagrafo(){

    System.out.print("Paragrafo Tex");

    }

    publicvoidconverterFonte(Fonte f){System.out.print("Fonte Tex");

    }

    }

    classConversorASCIIextends ConversorTexto {

    publicvoidconverterCaractere(char c){

    System.out.print("Caractere ASCII");

    }

    }

    classLeitorRTF{

    private ConversorTexto conversor;

    LeitorRTF(ConversorTexto c){

    this.conversor= c;

    }

    publicvoidlerRTF(){

    List tokens = obterTokensDoTexto();

    for(Token t : tokens){

    if(t.getTipo()== Token.Tipo.CARACTERE){

    conversor.converterCaractere(t.getCaractere());

    }

    if(t.getTipo()== Token.Tipo.PARAGRAFO){

    conversor.converterParagrafo();

    }

    if(t.getTipo()== Token.Tipo.FONTE){conversor.converterFonte(t.getFonte());

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    26/81

    Builder 23

    }

    }

    }

    }

    publicclassCliente{

    publicstaticvoidmain(String[] args){

    ConversorTexto conversor;

    if(args[0].equals("pdf")){

    conversor =new ConversorPDF();

    }elseif(args[0].equals("tex")){

    conversor =new ConversorTeX();

    }else{

    conversor =new ConversorASCII(); }

    LeitorRTF leitor =new LeitorRTF(conversor);

    leitor.lerRTF();

    }

    }

    A classe Cliente determina, atravs do parmetro passado ao programa Java ("pdf" para formato PDF, "tex" para Tex

    e qualquer outro para ASCII), qual das classes derivadas de ConversorTexto ir utilizar na construo da classe

    LeitorRTF.

    Padres relacionados

    Abstract Factory

    Composite

    Bibliografia

    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.Design Patterns: Elements of Reusable

    Object-Oriented Software. 1.ed. Estados Unidos da Amrica: Addison-Wesley, 1995. ISBN 0-201-63361-2

    http://pt.wikipedia.org/w/index.php?title=Estados_Unidos_da_Am%C3%A9ricahttp://pt.wikipedia.org/w/index.php?title=John_Vlissideshttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Erich_Gamma
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    27/81

    Factory Method 24

    Factory Method

    Factory Method, na cincia da computao, um padro de projeto de software (design pattern, em ingls) que

    fornece uma interface para criao de famlias de objetos relacionados ou dependentes, sem especificar suas classes

    concretas. O factory method permite adiar a instanciao para as subclasses.

    Estrutura

    Diagrama UML da estrutura do padro Factory Method

    O padro Factory Method, da forma

    como foi descrito no livro Design

    Patterns: Elements of Reusable

    Object-Oriented Software, contm os

    seguintes elementos:

    Creator declara ofactory method

    (mtodo de fabricao) que retorna

    o objeto da classe Product

    (produto). Este elemento tambm

    pode definir uma implementao

    bsica que retorna um objeto de

    uma classe ConcreteProduct (produto concreto) bsica;

    ConcreteCreator sobrescreve ofactory methode retorna um objeto da classe ConcreteProduct;

    Product define uma interface para os objectos criados pelofactory method;

    ConcreteProduct uma implementao para a interface Product.

    UtilizaoEste padro muito utilizado em frameworks para definir e manter relacionamentos entre objetos. O framework

    Spring, dependendo da configurao, pode utilizar um Factory Method para criar os seus beans.[1]

    Este padro pode ser utilizado na construo de um frameworkque suporta aplicaes que apresentam mltiplos

    documentos ao usurio. Normalmente este tipo de aplicao manipula um nmero varivel de formatos de

    documento e, por isso, esteframeworkdeve ser flexvel o bastante para suportar qualquer formato. Uma soluo para

    este problema poderia disponibilizar, no framework, o cdigo para alguns dos formatos mais utilizados. Mas, na

    prtica, esta soluo seria uma implementao pouco flexvel, e at mesmo incompleta, j que custoso implementar

    os mais variados formatos. O padro Factory Method prope uma soluo que deixa para o cliente (a implementao

    da aplicao) a tarefa de suportar os formatos necessrios e para o frameworko papel de definio de uma abstrao

    que oferece uma interface nica para criao de documentos.

    Esteframeworkseria baseado em duas classes abstratas, que representam a Aplicao e o Documento. O cliente do

    frameworkfornece um par de classes concretas, uma aplicao e o respectivo documento, para cada um dos formatos

    de Documento suportados pela Aplicao. Se for necessrio apresentar um documento que suporte desenho, por

    exemplo, o cliente deve disponibilizar as classes AplicacaoDesenho e DocumentoDesenho (supondo que o sufixo

    "Desenho" indique classes que suportam esta funcionalidade).

    O objetivo do Factory Method est em diversas classes que implementam a mesma operao, retornarem o mesmo

    tipo abstrato, mas internamente instanciam diferentes classes que o implementam. Com o Factory Method o criador

    do objeto faz uma escolha de qual classe instanciar para o cliente. Para ser um Factory Method o mtodo precisa

    retornar (ou uma interface ou uma classe abstrata), e dependendo das necessidades do cliente criar um objetodeterminado como retorno. Um exemplo clssico do Factory Method so os iteradores tanto em Java como em .NET

    http://pt.wikipedia.org/w/index.php?title=Classe_concretahttp://pt.wikipedia.org/w/index.php?title=Classe_abstratahttp://pt.wikipedia.org/w/index.php?title=Aplica%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=JavaBeanshttp://pt.wikipedia.org/w/index.php?title=Spring_Frameworkhttp://pt.wikipedia.org/w/index.php?title=Frameworkhttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Ficheiro:Factory_Method_UML_class_diagram.pnghttp://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Objetohttp://pt.wikipedia.org/w/index.php?title=Interface_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Padr%C3%B5es_de_projeto_de_softwarehttp://pt.wikipedia.org/w/index.php?title=Ci%C3%AAncia_da_computa%C3%A7%C3%A3o
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    28/81

    Factory Method 25

    Exemplo

    Neste exemplo, uma aplicao, que construda atravs de um framework baseado no padro Factory Method,

    suporta a criao de documentos do tipo MeuDocumento. O framework constitudo pelas classes abstratas

    Aplicacao eDocumento. A aplicao disponibiliza as classes concretas MinhaAplicacao e MeuDocumento. A classe

    MinhaAplicacao uma implementao da abstrao definida pela classeAplicacao.

    Diagrama

    Exemplo de Diagrama em UML para o Padro Factory Method.

    A chave deste padro est na declarao do mtodo abstrato criaDocumento, da classeAplicacao, e na sua utilizao

    pelo mtodo novoDocumento. Este arranjo permite que o mtodo novoDocumento crie documentos sem conhecer os

    detalhes de implementao, existentes em cada tipo de documento suportado pela aplicao. Isto permite que a

    implementao do mtodo criaDocumento (neste exemplo situada na classe MinhaAplicacao) varie livremente, para

    atender os diversos formatos possivelmente suportados, sem que seja necessrio modificar o cdigo das classes

    abstratas.

    Cdigo em JavaEste cdigo, escrito na linguagem Java, mostra a implementao do diagrama mostrado acima.

    /**

    * Abstrao de uma Aplicao capaz de manipular

    * documentos.

    */

    abstractclassAplicacao{

    private Documento doc;

    /**

    http://pt.wikipedia.org/w/index.php?title=Ficheiro:Factory_Method_(portuguese).pnghttp://pt.wikipedia.org/w/index.php?title=UML
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    29/81

    Factory Method 26

    * Abstrao do Factory Method

    */

    abstract Documento criaDocumento();

    voidnovoDocumento(){

    this.doc=this.criaDocumento();

    }

    voidabrirDocumento(){

    this.doc.abrir();

    }

    }

    /**

    * Abstrao de um Documento.

    */ abstractclassDocumento{

    voidabrir(){

    System.out.println("Documento:Abrir documento!");

    }

    voidfechar(){

    System.out.println("Documento:Fechar documento!");

    }

    voidgravar(){

    System.out.println("Documento:Gravar documento!");

    }

    }

    /**

    * Esta classe concreta contm a implementao

    * de uma aplicao capaz de manipular documentos

    * do tipo MeuDocumento.

    */ classMinhaAplicacaoextends Aplicacao {

    /**

    * Uma implementao do Factory Method. Este mtodo

    * especializado na criao de documentos do tipo MeuDocumento

    */

    Documento criaDocumento(){

    returnnewMeuDocumento();

    }

    }

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    30/81

    Factory Method 27

    /**

    * Esta classe concreta contm a implementao

    * de um tipo de documento especfico.

    */

    classMeuDocumentoextends Documento {

    }

    Cdigo em VB.NET

    O mesmo exemplo acima, em linguagem Visual Basic .NET.

    PublicMustInheritClassAplicacao

    Private doc As Documento

    MustOverrideFunction criaDocumento() As Documento

    Sub novoDocumento()

    Me.doc =Me.criaDocumento

    EndSub

    Sub abrirDocumento()

    Me.doc.abrir()

    EndSub

    EndClass

    PublicMustInheritClassDocumento

    Sub abrir()

    Console.WriteLine("Documento:Abrir documento!")

    EndSub

    Sub fechar()

    Console.WriteLine("Documento:Fechar documento!")

    EndSub

    Sub gravar()

    Console.WriteLine("Documento:Gravar documento!")

    EndSub

    EndClass

    PublicClassMinhaAplicacao

    Inherits Aplicacao

    PublicOverridesFunction criaDocumento() As Documento

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    31/81

    Factory Method 28

    ReturnNew MeuDocumento

    EndFunction

    EndClass

    PublicClassMeuDocumento

    Inherits Documento

    EndClass

    Cdigo em C#

    O mesmo exemplo acima, em linguagem C#

    publicabstractclassAplicacao

    {

    private Documento doc;

    Documento criaDocumento();

    voidnovoDocumento()

    {

    this.doc = this.criaDocumento();

    }

    voidabrirDocumento()

    {

    this.doc.abrir();

    }

    }

    publicabstractclassDocumento

    {

    voidabrir()

    {

    Console.WriteLine("Documento:Abrir documento!");

    }

    voidfechar()

    {

    Console.WriteLine("Documento:Fechar documento!");

    }

    voidgravar()

    {

    Console.WriteLine("Documento:Gravar documento!");

    }

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    32/81

    Factory Method 29

    }

    publicclassMinhaAplicacao : Aplicacao

    {

    public Documento criaDocumento()

    {

    returnnewMeuDocumento();

    }

    }

    publicclassMeuDocumento : Documento

    {

    }

    Padres relacionados Abstract Factory

    Template Method

    Prototype

    [1] Rod Johnson, Juergen Hoeller, Alef Arendsen, Colin Sampaleanu, Rob Harrop, Thomas Risberg, Darren Davison, Dmitriy Kopylenko, Mark

    Pollack, Thierry Templier, Erwin Vervaet, Portia Tung, Ben Hale, Adrian Colyer, John Lewis, Costin Leau, Rick Evans. The Spring

    Framework - Reference Documentation (http://www. springframework.org/docs/reference/beans.

    html#beans-factory-class-instance-factory-method)(em Ingls). Pgina visitada em 16 de maio de 2007.

    Bibliografia

    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.Design Patterns: Elements of ReusableObject-Oriented Software. 1.ed. Estados Unidos da Amrica: Addison-Wesley, 1995. ISBN 0-201-63361-2

    Steven John Metsker.Padres de Projeto Em Java. 1.ed. Brasil: Bookman, 2004. ISBN 85-363-0411-1

    http://pt.wikipedia.org/w/index.php?title=Brasilhttp://pt.wikipedia.org/w/index.php?title=Steven_John_Metskerhttp://pt.wikipedia.org/w/index.php?title=Estados_Unidos_da_Am%C3%A9ricahttp://pt.wikipedia.org/w/index.php?title=John_Vlissideshttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Erich_Gammahttp://pt.wikipedia.org/w/index.php?title=2007http://pt.wikipedia.org/w/index.php?title=16_de_maiohttp://www.springframework.org/docs/reference/beans.html#beans-factory-class-instance-factory-methodhttp://www.springframework.org/docs/reference/beans.html#beans-factory-class-instance-factory-method
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    33/81

    Prototype 30

    Prototype

    Prototype, na cincia da computao, um padro de projeto de software (design pattern, em ingls) que permite a

    criao de objetos a partir de um modelo original, ou prottipo.

    Estrutura

    Diagrama UML da estrutura do padro Prototype

    O padro Prototype, da forma como foi

    descrito no livro Design Patterns:

    Elements of Reusable Object-Oriented

    Software, contm os seguintes

    elementos:

    prototype uma classe que declara

    uma interface para objetos capazes

    de clonar a si mesmo;

    prototype concreto

    implementao de umprototype;

    cliente cria um novo objeto

    atravs de umprototype que capaz

    de clonar a si mesmo.

    Efetivamente, cada objeto , ele prprio, umafactory especializado em construir objetos iguais a si mesmo. O padro

    Prototype utilizado freqentemente em linguagens estaticamente tipadas como C++ e Java, e menos

    freqentemente utilizadas em linguagens dinamicamente tipadas como Smalltalk.

    O padro Prototype exige a implementao de uma operao de clonagem em cada uma das classes concretas do

    prottipo. Esta tarefa pode ser inconveniente, no caso do reaproveitamento de classes pr-existentes que nopossuem tal operao, ou mesmo complexa, se for considerada a possibilidade de existirem referncias circulares nos

    atributos de um objeto (um objeto possui um atributo que referncia um objeto que, por sua vez, referncia o objeto

    original).

    Utilizao

    O padro Prototype pode ser utilizado em sistemas que precisam ser independentes da forma como os seus

    componentes so criados, compostos e representados. O padro Prototype pode ser til em sistemas com as seguintes

    caractersticas:

    sistemas que utilizam classes definidas em tempo de execuo; sistemas que utilizam o padro Abstract Factory para criao de objetos. Neste caso, a hierarquia de classes pode

    se tornar muito complexa e o padro Prototype pode ser uma alternativa mais simples, por realizar a mesma tarefa

    com um nmero reduzido de classes;

    sistemas que possuem componentes cujo estado inicial possui poucas variaes e onde conveniente

    disponibilizar um conjunto pr-estabelecido de prottipos que do origem aos objetos que compem o sistema.

    Quando utiliza o framework Spring, por exemplo, um desenvolvedor pode configurar um JavaBean como

    "prototype". Esta configurao faz com que cada uma das referncias a um JavaBean aponte para uma instncia

    diferente. O comportamento padro, ou singleton, define que todas as referncias a um JavaBean apontem para a

    mesma instncia de uma classe.[1]

    http://pt.wikipedia.org/w/index.php?title=Javabeanshttp://pt.wikipedia.org/w/index.php?title=Spring_Frameworkhttp://pt.wikipedia.org/w/index.php?title=Frameworkhttp://pt.wikipedia.org/w/index.php?title=Tempo_de_execu%C3%A7%C3%A3ohttp://pt.wikipedia.org/w/index.php?title=Smalltalkhttp://pt.wikipedia.org/w/index.php?title=C%2B%2Bhttp://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29%23Classes_abstratas_e_concretashttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Design_Patterns:_Elements_of_Reusable_Object-Oriented_Softwarehttp://pt.wikipedia.org/w/index.php?title=Ficheiro:Prototype_UML_(padr%E3%AF%A9.pnghttp://pt.wikipedia.org/w/index.php?title=UMLhttp://pt.wikipedia.org/w/index.php?title=Prot%C3%B3tipohttp://pt.wikipedia.org/w/index.php?title=Padr%C3%B5es_de_projeto_de_softwarehttp://pt.wikipedia.org/w/index.php?title=Ci%C3%AAncia_da_computa%C3%A7%C3%A3o
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    34/81

    Prototype 31

    Exemplo

    Neste exemplo mostrado uma hierarquia de classes representando documentos de formato ASCII e PDF que so

    criados atravs da classe Cliente. A partir de duas instncias prototpicas, ascii e pdf, o mtodo criarDocumento cria

    clones de documentos de acordo com o tipo desejado. A tarefa de realizar a criao da instncia implementada na

    classe Documento e herdada por suas classes filhas, ASCII e PDF.

    Diagrama

    Exemplo de Diagrama em UML para o Padro Prototype.

    Cdigo

    Este cdigo, escrito na linguagem Java, mostra a implementao do diagrama mostrado acima.

    abstractclassDocumentoimplements Cloneable {

    protected Documento clone(){

    Object clone =null;

    try{

    clone =super.clone();

    }catch(CloneNotSupportedException ex){

    ex.printStackTrace();

    }

    return(Documento) clone;

    }

    }

    classASCIIextends Documento {

    }

    classPDFextends Documento {

    }

    http://pt.wikipedia.org/w/index.php?title=Ficheiro:Prototype_sample.pnghttp://pt.wikipedia.org/w/index.php?title=UMLhttp://pt.wikipedia.org/w/index.php?title=PDFhttp://pt.wikipedia.org/w/index.php?title=ASCII
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    35/81

    Prototype 32

    classCliente{

    staticfinalint DOCUMENTO_TIPO_ASCII =0;

    staticfinalint DOCUMENTO_TIPO_PDF =1;

    private Documento ascii =new ASCII();

    private Documento pdf =new PDF();

    public Documento criarDocumento(int tipo){

    if(tipo==Cliente.DOCUMENTO_TIPO_ASCII){

    return ascii.clone();

    }else{

    return pdf.clone(); }

    }

    }

    Observao: Na linguagem Java, a interface Cloneable no possui mtodos e utilizada apenas para indicar que o

    mtodo Object.clone() pode realizar uma cpia, atributo por atributo, das instncias de uma classe. [2]

    Neste exemplo, a implementao da cpia da instncia delegada ao mtodo clone da super classe Object (A classe

    raiz da hierarquia de classes da linguagem Java). Se fosse necessrio, as classes Documento, ASCII ou PDF

    implementariam esse mtodo para refletir algum comportamento especfico.

    Padres relacionados

    Abstract Factory

    Composite

    Decorator

    [1] Rod Johnson, Juergen Hoeller, Alef Arendsen, Colin Sampaleanu, Rob Harrop, Thomas Risberg, Darren Davison, Dmitriy Kopylenko, Mark

    Pollack, Thierry Templier, Erwin Vervaet, Portia Tung, Ben Hale, Adrian Colyer, John Lewis, Costin Leau, Rick Evans. The Spring

    Framework - Reference Documentation (http://www. springframework.org/docs/reference/beans.html#beans-factory-scopes-prototype)

    (em Ingls). Pgina visitada em 13 de junho de 2007.

    [2] Sun Microsystems.JavaTM 2 Platform Std. Ed. (http://java. sun.com/j2se/1.4.2/docs/api/java/lang/Cloneable.html) (em ingls).

    Pgina visitada em 13 de junho de 2007.

    Bibliografia

    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.Design Patterns: Elements of Reusable

    Object-Oriented Software. 1.ed. Estados Unidos da Amrica: Addison-Wesley, 1995. ISBN 0-201-63361-2

    http://pt.wikipedia.org/w/index.php?title=Erich_Gammahttp://pt.wikipedia.org/w/index.php?title=Erich_Gammahttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=John_Vlissideshttp://pt.wikipedia.org/w/index.php?title=Estados_Unidos_da_Am%C3%A9ricahttp://pt.wikipedia.org/w/index.php?title=John_Vlissideshttp://pt.wikipedia.org/w/index.php?title=Ralph_Johnsonhttp://pt.wikipedia.org/w/index.php?title=Richard_Helmhttp://pt.wikipedia.org/w/index.php?title=Erich_Gammahttp://java.sun.com/j2se/1.4.2/docs/api/java/lang/Cloneable.htmlhttp://pt.wikipedia.org/w/index.php?title=Sun_Microsystemshttp://www.springframework.org/docs/reference/beans.html#beans-factory-scopes-prototype
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    36/81

    Singleton 33

    Singleton

    Diagrama UML de uma classe singleton.

    Singleton, um padro de projeto de software (do ingls Design

    Pattern). Este padro garante a existncia de apenas uma instncia de

    uma classe, mantendo um ponto global de acesso ao seu objeto.

    Nota lingustica: O termo vem do significado em ingls quando se

    resta apenas uma carta nas mos, num jogo de baralho.

    Muitos projetos necessitam que algumas classes tenham apenas uma

    instncia. Por exemplo, em uma aplicao que precisa de uma infraestrutura de log de dados, pode-se implementar

    uma classe no padro singleton. Desta forma existe apenas um objeto responsvel pelo log em toda a aplicao que

    acessvel unicamente atravs da classe singleton.

    Exemplos

    Em Java

    Segue um exemplo em Java de classe Singleton usada em log de dados. Esta classe suporta inicializao sob

    demanda e ambientes multi-thread.

    publicclassSingletonLog{

    // Construtor privado. Suprime o construtor pblico padrao.

    privateSingletonLog(){

    // Leitura da configurao de log. Normalmente descrita em um

    arquivo.

    }

    // Faz o log de eventos da aplicacao

    publicvoiddoLog(String eventDescription){

    }

    //Retorna a instncia nica da classe SingletonLog

    publicstatic SingletonLog getInstance(){

    return SingletonLogHolder.instance;

    }

    //Classe auxiliar para criacao da instancia. Evita problemas de

    sincronizacao de threads.

    privatestaticclassSingletonLogHolder{

    privatestatic SingletonLog instance =new SingletonLog();

    }

    }

    http://pt.wikipedia.org/w/index.php?title=Multi-threadhttp://pt.wikipedia.org/w/index.php?title=Inicializa%C3%A7%C3%A3o_sob_demandahttp://pt.wikipedia.org/w/index.php?title=Inicializa%C3%A7%C3%A3o_sob_demandahttp://pt.wikipedia.org/w/index.php?title=Log_de_dadoshttp://pt.wikipedia.org/w/index.php?title=Jogo_de_baralhohttp://pt.wikipedia.org/w/index.php?title=Objeto_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=L%C3%ADngua_inglesahttp://pt.wikipedia.org/w/index.php?title=Padr%C3%B5es_de_projeto_de_softwarehttp://pt.wikipedia.org/w/index.php?title=Ficheiro:Singleton.pnghttp://pt.wikipedia.org/w/index.php?title=UML
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    37/81

    Singleton 34

    Em C++

    Segue um exemplo em C++ da implementao de uma classe Singleton:

    classMyClass

    {

    private:

    MyClass() {} //contructor padro, no deve ser utilizado

    isoladamente

    public:

    static MyClass& getInstance()

    {

    static MyClass *instance =0;

    if (!instance) instance =new MyClass();

    return*instance;

    }

    };

    Em Delphi

    Abaixo segue um exemplo de como implementar uma classe Singleton:

    Por exemplo, numa classe Fachada, onde se encontra todos os mtodos disponveis para a interface da aplicao,

    pode ser criado um mtodo dinmico para que todos os que visualizam essa classe, no criarem mais instncias da

    mesma.

    classfunctionTFachada.ObterInstancia: TFachada;

    begin

    If FInstance =nilThen

    FInstance := Cliente.Fachada.TFachada.Create();//objeto

    instanciado atravs do Finstance

    Result:= FInstance;//retorna o objeto

    end;

    Em PHP

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    38/81

    Singleton 35

    definifa na propriedade, caso sim, a classe no ser instanciada

    novamente.

    self::$_instance=new self; // o new self cria uma

    instncia da prpria classe prpria classe.

    }

    return self::$_instance;

    }

    }

    Em Ruby

    classKlass

    includeSingleton

    end

    Em VB.NET

    PublicClassMyClass

    PrivateShared _instancia AsMyClass

    PrivateShared objetoSincronia AsNewObject

    PrivateSubNew()

    EndSub

    PublicSharedFunction getInstancia() AsMyClass

    If _instancia IsNothingThen

    SyncLock objetoSincronia

    If _instancia IsNothingThen _instancia =NewMyClass

    EndSyncLock

    EndIf

    Return _instancia

    EndFunction

    EndClass

    Em ActionScript 3

    package{

    publicclass ExemploSingleton { privatestaticvar instance:ExemploSingleton;

    publicfunction

    ExemploSingleton(enforcer:SingletonEnforcer) : void {

    if (enforcer ==null)

    thrownewError("S pode haver uma instncia de

    ExemploSingleton");

    }

    publicstaticfunction getInstance() : ExemploSingleton { if (instance ==null)

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    39/81

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    40/81

    Singleton 37

    classProgram

    {

    staticvoidMain(string[] args)

    {

    Car car = GenericSingleton.GetInstance();

    car.Color = 1;

    Person per = GenericSingleton.GetInstance();

    per.Name = "John";

    Car car2 = GenericSingleton.GetInstance();

    car.Color = 2;

    }

    }

    Obs: Esta soluo no impede a criao de mltiplas instncias das classes Car e Person. Como a classe genrica

    GenericSingleton obriga que as classes passadas no parmetro T tenham um construtor pblico, possvel criarinstncias em qualquer trecho de cdigo atravs de construes do tipo: Car car3 = new Car();.

  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    41/81

    38

    Padres Estruturais

    AdapterAdapter, tambm conhecido como Wrapper, um padro de projeto de software ou de desenho (do ingls design

    pattern). Este padro utilizado para 'adaptar' a interface de uma classe. O Adapter permite que classes com

    interfaces incompatveis possam interagir.

    Adapter permite que um objeto cliente utilize servios de outros objetos com interfaces diferentes por meio de uma

    interface nica.

    http://pt.wikipedia.org/w/index.php?title=Ficheiro:Adapter.PNGhttp://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Interface_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=L%C3%ADngua_inglesahttp://pt.wikipedia.org/w/index.php?title=Padr%C3%B5es_de_projeto_de_software
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    42/81

    Bridge (padro de projeto de software) 39

    Bridge (padro de projeto de software)

    Bridge um padro de projeto de software, ou design pattern em ingls, utilizado quando desejvel que uma

    interface (abstrao) possa variar independentemente das suas implementaes.

    Imagine um sistema grfico de janelas que deve ser portvel para diversas plataformas. Neste sistema so

    encontrados diversos tipos de janelas, como cones, dilogos, etc. Estas janelas formam uma hierarquia que contm

    uma abstrao das janelas (classe base). Normalmente, a portabilidade seria obtida criando-se especializaes dos

    tipos de janelas para cada uma das plataformas suportadas. O problema com essa soluo reside na complexidade da

    hierarquia gerada e na dependncia de plataforma que existir nos clientes do sistema.

    Atravs do padro Bridge, a hierarquia que define os tipos de janelas separada da hierarquia que contm a

    implementao. Desta forma todas as operaes de Janela so abstratas e suas implementaes so escondidas dos

    clientes.

    Exemplo

    O diagrama mostra a soluo para o problema citado. Temos duas hierarquias de classes relacionadas: a hierarquiade tipos de janelas (Janela, Icone e Dialogo) e a de implementao nas plataformas suportadas (JanelaImpl,

    XWindowImpl e MSWindowImpl). O relacionamento entre as interfaces, Janela e JanelaImpl, a "ponte" que

    "desacopla" a interface da implementao. Para que um cone seja desenhado, faz-se uma chamada ao mtodo

    DesenhaBorda() que por sua vez realiza "n" chamadas ao mtodo DesenhaLinha() da classe XWindowImpl ou

    MSWindowImpl, dependendo da plataforma desejada.

    Exemplo de Diagrama em UML para o Padro Bridge.

    http://pt.wikipedia.org/w/index.php?title=Ficheiro:Bridge.gifhttp://pt.wikipedia.org/w/index.php?title=UMLhttp://pt.wikipedia.org/w/index.php?title=M%C3%A9todo_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Acoplamentohttp://pt.wikipedia.org/w/index.php?title=Classe_%28programa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Gerenciador_de_janelahttp://pt.wikipedia.org/w/index.php?title=Interface_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29http://pt.wikipedia.org/w/index.php?title=Padr%C3%B5es_de_projeto_de_software
  • 8/7/2019 java_xml_ajax_padroes_Livro_wikipedia

    43/81

    Composite 40

    Composite

    Composite um padro de projeto de software utilizado para representar um objeto que constitudo pela

    composio de objetos similares a ele. Neste padro, o objeto composto possui um conjunto de outros objetos que

    esto na mesma hierarquia de classes a que ele pertence. O padro composite normalmente utilizado para

    representar listas recorrentes - ou recursivas - de elementos. Alm disso, esta forma de representar elementoscompostos em uma hierarquia de classes permite que os elementos contidos em um objeto composto sejam tratados

    como se fossem um nico objeto. Desta forma, todos os mtodos comuns s classes que representam objetos

    atmicos da hierarquia podero ser aplicveis tambm ao conjunto de objetos agrupados no objeto composto.

    Aplicao

    Utilizado sempre que necessrio representar elementos que so compostos por outros elementos similares.

    Por exemplo, em interfaces grficas um elemento grfico pode ser constitudo pela composio de vrios outros

    elementos grficos. Uma janela pode conter um ou mais cones, uma caixa de texto e vrios outros elementos

    grficos - at mesmo outra janela. Considerando que uma determinada hierarquia de classes indicasseElementoGrfico como a super-classe comum a todas classes que representassem os elementos grficos atmicos, a

    classeJanela seria representada como uma classe que contm zero (0) ou mais elementos grficos. Veja diagrama a

    seguir.

    Outro exemplo clssico o de gramticas utilizadas para definir linguagens de programao. Se utilizarmos uma

    hierarquia de classes para representar os comandos da linguagem, supondo que a super-classe seria Comando,

    teramos uma classe para o comando de atribuio, outro para, digamos, o comando While, outra para o comando

    composto - comando que constitudo por uma lista de outros comandos normalmente delimitados por indicadores

    como {e } ou