SlideShare uma empresa Scribd logo
1 de 81
Baixar para ler offline
 
	
  
Especialização	
  em	
  Desenvolvimento	
  Java	
  	
  
UML	
  e	
  Padrões	
  de	
  Projetos	
  	
  
AULA	
  05	
  –	
  PADRÕES	
  DE	
  CRIAÇÃO	
  	
  
Prof.	
  Vinícius	
  de	
  Paula	
  -­‐	
  viniciusdepaula@unitri.edu.br	
  
Padrões	
  de	
  Criação	
  	
  
Factory	
  Method	
  
ObjeNvo	
  segundo	
  o	
  GoF:	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 3
Factory	
  Method	
  
ObjeNvo	
  segundo	
  o	
  GoF:	
  
•  Definir	
   uma	
   interface	
   para	
   criar	
   um	
   objeto	
   mas	
   deixar	
   que	
   subclasses	
  
decidam	
  que	
  classe	
  instanciar.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 4
Factory	
  Method	
  
ObjeNvo	
  segundo	
  o	
  GoF:	
  
•  Definir	
   uma	
   interface	
   para	
   criar	
   um	
   objeto	
   mas	
   deixar	
   que	
   subclasses	
  
decidam	
  que	
  classe	
  instanciar.	
  
•  Factory	
   Method	
   permite	
   que	
   uma	
   classe	
   delegue	
   a	
   responsabilidade	
   de	
  
instanciação	
  às	
  subclasses.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 5
Factory	
  Method	
  
ObjeNvo	
  segundo	
  o	
  GoF:	
  
•  Definir	
   uma	
   interface	
   para	
   criar	
   um	
   objeto	
   mas	
   deixar	
   que	
   subclasses	
  
decidam	
  que	
  classe	
  instanciar.	
  
•  Factory	
   Method	
   permite	
   que	
   uma	
   classe	
   delegue	
   a	
   responsabilidade	
   de	
  
instanciação	
  às	
  subclasses.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 6
Encapsular a escolha da classe concreta a ser utilizada na criação
de objetos de um determinado tipo.
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 7
Estrutura do Factory Method, segundo GoF (pág. 122)
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 8
Estrutura do Factory Method, segundo GoF (pág. 122)
Classe	
  ou	
  interface	
  
que	
  define	
  o	
  objeto	
  a	
  
ser	
  criado	
  	
  
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 9
Estrutura do Factory Method, segundo GoF (pág. 122)
Classe	
  ou	
  interface	
  
que	
  define	
  o	
  objeto	
  a	
  
ser	
  criado	
  	
  
Uma	
  implementação	
  
parNcular	
  do	
  Npo	
  de	
  
objeto	
  a	
  ser	
  criado	
  	
  
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 10
Estrutura do Factory Method, segundo GoF (pág. 122)
Uma	
  implementação	
  
parNcular	
  do	
  Npo	
  de	
  
objeto	
  a	
  ser	
  criado	
  	
  
Classe	
  ou	
  interface	
  
que	
  define	
  o	
  objeto	
  a	
  
ser	
  criado	
  	
  
Classe	
  ou	
  interface	
  que	
  
define	
  a	
  assinatura	
  do	
  
método	
  responsável	
  pela	
  
criação	
  do	
  produto	
  	
  
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 11
Estrutura do Factory Method, segundo GoF (pág. 122)
Uma	
  implementação	
  
parNcular	
  do	
  Npo	
  de	
  
objeto	
  a	
  ser	
  criado	
  	
  
Classe	
  ou	
  interface	
  
que	
  define	
  o	
  objeto	
  a	
  
ser	
  criado	
  	
  
Classe	
  ou	
  interface	
  que	
  
define	
  a	
  assinatura	
  do	
  
método	
  responsável	
  pela	
  
criação	
  do	
  produto	
  	
  
Classe	
  que	
  implementa	
  
ou	
  sobrescreve	
  o	
  
método	
  de	
  criação	
  do	
  
produto	
  	
  	
  
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Considere	
   um	
   sistema	
   bancário	
   que	
   precisa	
   enviar	
   mensagens	
   aos	
   seus	
  
clientes.	
   Por	
   exemplo,	
   após	
   a	
   realização	
   de	
   uma	
   compra	
   com	
   cartão	
   de	
  
crédito,	
   uma	
   mensagem	
   contendo	
   informações	
   sobre	
   a	
   compra	
   pode	
   ser	
  
enviada	
  ao	
  cliente.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 12
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Considere	
   um	
   sistema	
   bancário	
   que	
   precisa	
   enviar	
   mensagens	
   aos	
   seus	
  
clientes.	
   Por	
   exemplo,	
   após	
   a	
   realização	
   de	
   uma	
   compra	
   com	
   cartão	
   de	
  
crédito,	
   uma	
   mensagem	
   contendo	
   informações	
   sobre	
   a	
   compra	
   pode	
   ser	
  
enviada	
  ao	
  cliente.	
  
Se	
   esse	
   cliente	
   for	
   uma	
   pessoa	
   sica,	
   poderá́	
   optar	
   pelo	
   recebimento	
   da	
  
mensagem	
   através	
   de	
   e-­‐mail	
   ou	
   SMS.	
   Por	
   outro	
   lado,	
   se	
   for	
   uma	
   pessoa	
  
jurídica,	
  poderá́	
  também	
  receber	
  a	
  mensagem	
  através	
  de	
  JMS.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 13
Factory	
  Method	
  
Cenário	
  Prá9co	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 14
Factory	
  Method	
  
Cenário	
  Prá9co	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 15
Cada mecanismo de envio será implementado por uma classe.
Podemos criar uma interface para padronizar essas classes e obter
polimorfismo entre seus objetos.
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Neste	
   aspecto	
   quando	
   for	
   necessário	
   enviar	
   uma	
   mensagem,	
   podemos	
  
uNlizar	
  diretamente	
  	
  os	
  emissores.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 16
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Neste	
   aspecto	
   quando	
   for	
   necessário	
   enviar	
   uma	
   mensagem,	
   podemos	
  
uNlizar	
  diretamente	
  	
  os	
  emissores.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 17
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Neste	
   aspecto	
   quando	
   for	
   necessário	
   enviar	
   uma	
   mensagem,	
   podemos	
  
uNlizar	
  diretamente	
  	
  os	
  emissores.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 18
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Enviando	
  uma	
  
mensagem	
  por	
  SMS	
  
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Neste	
   aspecto	
   quando	
   for	
   necessário	
   enviar	
   uma	
   mensagem,	
   podemos	
  
uNlizar	
  diretamente	
  	
  os	
  emissores.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 19
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Enviando	
  uma	
  
mensagem	
  por	
  SMS	
  
Enviando	
  uma	
  
mensagem	
  por	
  Email	
  
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Neste	
   aspecto	
   quando	
   for	
   necessário	
   enviar	
   uma	
   mensagem,	
   podemos	
  
uNlizar	
  diretamente	
  	
  os	
  emissores.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 20
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Enviando	
  uma	
  
mensagem	
  por	
  SMS	
  
Enviando	
  uma	
  
mensagem	
  por	
  JMS	
  
Enviando	
  uma	
  
mensagem	
  por	
  Email	
  
Factory	
  Method	
  
Cenário	
  Prá9co	
  
Neste	
   aspecto	
   quando	
   for	
   necessário	
   enviar	
   uma	
   mensagem,	
   podemos	
  
uNlizar	
  diretamente	
  	
  os	
  emissores.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 21
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Crie uma classe para testar os emissores.
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 22
public class TestaEmissor1 {
public static void main(String[] args) {
Emissor emissor;
emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
}
}
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 23
public class TestaEmissor1 {
public static void main(String[] args) {
Emissor emissor;
emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
}
}
Utilizando esta abordagem, o código que deseja enviar uma
mensagem referencia diretamente as classes que implementam
os mecanismos de envio.
Factory	
  Method	
  
•  Para	
  eliminar	
  essa	
  referência	
  direta	
  podemos	
  adicionar	
  um	
  
intermediário	
   entre	
   o	
   código	
   que	
   deseja	
   enviar	
   uma	
  
mensagem	
  e	
  as	
  classes	
  que	
  implementam	
  os	
  emissores.	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 24
Factory	
  Method	
  
•  Para	
  eliminar	
  essa	
  referência	
  direta	
  podemos	
  adicionar	
  um	
  
intermediário	
   entre	
   o	
   código	
   que	
   deseja	
   enviar	
   uma	
  
mensagem	
  e	
  as	
  classes	
  que	
  implementam	
  os	
  emissores.	
  
•  Esse	
  intermediário	
  será	
  responsável	
  pela	
  escolha	
  da	
  classe	
  
concreta	
   a	
   ser	
   uNlizada	
   para	
   criar	
   o	
   Npo	
   de	
   emissor	
  
adequado.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 25
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 26
public class EmissorCreator {
public static final int SMS = 0;
public static final int EMAIL = 1;
public static final int JMS = 2;
public Emissor create(int tipoEmissor) {
if(tipoEmissor == EmissorCreator.SMS) {
return new EmissorSMS();
} else if (tipoEmissor == EmissorCreator.EMAIL){
return new EmissorEmail();
} else if (tipoEmissor == EmissorCreator.JMS){
return new EmissorJMS();
} else {
throw new IllegalArgumentException("Tipo de Emissor não suportado");
}
}
}
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 27
public class EmissorCreator {
public static final int SMS = 0;
public static final int EMAIL = 1;
public static final int JMS = 2;
public Emissor create(int tipoEmissor) {
if(tipoEmissor == EmissorCreator.SMS) {
return new EmissorSMS();
} else if (tipoEmissor == EmissorCreator.EMAIL){
return new EmissorEmail();
} else if (tipoEmissor == EmissorCreator.JMS){
return new EmissorJMS();
} else {
throw new IllegalArgumentException("Tipo de Emissor não suportado");
}
}
}
Definimos uma classe intermediária que será responsável pela
criação dos emissores, tornando a classe que utiliza os emissores
menos dependente dos mecanismos de envio.
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 28
public class EmissorCreator {
public static final int SMS = 0;
public static final int EMAIL = 1;
public static final int JMS = 2;
public Emissor create(int tipoEmissor) {
if(tipoEmissor == EmissorCreator.SMS) {
return new EmissorSMS();
} else if (tipoEmissor == EmissorCreator.EMAIL){
return new EmissorEmail();
} else if (tipoEmissor == EmissorCreator.JMS){
return new EmissorJMS();
} else {
throw new IllegalArgumentException("Tipo de Emissor não suportado");
}
}
}
Altere a classe de teste dos emissores
para utilizar a classe EmissorCreator.
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 29
public class TestaEmissor2 {
public static void main(String[] args) {
Emissor emissor1, emissor2, emissor3;
EmissorCreator creator = new EmissorCreator();
emissor1 = creator.create(EmissorCreator.SMS);
emissor1.envia("UML e Padrões de Projeto");
emissor2 = creator.create(EmissorCreator.EMAIL);
emissor2.envia("UML e Padrões de Projeto");
emissor3 = creator.create(EmissorCreator.JMS);
emissor3.envia("UML e Padrões de Projeto");
}
}
Factory	
  Method	
  
•  E	
  se	
  a	
  parNr	
  de	
  agora	
  o	
  sistema	
  Nvesse	
  que	
  trabalhar	
  com	
  dois	
  
Npos	
   diferentes	
   de	
   envio	
   de	
   mensagens:	
   síncrono	
   e	
  
assíncrono.	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 30
Factory	
  Method	
  
•  E	
  se	
  a	
  parNr	
  de	
  agora	
  o	
  sistema	
  Nvesse	
  que	
  trabalhar	
  com	
  dois	
  
Npos	
   diferentes	
   de	
   envio	
   de	
   mensagens:	
   síncrono	
   e	
  
assíncrono.	
  
•  Como	
  poderíamos	
  especializar	
  o	
  criador	
  de	
  emissores?	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 31
Factory	
  Method	
  
•  E	
  se	
  a	
  parNr	
  de	
  agora	
  o	
  sistema	
  Nvesse	
  que	
  trabalhar	
  com	
  dois	
  
Npos	
   diferentes	
   de	
   envio	
   de	
   mensagens:	
   síncrono	
   e	
  
assíncrono.	
  
•  Como	
  poderíamos	
  especializar	
  o	
  criador	
  de	
  emissores?	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 32
Factory	
  Method	
  
•  E	
  se	
  a	
  parNr	
  de	
  agora	
  o	
  sistema	
  Nvesse	
  que	
  trabalhar	
  com	
  dois	
  
Npos	
   diferentes	
   de	
   envio	
   de	
   mensagens:	
   síncrono	
   e	
  
assíncrono.	
  
•  Como	
  poderíamos	
  especializar	
  o	
  criador	
  de	
  emissores?	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 33
Definindo subclasses
Factory	
  Method	
  
•  Com	
   base	
   no	
   novo	
   cenário,	
   novos	
   produtos	
   precisam	
   ser	
  
implementados.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 34
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 35
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 36
Implemente as classes necessárias para
testar a especialização do criador de
emissores.
Estrutura	
  do	
  Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 37
Estrutura	
  do	
  Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 38
Emissor
Estrutura	
  do	
  Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 39
Emissor
EmissorAssincronoSMS
EmissorAssincronoJMS
EmissorAssincronoEmail
Estrutura	
  do	
  Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 40
Emissor
EmissorAssincronoSMS
EmissorAssincronoEmail
EmissorAssincronoJMS
EmissorSincronoSMS
EmissorSincronoEmail
EmissorSincronoJMS
Estrutura	
  do	
  Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 41
Emissor
EmissorAssincronoSMS
EmissorAssincronoEmail
EmissorAssincronoJMS
EmissorSincronoSMS
EmissorSincronoEmail
EmissorSincronoJMS
EmissorCreator
Estrutura	
  do	
  Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 42
Emissor
EmissorAssincronoSMS
EmissorAssincronoEmail
EmissorAssincronoJMS
EmissorSincronoSMS
EmissorSincronoEmail
EmissorSincronoJMS
EmissorCreator
EmissorAssincronoCreator
EmissorSincronoCreator
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 43
public class TestaEmissor3 {
public static void main(String[] args) {
Emissor emissor1, emissor2, emissor3;
EmissorCreator creator = new EmissorSincronoCreator();
emissor1 = creator.create(EmissorCreator.SMS);
emissor1.envia("UML e Padrões de Projeto");
emissor2 = creator.create(EmissorCreator.EMAIL);
emissor2.envia("UML e Padrões de Projeto");
emissor3 = creator.create(EmissorCreator.JMS);
emissor3.envia("UML e Padrões de Projeto");
}
}
Factory	
  Method	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 44
public class TestaEmissor3 {
public static void main(String[] args) {
Emissor emissor1, emissor2, emissor3;
EmissorCreator creator = new EmissorSincronoCreator();
emissor1 = creator.create(EmissorCreator.SMS);
emissor1.envia("UML e Padrões de Projeto");
emissor2 = creator.create(EmissorCreator.EMAIL);
emissor2.envia("UML e Padrões de Projeto");
emissor3 = creator.create(EmissorCreator.JMS);
emissor3.envia("UML e Padrões de Projeto");
}
}
Factory Method permite que uma classe delegue a
responsabilidade de instanciação às subclasses.
Onde	
  podemos	
  ver	
  o	
  uso	
  do	
  Factory	
  Method?	
  
•  javax.xml.parsers	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 45
Onde	
  podemos	
  ver	
  o	
  uso	
  do	
  Factory	
  Method?	
  
•  java.sql.DriverManager	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 46
Abstract	
  Factory	
  
Abstract	
  Factory	
  
ObjeNvo	
  segundo	
  o	
  GoF:	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 48
Abstract	
  Factory	
  
ObjeNvo	
  segundo	
  o	
  GoF:	
  
•  Prover	
   uma	
   interface	
   para	
   criar	
   famílias	
   de	
   objetos	
   relacionados	
   ou	
  
dependentes	
  sem	
  especificar	
  suas	
  classes	
  concretas.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 49
Abstract	
  Factory	
  
ObjeNvo	
  segundo	
  o	
  GoF:	
  
•  Prover	
   uma	
   interface	
   para	
   criar	
   famílias	
   de	
   objetos	
   relacionados	
   ou	
  
dependentes	
  sem	
  especificar	
  suas	
  classes	
  concretas.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 50
Encapsular a escolha das classes concretas a serem utilizadas na
criação de objetos de diversas famílias.
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 51
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 52
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface	
  que	
  define	
  as	
  
assinaturas	
  dos	
  métodos	
  
responsáveis	
  pela	
  criação	
  
dos	
  objetos	
  de	
  uma	
  família.	
  	
  
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 53
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface	
  que	
  define	
  as	
  
assinaturas	
  dos	
  métodos	
  
responsáveis	
  pela	
  criação	
  
dos	
  objetos	
  de	
  uma	
  família.	
  	
  
Classe	
  que	
  implementa	
  os	
  
métodos	
  de	
  criação	
  dos	
  
objetos	
  de	
  uma	
  família.	
  	
  	
  
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 54
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface	
  que	
  define	
  as	
  
assinaturas	
  dos	
  métodos	
  
responsáveis	
  pela	
  criação	
  
dos	
  objetos	
  de	
  uma	
  família.	
  	
  
Classe	
  que	
  implementa	
  os	
  
métodos	
  de	
  criação	
  dos	
  
objetos	
  de	
  uma	
  família.	
  	
  	
  
Interface	
  que	
  
define	
  um	
  Npo	
  de	
  
produto	
  	
  	
  
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 55
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface	
  que	
  define	
  as	
  
assinaturas	
  dos	
  métodos	
  
responsáveis	
  pela	
  criação	
  
dos	
  objetos	
  de	
  uma	
  família.	
  	
  
Classe	
  que	
  implementa	
  os	
  
métodos	
  de	
  criação	
  dos	
  
objetos	
  de	
  uma	
  família.	
  	
  	
  
Implementação	
  
parNcular	
  de	
  um	
  
Npo	
  de	
  produto	
  	
  	
  
Interface	
  que	
  
define	
  um	
  Npo	
  de	
  
produto	
  	
  	
  
Abstract	
  Factory	
  
Cenário	
  Prá9co	
  
Estabelecimentos	
   comerciais	
   normalmente	
   oferecem	
   aos	
   clientes	
   diversas	
  
opções	
  de	
  pagamento.	
  Por	
  exemplo,	
  clientes	
  podem	
  efetuar	
  pagamentos	
  com	
  
dinheiro,	
  cartões	
  de	
  crédito	
  ou	
  débito,	
  entre	
  outros.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 56
Abstract	
  Factory	
  
Cenário	
  Prá9co	
  
Estabelecimentos	
   comerciais	
   normalmente	
   oferecem	
   aos	
   clientes	
   diversas	
  
opções	
  de	
  pagamento.	
  Por	
  exemplo,	
  clientes	
  podem	
  efetuar	
  pagamentos	
  com	
  
dinheiro,	
  cartões	
  de	
  crédito	
  ou	
  débito,	
  entre	
  outros.	
  
Pagamentos	
  com	
  cartão	
  são	
  realizados	
  por	
  meio	
  de	
  uma	
  máquina	
  de	
  cartão,	
  
oferecida	
  e	
  instaladas	
  por	
  empresas	
  como	
  Cielo	
  e	
  Redecard.	
  Geralmente,	
  essa	
  
máquina	
  é	
  capaz	
  de	
  lidar	
  com	
  cartões	
  de	
  diferentes	
  bandeiras	
  (como	
  Visa	
  e	
  
Mastercard).	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 57
Abstract	
  Factory	
  
Cenário	
  Prá9co	
  
Nosso	
   objeNvo	
   é	
   programar	
   essas	
   máquinas,	
   isto	
   é,	
   desenvolver	
   uma	
  
aplicação	
   capaz	
   de	
   se	
   comunicar	
   com	
   as	
   diferentes	
   bandeiras	
   e	
   registrar	
  
pagamentos.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 58
Abstract	
  Factory	
  
Cenário	
  Prá9co	
  
Nosso	
   objeNvo	
   é	
   programar	
   essas	
   máquinas,	
   isto	
   é,	
   desenvolver	
   uma	
  
aplicação	
   capaz	
   de	
   se	
   comunicar	
   com	
   as	
   diferentes	
   bandeiras	
   e	
   registrar	
  
pagamentos.	
  
No	
  momento	
  do	
  pagamento,	
  a	
  máquina	
  de	
  cartão	
  deve	
  enviar	
  informações	
  
relaNvas	
  à	
  transação	
  (como	
  valor	
  e	
  senha)	
  para	
  a	
  bandeira	
  correspondente	
  ao	
  
cartão	
   uNlizado.	
   Além	
   disso,	
   a	
   máquina	
   deve	
   aguardar	
   uma	
   resposta	
   de	
  
confirmação	
  ou	
  recusa	
  do	
  pagamento.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 59
Abstract	
  Factory	
  
•  Nossa	
   aplicação	
   será	
   composta	
   por	
   objetos	
   emissores	
   e	
  
receptores	
  de	
  mensagens.	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 60
Abstract	
  Factory	
  
•  Nossa	
   aplicação	
   será	
   composta	
   por	
   objetos	
   emissores	
   e	
  
receptores	
  de	
  mensagens.	
  
•  Como	
   o	
   protocolo	
   de	
   comunicação	
   de	
   cada	
   bandeira	
   é	
  
diferente,	
   teremos	
   um	
   emissor	
   e	
   um	
   receptor	
   para	
   cada	
  
bandeira.	
  
	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 61
Abstract	
  Factory	
  
•  Nossa	
   aplicação	
   será	
   composta	
   por	
   objetos	
   emissores	
   e	
  
receptores	
  de	
  mensagens.	
  
•  Como	
   o	
   protocolo	
   de	
   comunicação	
   de	
   cada	
   bandeira	
   é	
  
diferente,	
   teremos	
   um	
   emissor	
   e	
   um	
   receptor	
   para	
   cada	
  
bandeira.	
  
•  Criaremos	
   fábricas	
   específicas	
   para	
   cada	
   bandeira	
   que	
  
serão	
   responsáveis	
   pela	
   criação	
   dos	
   emissores	
   e	
  
receptores.	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 62
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 63
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 64
Implemente as classes necessárias para
testar o cenário proposto.
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 65
1
2
3
4
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 66
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 67
Interface que todas as fábricas
concretas devem implementar, o
que consiste em um conjunto de
métodos para fabricar produtos.
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 68
Interface que todas as fábricas
concretas devem implementar, o
que consiste em um conjunto de
métodos para fabricar produtos.
As fábricas concretas implementam as diferentes
famílias de produtos. Para criar um produto o
cliente usa uma destas fábricas.
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 69
Interface que todas as fábricas
concretas devem implementar, o
que consiste em um conjunto de
métodos para fabricar produtos.
As fábricas concretas implementam as diferentes
famílias de produtos. Para criar um produto o
cliente usa uma destas fábricas.
Esta é a família de produtos, cada
fábrica concreta pode produzir um
conjunto inteiro de produtos.
Abstract	
  Factory	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 70
public class TestaComunicadorFactory {
public static void main(String[] args) {
ComunicadorFactory comunicadorFactory = new VisaComunicadorFactory();
Emissor emissor = comunicadorFactory.createEmissor();
String transacao = "Valor=100;Senha=1234";
emissor.envia(transacao);
Receptor receptor = comunicadorFactory.createReceptor();
String mensagem = receptor.recebe();
System.out.println(mensagem);
}
}
Abstract	
  Factory	
  +	
  Factory	
  Method	
  
E	
  se	
  quiséssemos	
  combinar	
  os	
  dois	
  padrões?	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 71
Abstract	
  Factory	
  +	
  Factory	
  Method	
  
E	
  se	
  quiséssemos	
  combinar	
  os	
  dois	
  padrões?	
  
•  As	
   implementações	
   de	
   Abstract	
   Factory	
   podem	
  
acionar	
   os	
   Factory	
   Methods	
   para	
   criar	
   emissores	
   e	
  
receptores.	
  
	
  UML e Padrões de Projeto Centro Universitário do Triângulo 72
Abstract	
  Factory	
  +	
  Factory	
  Method	
  
E	
  se	
  quiséssemos	
  combinar	
  os	
  dois	
  padrões?	
  
•  As	
   implementações	
   de	
   Abstract	
   Factory	
   podem	
  
acionar	
   os	
   Factory	
   Methods	
   para	
   criar	
   emissores	
   e	
  
receptores.	
  
	
  UML e Padrões de Projeto Centro Universitário do Triângulo 73
public class VisaComunicadorFactory implements ComunicadorFactory {
private EmissorCreator emissorCreator = new EmissorCreator();
private ReceptorCreator receptorCreator = new ReceptorCreator();
public Emissor createEmissor() {
return emissorCreator.create(EmissorCreator.VISA);
}
public Receptor createReceptor() {
return receptorCreator.create(ReceptorCreator.VISA);
}
}
Abstract	
  Factory	
  +	
  Factory	
  Method	
  
E	
  se	
  quiséssemos	
  combinar	
  os	
  dois	
  padrões?	
  
•  As	
   implementações	
   de	
   Abstract	
   Factory	
   podem	
  
acionar	
   os	
   Factory	
   Methods	
   para	
   criar	
   emissores	
   e	
  
receptores.	
  
	
  UML e Padrões de Projeto Centro Universitário do Triângulo 74
public class VisaComunicadorFactory implements ComunicadorFactory {
private EmissorCreator emissorCreator = new EmissorCreator();
private ReceptorCreator receptorCreator = new ReceptorCreator();
public Emissor createEmissor() {
return emissorCreator.create(EmissorCreator.VISA);
}
public Receptor createReceptor() {
return receptorCreator.create(ReceptorCreator.VISA);
}
}
Altere a implementação de forma que os
emissores e receptores sejam criados por
Factory Methods
Padrão	
  DAO	
  
•  O	
   padrão	
   DAO	
   (Data	
   Access	
   Object)	
   tem	
   como	
   objeNvo	
   construir	
   uma	
  
camada	
   de	
   acesso	
   aos	
   dados	
   de	
   forma	
   a	
   isolar	
   a	
   camada	
   do	
   modelo	
   da	
  
camada	
  de	
  persistência.	
  	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 75
DB
LDAP
M1
M2
Persistência	
  Classes	
  do	
  Modelo	
  
DAO	
  
Padrão	
  DAO	
  
Alguns	
  beneMcios	
  de	
  se	
  u9lizar	
  o	
  padrão	
  DAO:	
  
•  O	
   mecanismo	
   de	
   persistência	
   pode	
   ser	
   alterado	
   a	
   qualquer	
   momento	
  
sem	
  ter	
  que	
  modificar	
  a	
  camada	
  de	
  modelo.	
  
•  Vários	
   mecanismos	
   de	
   persistência	
   podem	
   ser	
   uNlizados	
   de	
   forma	
  
transparente	
  para	
  o	
  cliente.	
  
•  Com	
  o	
  padrão	
  DAO,	
  podemos	
  abstrair	
  e	
  encapsular	
  o	
  acesso	
  às	
  fontes	
  de	
  
dados.	
  
- Gerencia	
  a	
  conexão	
  com	
  a	
  fonte	
  e	
  sabe	
  como	
  obter	
  os	
  dados.	
  	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 76
Trabalho	
  
Construa	
   uma	
   aplicação	
   contendo	
   operações	
   CRUD	
   para	
  
um	
  determinado	
  cenário	
  de	
  negócio.	
  
	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 77
Trabalho	
  
Construa	
   uma	
   aplicação	
   contendo	
   operações	
   CRUD	
   para	
  
um	
  determinado	
  cenário	
  de	
  negócio.	
  
ü Deverá	
   ser	
   implementado	
   um	
   DAO	
   Factory	
   para	
  
instanciar	
   as	
   formas	
   de	
   persistência	
   suportadas	
   pela	
  
aplicação,	
  no	
  contexto	
  do	
  trabalho,	
  pelo	
  menos	
  duas.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 78
Trabalho	
  
Construa	
   uma	
   aplicação	
   contendo	
   operações	
   CRUD	
   para	
  
um	
  determinado	
  cenário	
  de	
  negócio.	
  
ü Deverá	
   ser	
   implementado	
   um	
   DAO	
   Factory	
   para	
  
instanciar	
   as	
   formas	
   de	
   persistência	
   suportadas	
   pela	
  
aplicação,	
  no	
  contexto	
  do	
  trabalho,	
  pelo	
  menos	
  duas.	
  
ü Uma	
  interface	
  gráfica	
  amigável	
  deverá	
  ser	
  construída.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 79
Trabalho	
  
Construa	
   uma	
   aplicação	
   contendo	
   operações	
   CRUD	
   para	
  
um	
  determinado	
  cenário	
  de	
  negócio.	
  
ü Deverá	
   ser	
   implementado	
   um	
   DAO	
   Factory	
   para	
  
instanciar	
   as	
   formas	
   de	
   persistência	
   suportadas	
   pela	
  
aplicação,	
  no	
  contexto	
  do	
  trabalho,	
  pelo	
  menos	
  duas.	
  
ü Uma	
  interface	
  gráfica	
  amigável	
  deverá	
  ser	
  construída.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 80
Artigo para auxiliar na definição da arquitetura da aplicação.
http://www.informit.com/guides/content.aspx?g=java&seqNum=442
Bibliografia	
  
•  Gamma,	
   Erich;	
   Richard	
   Helm,	
   Ralph	
   Johnson,	
   John	
   M.	
   Vlissides	
   .	
   Design	
  
pagerns:	
  elements	
  of	
  reusable	
  object-­‐oriented	
  sohware.	
  Reading:	
  Addison-­‐
Wesley,	
  1995.	
  
•  Erich	
   Freeman,	
   Elizabeth	
   Freeman.	
   HeadFirst	
   –	
   Design	
   Pagerns.	
   O	
   ́REILLY	
  
2004.	
  
•  METSKER,	
  J.	
  Design	
  Pagerns	
  Java	
  Workbook.	
  EUA:	
  Addison-­‐Wesley	
  2002.	
  
•  K19	
  Treinamentos,	
  “Design	
  Pagerns	
  em	
  Java”.	
  
UML e Padrões de Projeto Centro Universitário do Triângulo 81

Mais conteúdo relacionado

Mais procurados

Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers DockerMatheus Fidelis
 
Mini curso de banco de dados - parte 1
Mini curso de banco de dados - parte 1Mini curso de banco de dados - parte 1
Mini curso de banco de dados - parte 1Rafael Sanches
 
Aula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de ProjetoAula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de ProjetoVinícius de Paula
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de SoftwareRalph Rassweiler
 
Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados ConceitosCleber Ramos
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidorMarcia Abrahim
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercíciosGuilherme
 
Qualidade de Software: Modelos e normas
Qualidade de Software: Modelos e normasQualidade de Software: Modelos e normas
Qualidade de Software: Modelos e normasAlex Camargo
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareDaniel Cukier
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Leinylson Fontinele
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de SoftwareLeinylson Fontinele
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
Aula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosAula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosRafael Albani
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completothomasdacosta
 

Mais procurados (20)

Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Mini curso de banco de dados - parte 1
Mini curso de banco de dados - parte 1Mini curso de banco de dados - parte 1
Mini curso de banco de dados - parte 1
 
Aula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de ProjetoAula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de Projeto
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Aula 3 - Introdução a cloud computing
Aula 3 - Introdução a cloud computingAula 3 - Introdução a cloud computing
Aula 3 - Introdução a cloud computing
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de Software
 
Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados Conceitos
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
 
Qualidade de Software: Modelos e normas
Qualidade de Software: Modelos e normasQualidade de Software: Modelos e normas
Qualidade de Software: Modelos e normas
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de Software
 
Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Aula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosAula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de Dados
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completo
 

Destaque

Padrões de Projeto WEB e o MVC
Padrões de Projeto WEB e o MVCPadrões de Projeto WEB e o MVC
Padrões de Projeto WEB e o MVCAlmir Neto
 
UML - Historia e Diagrmas
UML - Historia e DiagrmasUML - Historia e Diagrmas
UML - Historia e DiagrmasBruno Bazoti
 
Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...
Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...
Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...Anderson Kanegae Soares Rocha
 
Projeto de sistemas com UML - Parte 1
Projeto de sistemas com UML - Parte 1Projeto de sistemas com UML - Parte 1
Projeto de sistemas com UML - Parte 1Natanael Simões
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoVinícius de Paula
 
Análise Orientada a Objetos com UML
Análise Orientada a Objetos com UMLAnálise Orientada a Objetos com UML
Análise Orientada a Objetos com UMLEliseu Castelo
 
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. CarvalhoAula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. CarvalhoRudson Kiyoshi Souza Carvalho
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLRildo (@rildosan) Santos
 

Destaque (13)

Padrões de Projeto WEB e o MVC
Padrões de Projeto WEB e o MVCPadrões de Projeto WEB e o MVC
Padrões de Projeto WEB e o MVC
 
UML - Historia e Diagrmas
UML - Historia e DiagrmasUML - Historia e Diagrmas
UML - Historia e Diagrmas
 
Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...
Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...
Arquitetura de Software Baseada em Componentes: Um Estudo de Caso para o Cont...
 
Projeto de sistemas com UML - Parte 1
Projeto de sistemas com UML - Parte 1Projeto de sistemas com UML - Parte 1
Projeto de sistemas com UML - Parte 1
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
Análise Orientada a Objetos com UML
Análise Orientada a Objetos com UMLAnálise Orientada a Objetos com UML
Análise Orientada a Objetos com UML
 
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. CarvalhoAula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Principais diagramas da UML
Principais diagramas da UMLPrincipais diagramas da UML
Principais diagramas da UML
 
Introdução ao TelEduc
Introdução ao TelEducIntrodução ao TelEduc
Introdução ao TelEduc
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UML
 

Semelhante a Aula 05 - UML e Padrões de Projeto

Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoVinícius de Paula
 
Um framework para validação automática de modelos aplicado ao subsistema de e...
Um framework para validação automática de modelos aplicado ao subsistema de e...Um framework para validação automática de modelos aplicado ao subsistema de e...
Um framework para validação automática de modelos aplicado ao subsistema de e...Italo Pinto Rodrigues
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Walney Negreiros
 
Produtor Consumidor com Semaforo
Produtor Consumidor com SemaforoProdutor Consumidor com Semaforo
Produtor Consumidor com Semaforogicaazevedo
 
TEES - MDA Apresentação Final
TEES - MDA Apresentação FinalTEES - MDA Apresentação Final
TEES - MDA Apresentação Finalguestc7f5eb
 
Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)marcondes da luz barros
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 
Live Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android StudioLive Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android StudioVinícius Thiengo
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Julian Cesar
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#biandamakengo08
 
ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16
ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16
ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16Jorge Santos
 
Introdução à Engenharia de Software e UML
Introdução à Engenharia de Software e UMLIntrodução à Engenharia de Software e UML
Introdução à Engenharia de Software e UMLNatanael Simões
 

Semelhante a Aula 05 - UML e Padrões de Projeto (20)

Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de Projeto
 
Apostila Software Arena
Apostila Software ArenaApostila Software Arena
Apostila Software Arena
 
Um framework para validação automática de modelos aplicado ao subsistema de e...
Um framework para validação automática de modelos aplicado ao subsistema de e...Um framework para validação automática de modelos aplicado ao subsistema de e...
Um framework para validação automática de modelos aplicado ao subsistema de e...
 
Aula1
Aula1Aula1
Aula1
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
 
Produtor Consumidor com Semaforo
Produtor Consumidor com SemaforoProdutor Consumidor com Semaforo
Produtor Consumidor com Semaforo
 
Mock Objects
Mock ObjectsMock Objects
Mock Objects
 
Basico dovba excel_tutorial1
Basico dovba excel_tutorial1Basico dovba excel_tutorial1
Basico dovba excel_tutorial1
 
TEES - MDA Apresentação Final
TEES - MDA Apresentação FinalTEES - MDA Apresentação Final
TEES - MDA Apresentação Final
 
Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 
Live Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android StudioLive Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android Studio
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16
ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16
ArcGIS 10.3: Iniciante no ModelBuilder - Conversão de Float32 para UInt16
 
Introdução à Engenharia de Software e UML
Introdução à Engenharia de Software e UMLIntrodução à Engenharia de Software e UML
Introdução à Engenharia de Software e UML
 
Java5
Java5Java5
Java5
 
Revista programar 20
Revista programar 20Revista programar 20
Revista programar 20
 

Último

Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaJúlio Sandes
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasCasa Ciências
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.keislayyovera123
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumPatrícia de Sá Freire, PhD. Eng.
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSilvana Silva
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 

Último (20)

Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de Partículas
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comum
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptx
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 

Aula 05 - UML e Padrões de Projeto

  • 1.     Especialização  em  Desenvolvimento  Java     UML  e  Padrões  de  Projetos     AULA  05  –  PADRÕES  DE  CRIAÇÃO     Prof.  Vinícius  de  Paula  -­‐  viniciusdepaula@unitri.edu.br  
  • 3. Factory  Method   ObjeNvo  segundo  o  GoF:   UML e Padrões de Projeto Centro Universitário do Triângulo 3
  • 4. Factory  Method   ObjeNvo  segundo  o  GoF:   •  Definir   uma   interface   para   criar   um   objeto   mas   deixar   que   subclasses   decidam  que  classe  instanciar.   UML e Padrões de Projeto Centro Universitário do Triângulo 4
  • 5. Factory  Method   ObjeNvo  segundo  o  GoF:   •  Definir   uma   interface   para   criar   um   objeto   mas   deixar   que   subclasses   decidam  que  classe  instanciar.   •  Factory   Method   permite   que   uma   classe   delegue   a   responsabilidade   de   instanciação  às  subclasses.   UML e Padrões de Projeto Centro Universitário do Triângulo 5
  • 6. Factory  Method   ObjeNvo  segundo  o  GoF:   •  Definir   uma   interface   para   criar   um   objeto   mas   deixar   que   subclasses   decidam  que  classe  instanciar.   •  Factory   Method   permite   que   uma   classe   delegue   a   responsabilidade   de   instanciação  às  subclasses.   UML e Padrões de Projeto Centro Universitário do Triângulo 6 Encapsular a escolha da classe concreta a ser utilizada na criação de objetos de um determinado tipo.
  • 7. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 7 Estrutura do Factory Method, segundo GoF (pág. 122)
  • 8. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 8 Estrutura do Factory Method, segundo GoF (pág. 122) Classe  ou  interface   que  define  o  objeto  a   ser  criado    
  • 9. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 9 Estrutura do Factory Method, segundo GoF (pág. 122) Classe  ou  interface   que  define  o  objeto  a   ser  criado     Uma  implementação   parNcular  do  Npo  de   objeto  a  ser  criado    
  • 10. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 10 Estrutura do Factory Method, segundo GoF (pág. 122) Uma  implementação   parNcular  do  Npo  de   objeto  a  ser  criado     Classe  ou  interface   que  define  o  objeto  a   ser  criado     Classe  ou  interface  que   define  a  assinatura  do   método  responsável  pela   criação  do  produto    
  • 11. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 11 Estrutura do Factory Method, segundo GoF (pág. 122) Uma  implementação   parNcular  do  Npo  de   objeto  a  ser  criado     Classe  ou  interface   que  define  o  objeto  a   ser  criado     Classe  ou  interface  que   define  a  assinatura  do   método  responsável  pela   criação  do  produto     Classe  que  implementa   ou  sobrescreve  o   método  de  criação  do   produto      
  • 12. Factory  Method   Cenário  Prá9co   Considere   um   sistema   bancário   que   precisa   enviar   mensagens   aos   seus   clientes.   Por   exemplo,   após   a   realização   de   uma   compra   com   cartão   de   crédito,   uma   mensagem   contendo   informações   sobre   a   compra   pode   ser   enviada  ao  cliente.   UML e Padrões de Projeto Centro Universitário do Triângulo 12
  • 13. Factory  Method   Cenário  Prá9co   Considere   um   sistema   bancário   que   precisa   enviar   mensagens   aos   seus   clientes.   Por   exemplo,   após   a   realização   de   uma   compra   com   cartão   de   crédito,   uma   mensagem   contendo   informações   sobre   a   compra   pode   ser   enviada  ao  cliente.   Se   esse   cliente   for   uma   pessoa   sica,   poderá́   optar   pelo   recebimento   da   mensagem   através   de   e-­‐mail   ou   SMS.   Por   outro   lado,   se   for   uma   pessoa   jurídica,  poderá́  também  receber  a  mensagem  através  de  JMS.   UML e Padrões de Projeto Centro Universitário do Triângulo 13
  • 14. Factory  Method   Cenário  Prá9co   UML e Padrões de Projeto Centro Universitário do Triângulo 14
  • 15. Factory  Method   Cenário  Prá9co   UML e Padrões de Projeto Centro Universitário do Triângulo 15 Cada mecanismo de envio será implementado por uma classe. Podemos criar uma interface para padronizar essas classes e obter polimorfismo entre seus objetos.
  • 16. Factory  Method   Cenário  Prá9co   Neste   aspecto   quando   for   necessário   enviar   uma   mensagem,   podemos   uNlizar  diretamente    os  emissores.   UML e Padrões de Projeto Centro Universitário do Triângulo 16
  • 17. Factory  Method   Cenário  Prá9co   Neste   aspecto   quando   for   necessário   enviar   uma   mensagem,   podemos   uNlizar  diretamente    os  emissores.   UML e Padrões de Projeto Centro Universitário do Triângulo 17 Emissor emissor = new EmissorSMS(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorEmail(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorJMS(); emissor.envia("UML e Padrões de Projeto");
  • 18. Factory  Method   Cenário  Prá9co   Neste   aspecto   quando   for   necessário   enviar   uma   mensagem,   podemos   uNlizar  diretamente    os  emissores.   UML e Padrões de Projeto Centro Universitário do Triângulo 18 Emissor emissor = new EmissorSMS(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorEmail(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorJMS(); emissor.envia("UML e Padrões de Projeto"); Enviando  uma   mensagem  por  SMS  
  • 19. Factory  Method   Cenário  Prá9co   Neste   aspecto   quando   for   necessário   enviar   uma   mensagem,   podemos   uNlizar  diretamente    os  emissores.   UML e Padrões de Projeto Centro Universitário do Triângulo 19 Emissor emissor = new EmissorSMS(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorEmail(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorJMS(); emissor.envia("UML e Padrões de Projeto"); Enviando  uma   mensagem  por  SMS   Enviando  uma   mensagem  por  Email  
  • 20. Factory  Method   Cenário  Prá9co   Neste   aspecto   quando   for   necessário   enviar   uma   mensagem,   podemos   uNlizar  diretamente    os  emissores.   UML e Padrões de Projeto Centro Universitário do Triângulo 20 Emissor emissor = new EmissorSMS(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorEmail(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorJMS(); emissor.envia("UML e Padrões de Projeto"); Enviando  uma   mensagem  por  SMS   Enviando  uma   mensagem  por  JMS   Enviando  uma   mensagem  por  Email  
  • 21. Factory  Method   Cenário  Prá9co   Neste   aspecto   quando   for   necessário   enviar   uma   mensagem,   podemos   uNlizar  diretamente    os  emissores.   UML e Padrões de Projeto Centro Universitário do Triângulo 21 Emissor emissor = new EmissorSMS(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorEmail(); emissor.envia("UML e Padrões de Projeto"); Emissor emissor = new EmissorJMS(); emissor.envia("UML e Padrões de Projeto"); Crie uma classe para testar os emissores.
  • 22. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 22 public class TestaEmissor1 { public static void main(String[] args) { Emissor emissor; emissor = new EmissorSMS(); emissor.envia("UML e Padrões de Projeto"); emissor = new EmissorEmail(); emissor.envia("UML e Padrões de Projeto"); emissor = new EmissorJMS(); emissor.envia("UML e Padrões de Projeto"); } }
  • 23. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 23 public class TestaEmissor1 { public static void main(String[] args) { Emissor emissor; emissor = new EmissorSMS(); emissor.envia("UML e Padrões de Projeto"); emissor = new EmissorEmail(); emissor.envia("UML e Padrões de Projeto"); emissor = new EmissorJMS(); emissor.envia("UML e Padrões de Projeto"); } } Utilizando esta abordagem, o código que deseja enviar uma mensagem referencia diretamente as classes que implementam os mecanismos de envio.
  • 24. Factory  Method   •  Para  eliminar  essa  referência  direta  podemos  adicionar  um   intermediário   entre   o   código   que   deseja   enviar   uma   mensagem  e  as  classes  que  implementam  os  emissores.     UML e Padrões de Projeto Centro Universitário do Triângulo 24
  • 25. Factory  Method   •  Para  eliminar  essa  referência  direta  podemos  adicionar  um   intermediário   entre   o   código   que   deseja   enviar   uma   mensagem  e  as  classes  que  implementam  os  emissores.   •  Esse  intermediário  será  responsável  pela  escolha  da  classe   concreta   a   ser   uNlizada   para   criar   o   Npo   de   emissor   adequado.   UML e Padrões de Projeto Centro Universitário do Triângulo 25
  • 26. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 26 public class EmissorCreator { public static final int SMS = 0; public static final int EMAIL = 1; public static final int JMS = 2; public Emissor create(int tipoEmissor) { if(tipoEmissor == EmissorCreator.SMS) { return new EmissorSMS(); } else if (tipoEmissor == EmissorCreator.EMAIL){ return new EmissorEmail(); } else if (tipoEmissor == EmissorCreator.JMS){ return new EmissorJMS(); } else { throw new IllegalArgumentException("Tipo de Emissor não suportado"); } } }
  • 27. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 27 public class EmissorCreator { public static final int SMS = 0; public static final int EMAIL = 1; public static final int JMS = 2; public Emissor create(int tipoEmissor) { if(tipoEmissor == EmissorCreator.SMS) { return new EmissorSMS(); } else if (tipoEmissor == EmissorCreator.EMAIL){ return new EmissorEmail(); } else if (tipoEmissor == EmissorCreator.JMS){ return new EmissorJMS(); } else { throw new IllegalArgumentException("Tipo de Emissor não suportado"); } } } Definimos uma classe intermediária que será responsável pela criação dos emissores, tornando a classe que utiliza os emissores menos dependente dos mecanismos de envio.
  • 28. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 28 public class EmissorCreator { public static final int SMS = 0; public static final int EMAIL = 1; public static final int JMS = 2; public Emissor create(int tipoEmissor) { if(tipoEmissor == EmissorCreator.SMS) { return new EmissorSMS(); } else if (tipoEmissor == EmissorCreator.EMAIL){ return new EmissorEmail(); } else if (tipoEmissor == EmissorCreator.JMS){ return new EmissorJMS(); } else { throw new IllegalArgumentException("Tipo de Emissor não suportado"); } } } Altere a classe de teste dos emissores para utilizar a classe EmissorCreator.
  • 29. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 29 public class TestaEmissor2 { public static void main(String[] args) { Emissor emissor1, emissor2, emissor3; EmissorCreator creator = new EmissorCreator(); emissor1 = creator.create(EmissorCreator.SMS); emissor1.envia("UML e Padrões de Projeto"); emissor2 = creator.create(EmissorCreator.EMAIL); emissor2.envia("UML e Padrões de Projeto"); emissor3 = creator.create(EmissorCreator.JMS); emissor3.envia("UML e Padrões de Projeto"); } }
  • 30. Factory  Method   •  E  se  a  parNr  de  agora  o  sistema  Nvesse  que  trabalhar  com  dois   Npos   diferentes   de   envio   de   mensagens:   síncrono   e   assíncrono.     UML e Padrões de Projeto Centro Universitário do Triângulo 30
  • 31. Factory  Method   •  E  se  a  parNr  de  agora  o  sistema  Nvesse  que  trabalhar  com  dois   Npos   diferentes   de   envio   de   mensagens:   síncrono   e   assíncrono.   •  Como  poderíamos  especializar  o  criador  de  emissores?     UML e Padrões de Projeto Centro Universitário do Triângulo 31
  • 32. Factory  Method   •  E  se  a  parNr  de  agora  o  sistema  Nvesse  que  trabalhar  com  dois   Npos   diferentes   de   envio   de   mensagens:   síncrono   e   assíncrono.   •  Como  poderíamos  especializar  o  criador  de  emissores?     UML e Padrões de Projeto Centro Universitário do Triângulo 32
  • 33. Factory  Method   •  E  se  a  parNr  de  agora  o  sistema  Nvesse  que  trabalhar  com  dois   Npos   diferentes   de   envio   de   mensagens:   síncrono   e   assíncrono.   •  Como  poderíamos  especializar  o  criador  de  emissores?     UML e Padrões de Projeto Centro Universitário do Triângulo 33 Definindo subclasses
  • 34. Factory  Method   •  Com   base   no   novo   cenário,   novos   produtos   precisam   ser   implementados.   UML e Padrões de Projeto Centro Universitário do Triângulo 34
  • 35. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 35
  • 36. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 36 Implemente as classes necessárias para testar a especialização do criador de emissores.
  • 37. Estrutura  do  Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 37
  • 38. Estrutura  do  Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 38 Emissor
  • 39. Estrutura  do  Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 39 Emissor EmissorAssincronoSMS EmissorAssincronoJMS EmissorAssincronoEmail
  • 40. Estrutura  do  Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 40 Emissor EmissorAssincronoSMS EmissorAssincronoEmail EmissorAssincronoJMS EmissorSincronoSMS EmissorSincronoEmail EmissorSincronoJMS
  • 41. Estrutura  do  Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 41 Emissor EmissorAssincronoSMS EmissorAssincronoEmail EmissorAssincronoJMS EmissorSincronoSMS EmissorSincronoEmail EmissorSincronoJMS EmissorCreator
  • 42. Estrutura  do  Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 42 Emissor EmissorAssincronoSMS EmissorAssincronoEmail EmissorAssincronoJMS EmissorSincronoSMS EmissorSincronoEmail EmissorSincronoJMS EmissorCreator EmissorAssincronoCreator EmissorSincronoCreator
  • 43. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 43 public class TestaEmissor3 { public static void main(String[] args) { Emissor emissor1, emissor2, emissor3; EmissorCreator creator = new EmissorSincronoCreator(); emissor1 = creator.create(EmissorCreator.SMS); emissor1.envia("UML e Padrões de Projeto"); emissor2 = creator.create(EmissorCreator.EMAIL); emissor2.envia("UML e Padrões de Projeto"); emissor3 = creator.create(EmissorCreator.JMS); emissor3.envia("UML e Padrões de Projeto"); } }
  • 44. Factory  Method   UML e Padrões de Projeto Centro Universitário do Triângulo 44 public class TestaEmissor3 { public static void main(String[] args) { Emissor emissor1, emissor2, emissor3; EmissorCreator creator = new EmissorSincronoCreator(); emissor1 = creator.create(EmissorCreator.SMS); emissor1.envia("UML e Padrões de Projeto"); emissor2 = creator.create(EmissorCreator.EMAIL); emissor2.envia("UML e Padrões de Projeto"); emissor3 = creator.create(EmissorCreator.JMS); emissor3.envia("UML e Padrões de Projeto"); } } Factory Method permite que uma classe delegue a responsabilidade de instanciação às subclasses.
  • 45. Onde  podemos  ver  o  uso  do  Factory  Method?   •  javax.xml.parsers   UML e Padrões de Projeto Centro Universitário do Triângulo 45
  • 46. Onde  podemos  ver  o  uso  do  Factory  Method?   •  java.sql.DriverManager   UML e Padrões de Projeto Centro Universitário do Triângulo 46
  • 48. Abstract  Factory   ObjeNvo  segundo  o  GoF:   UML e Padrões de Projeto Centro Universitário do Triângulo 48
  • 49. Abstract  Factory   ObjeNvo  segundo  o  GoF:   •  Prover   uma   interface   para   criar   famílias   de   objetos   relacionados   ou   dependentes  sem  especificar  suas  classes  concretas.   UML e Padrões de Projeto Centro Universitário do Triângulo 49
  • 50. Abstract  Factory   ObjeNvo  segundo  o  GoF:   •  Prover   uma   interface   para   criar   famílias   de   objetos   relacionados   ou   dependentes  sem  especificar  suas  classes  concretas.   UML e Padrões de Projeto Centro Universitário do Triângulo 50 Encapsular a escolha das classes concretas a serem utilizadas na criação de objetos de diversas famílias.
  • 51. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 51 Estrutura do Abstract Factory, segundo GoF (pág. 101)
  • 52. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 52 Estrutura do Abstract Factory, segundo GoF (pág. 101) Interface  que  define  as   assinaturas  dos  métodos   responsáveis  pela  criação   dos  objetos  de  uma  família.    
  • 53. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 53 Estrutura do Abstract Factory, segundo GoF (pág. 101) Interface  que  define  as   assinaturas  dos  métodos   responsáveis  pela  criação   dos  objetos  de  uma  família.     Classe  que  implementa  os   métodos  de  criação  dos   objetos  de  uma  família.      
  • 54. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 54 Estrutura do Abstract Factory, segundo GoF (pág. 101) Interface  que  define  as   assinaturas  dos  métodos   responsáveis  pela  criação   dos  objetos  de  uma  família.     Classe  que  implementa  os   métodos  de  criação  dos   objetos  de  uma  família.       Interface  que   define  um  Npo  de   produto      
  • 55. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 55 Estrutura do Abstract Factory, segundo GoF (pág. 101) Interface  que  define  as   assinaturas  dos  métodos   responsáveis  pela  criação   dos  objetos  de  uma  família.     Classe  que  implementa  os   métodos  de  criação  dos   objetos  de  uma  família.       Implementação   parNcular  de  um   Npo  de  produto       Interface  que   define  um  Npo  de   produto      
  • 56. Abstract  Factory   Cenário  Prá9co   Estabelecimentos   comerciais   normalmente   oferecem   aos   clientes   diversas   opções  de  pagamento.  Por  exemplo,  clientes  podem  efetuar  pagamentos  com   dinheiro,  cartões  de  crédito  ou  débito,  entre  outros.   UML e Padrões de Projeto Centro Universitário do Triângulo 56
  • 57. Abstract  Factory   Cenário  Prá9co   Estabelecimentos   comerciais   normalmente   oferecem   aos   clientes   diversas   opções  de  pagamento.  Por  exemplo,  clientes  podem  efetuar  pagamentos  com   dinheiro,  cartões  de  crédito  ou  débito,  entre  outros.   Pagamentos  com  cartão  são  realizados  por  meio  de  uma  máquina  de  cartão,   oferecida  e  instaladas  por  empresas  como  Cielo  e  Redecard.  Geralmente,  essa   máquina  é  capaz  de  lidar  com  cartões  de  diferentes  bandeiras  (como  Visa  e   Mastercard).   UML e Padrões de Projeto Centro Universitário do Triângulo 57
  • 58. Abstract  Factory   Cenário  Prá9co   Nosso   objeNvo   é   programar   essas   máquinas,   isto   é,   desenvolver   uma   aplicação   capaz   de   se   comunicar   com   as   diferentes   bandeiras   e   registrar   pagamentos.   UML e Padrões de Projeto Centro Universitário do Triângulo 58
  • 59. Abstract  Factory   Cenário  Prá9co   Nosso   objeNvo   é   programar   essas   máquinas,   isto   é,   desenvolver   uma   aplicação   capaz   de   se   comunicar   com   as   diferentes   bandeiras   e   registrar   pagamentos.   No  momento  do  pagamento,  a  máquina  de  cartão  deve  enviar  informações   relaNvas  à  transação  (como  valor  e  senha)  para  a  bandeira  correspondente  ao   cartão   uNlizado.   Além   disso,   a   máquina   deve   aguardar   uma   resposta   de   confirmação  ou  recusa  do  pagamento.   UML e Padrões de Projeto Centro Universitário do Triângulo 59
  • 60. Abstract  Factory   •  Nossa   aplicação   será   composta   por   objetos   emissores   e   receptores  de  mensagens.     UML e Padrões de Projeto Centro Universitário do Triângulo 60
  • 61. Abstract  Factory   •  Nossa   aplicação   será   composta   por   objetos   emissores   e   receptores  de  mensagens.   •  Como   o   protocolo   de   comunicação   de   cada   bandeira   é   diferente,   teremos   um   emissor   e   um   receptor   para   cada   bandeira.       UML e Padrões de Projeto Centro Universitário do Triângulo 61
  • 62. Abstract  Factory   •  Nossa   aplicação   será   composta   por   objetos   emissores   e   receptores  de  mensagens.   •  Como   o   protocolo   de   comunicação   de   cada   bandeira   é   diferente,   teremos   um   emissor   e   um   receptor   para   cada   bandeira.   •  Criaremos   fábricas   específicas   para   cada   bandeira   que   serão   responsáveis   pela   criação   dos   emissores   e   receptores.     UML e Padrões de Projeto Centro Universitário do Triângulo 62
  • 63. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 63
  • 64. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 64 Implemente as classes necessárias para testar o cenário proposto.
  • 65. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 65 1 2 3 4
  • 66. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 66
  • 67. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 67 Interface que todas as fábricas concretas devem implementar, o que consiste em um conjunto de métodos para fabricar produtos.
  • 68. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 68 Interface que todas as fábricas concretas devem implementar, o que consiste em um conjunto de métodos para fabricar produtos. As fábricas concretas implementam as diferentes famílias de produtos. Para criar um produto o cliente usa uma destas fábricas.
  • 69. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 69 Interface que todas as fábricas concretas devem implementar, o que consiste em um conjunto de métodos para fabricar produtos. As fábricas concretas implementam as diferentes famílias de produtos. Para criar um produto o cliente usa uma destas fábricas. Esta é a família de produtos, cada fábrica concreta pode produzir um conjunto inteiro de produtos.
  • 70. Abstract  Factory   UML e Padrões de Projeto Centro Universitário do Triângulo 70 public class TestaComunicadorFactory { public static void main(String[] args) { ComunicadorFactory comunicadorFactory = new VisaComunicadorFactory(); Emissor emissor = comunicadorFactory.createEmissor(); String transacao = "Valor=100;Senha=1234"; emissor.envia(transacao); Receptor receptor = comunicadorFactory.createReceptor(); String mensagem = receptor.recebe(); System.out.println(mensagem); } }
  • 71. Abstract  Factory  +  Factory  Method   E  se  quiséssemos  combinar  os  dois  padrões?     UML e Padrões de Projeto Centro Universitário do Triângulo 71
  • 72. Abstract  Factory  +  Factory  Method   E  se  quiséssemos  combinar  os  dois  padrões?   •  As   implementações   de   Abstract   Factory   podem   acionar   os   Factory   Methods   para   criar   emissores   e   receptores.    UML e Padrões de Projeto Centro Universitário do Triângulo 72
  • 73. Abstract  Factory  +  Factory  Method   E  se  quiséssemos  combinar  os  dois  padrões?   •  As   implementações   de   Abstract   Factory   podem   acionar   os   Factory   Methods   para   criar   emissores   e   receptores.    UML e Padrões de Projeto Centro Universitário do Triângulo 73 public class VisaComunicadorFactory implements ComunicadorFactory { private EmissorCreator emissorCreator = new EmissorCreator(); private ReceptorCreator receptorCreator = new ReceptorCreator(); public Emissor createEmissor() { return emissorCreator.create(EmissorCreator.VISA); } public Receptor createReceptor() { return receptorCreator.create(ReceptorCreator.VISA); } }
  • 74. Abstract  Factory  +  Factory  Method   E  se  quiséssemos  combinar  os  dois  padrões?   •  As   implementações   de   Abstract   Factory   podem   acionar   os   Factory   Methods   para   criar   emissores   e   receptores.    UML e Padrões de Projeto Centro Universitário do Triângulo 74 public class VisaComunicadorFactory implements ComunicadorFactory { private EmissorCreator emissorCreator = new EmissorCreator(); private ReceptorCreator receptorCreator = new ReceptorCreator(); public Emissor createEmissor() { return emissorCreator.create(EmissorCreator.VISA); } public Receptor createReceptor() { return receptorCreator.create(ReceptorCreator.VISA); } } Altere a implementação de forma que os emissores e receptores sejam criados por Factory Methods
  • 75. Padrão  DAO   •  O   padrão   DAO   (Data   Access   Object)   tem   como   objeNvo   construir   uma   camada   de   acesso   aos   dados   de   forma   a   isolar   a   camada   do   modelo   da   camada  de  persistência.     UML e Padrões de Projeto Centro Universitário do Triângulo 75 DB LDAP M1 M2 Persistência  Classes  do  Modelo   DAO  
  • 76. Padrão  DAO   Alguns  beneMcios  de  se  u9lizar  o  padrão  DAO:   •  O   mecanismo   de   persistência   pode   ser   alterado   a   qualquer   momento   sem  ter  que  modificar  a  camada  de  modelo.   •  Vários   mecanismos   de   persistência   podem   ser   uNlizados   de   forma   transparente  para  o  cliente.   •  Com  o  padrão  DAO,  podemos  abstrair  e  encapsular  o  acesso  às  fontes  de   dados.   - Gerencia  a  conexão  com  a  fonte  e  sabe  como  obter  os  dados.     UML e Padrões de Projeto Centro Universitário do Triângulo 76
  • 77. Trabalho   Construa   uma   aplicação   contendo   operações   CRUD   para   um  determinado  cenário  de  negócio.     UML e Padrões de Projeto Centro Universitário do Triângulo 77
  • 78. Trabalho   Construa   uma   aplicação   contendo   operações   CRUD   para   um  determinado  cenário  de  negócio.   ü Deverá   ser   implementado   um   DAO   Factory   para   instanciar   as   formas   de   persistência   suportadas   pela   aplicação,  no  contexto  do  trabalho,  pelo  menos  duas.   UML e Padrões de Projeto Centro Universitário do Triângulo 78
  • 79. Trabalho   Construa   uma   aplicação   contendo   operações   CRUD   para   um  determinado  cenário  de  negócio.   ü Deverá   ser   implementado   um   DAO   Factory   para   instanciar   as   formas   de   persistência   suportadas   pela   aplicação,  no  contexto  do  trabalho,  pelo  menos  duas.   ü Uma  interface  gráfica  amigável  deverá  ser  construída.   UML e Padrões de Projeto Centro Universitário do Triângulo 79
  • 80. Trabalho   Construa   uma   aplicação   contendo   operações   CRUD   para   um  determinado  cenário  de  negócio.   ü Deverá   ser   implementado   um   DAO   Factory   para   instanciar   as   formas   de   persistência   suportadas   pela   aplicação,  no  contexto  do  trabalho,  pelo  menos  duas.   ü Uma  interface  gráfica  amigável  deverá  ser  construída.   UML e Padrões de Projeto Centro Universitário do Triângulo 80 Artigo para auxiliar na definição da arquitetura da aplicação. http://www.informit.com/guides/content.aspx?g=java&seqNum=442
  • 81. Bibliografia   •  Gamma,   Erich;   Richard   Helm,   Ralph   Johnson,   John   M.   Vlissides   .   Design   pagerns:  elements  of  reusable  object-­‐oriented  sohware.  Reading:  Addison-­‐ Wesley,  1995.   •  Erich   Freeman,   Elizabeth   Freeman.   HeadFirst   –   Design   Pagerns.   O   ́REILLY   2004.   •  METSKER,  J.  Design  Pagerns  Java  Workbook.  EUA:  Addison-­‐Wesley  2002.   •  K19  Treinamentos,  “Design  Pagerns  em  Java”.   UML e Padrões de Projeto Centro Universitário do Triângulo 81