java_xml_ajax_padroes_Livro_wikipedia
-
Upload
roberto-araujo -
Category
Documents
-
view
218 -
download
0
Transcript of java_xml_ajax_padroes_Livro_wikipedia
-
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