aula 05 - uml e padrões de projeto

81
Especialização em Desenvolvimento Java UML e Padrões de Projetos AULA 05 – PADRÕES DE CRIAÇÃO Prof. Vinícius de Paula [email protected]

Upload: vinicius-de-paula

Post on 10-Jan-2017

427 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Aula 05 - UML e Padrões de Projeto

   Especialização  em  Desenvolvimento  Java    UML  e  Padrões  de  Projetos    

AULA  05  –  PADRÕES  DE  CRIAÇÃO    

Prof.  Vinícius  de  Paula  -­‐  [email protected]  

Page 2: Aula 05 - UML e Padrões de Projeto

Padrões  de  Criação    

Page 3: Aula 05 - UML e Padrões de Projeto

Factory  Method  ObjeNvo  segundo  o  GoF:  

UML e Padrões de Projeto Centro Universitário do Triângulo 3

Page 4: Aula 05 - UML e Padrões de Projeto

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

Page 5: Aula 05 - UML e Padrões de Projeto

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

Page 6: Aula 05 - UML e Padrões de Projeto

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.

Page 7: Aula 05 - UML e Padrões de Projeto

Factory  Method  

UML e Padrões de Projeto Centro Universitário do Triângulo 7

Estrutura do Factory Method, segundo GoF (pág. 122)

Page 8: Aula 05 - UML e Padrões de Projeto

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    

Page 9: Aula 05 - UML e Padrões de Projeto

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    

Page 10: Aula 05 - UML e Padrões de Projeto

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    

Page 11: Aula 05 - UML e Padrões de Projeto

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      

Page 12: Aula 05 - UML e Padrões de Projeto

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

Page 13: Aula 05 - UML e Padrões de Projeto

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

Page 14: Aula 05 - UML e Padrões de Projeto

Factory  Method  Cenário  Prá9co  

UML e Padrões de Projeto Centro Universitário do Triângulo 14

Page 15: Aula 05 - UML e Padrões de Projeto

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.

Page 16: Aula 05 - 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 16

Page 17: Aula 05 - 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 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");

Page 18: Aula 05 - 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  

Page 19: Aula 05 - 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 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  

Page 20: Aula 05 - 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 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  

Page 21: Aula 05 - 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 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.

Page 22: Aula 05 - UML e Padrões de Projeto

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");

}}

Page 23: Aula 05 - 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.

Page 24: Aula 05 - UML e Padrões de Projeto

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

Page 25: Aula 05 - UML e Padrões de Projeto

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

Page 26: Aula 05 - UML e Padrões de Projeto

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");}

}}

Page 27: Aula 05 - UML e Padrões de Projeto

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.

Page 28: Aula 05 - UML e Padrões de Projeto

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.

Page 29: Aula 05 - UML e Padrões de Projeto

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");

}}

Page 30: Aula 05 - 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

Page 31: Aula 05 - 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.  

•  Como  poderíamos  especializar  o  criador  de  emissores?  

 

UML e Padrões de Projeto Centro Universitário do Triângulo 31

Page 32: Aula 05 - 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.  

•  Como  poderíamos  especializar  o  criador  de  emissores?  

 

UML e Padrões de Projeto Centro Universitário do Triângulo 32

Page 33: Aula 05 - 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.  

•  Como  poderíamos  especializar  o  criador  de  emissores?  

 

UML e Padrões de Projeto Centro Universitário do Triângulo 33

Definindo subclasses

Page 34: Aula 05 - UML e Padrões de Projeto

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

Page 35: Aula 05 - UML e Padrões de Projeto

Factory  Method  

UML e Padrões de Projeto Centro Universitário do Triângulo 35

Page 36: Aula 05 - UML e Padrões de Projeto

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.

Page 37: Aula 05 - UML e Padrões de Projeto

Estrutura  do  Factory  Method  

UML e Padrões de Projeto Centro Universitário do Triângulo 37

Page 38: Aula 05 - UML e Padrões de Projeto

Estrutura  do  Factory  Method  

UML e Padrões de Projeto Centro Universitário do Triângulo 38

Emissor

Page 39: Aula 05 - UML e Padrões de Projeto

Estrutura  do  Factory  Method  

UML e Padrões de Projeto Centro Universitário do Triângulo 39

Emissor

EmissorAssincronoSMS

EmissorAssincronoJMS

EmissorAssincronoEmail

Page 40: Aula 05 - UML e Padrões de Projeto

Estrutura  do  Factory  Method  

UML e Padrões de Projeto Centro Universitário do Triângulo 40

Emissor

EmissorAssincronoSMS

EmissorAssincronoEmail

EmissorAssincronoJMS

EmissorSincronoSMS

EmissorSincronoEmail

EmissorSincronoJMS

Page 41: Aula 05 - UML e Padrões de Projeto

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

Page 42: Aula 05 - UML e Padrões de Projeto

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

Page 43: Aula 05 - UML e Padrões de Projeto

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");

}}

Page 44: Aula 05 - 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.

Page 45: Aula 05 - UML e Padrões de Projeto

Onde  podemos  ver  o  uso  do  Factory  Method?  •  javax.xml.parsers  

UML e Padrões de Projeto Centro Universitário do Triângulo 45

Page 46: Aula 05 - UML e Padrões de Projeto

Onde  podemos  ver  o  uso  do  Factory  Method?  •  java.sql.DriverManager  

UML e Padrões de Projeto Centro Universitário do Triângulo 46

Page 47: Aula 05 - UML e Padrões de Projeto

Abstract  Factory  

Page 48: Aula 05 - UML e Padrões de Projeto

Abstract  Factory  ObjeNvo  segundo  o  GoF:  

UML e Padrões de Projeto Centro Universitário do Triângulo 48

Page 49: Aula 05 - UML e Padrões de Projeto

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

Page 50: Aula 05 - UML e Padrões de Projeto

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.

Page 51: Aula 05 - UML e Padrões de Projeto

Abstract  Factory  

UML e Padrões de Projeto Centro Universitário do Triângulo 51

Estrutura do Abstract Factory, segundo GoF (pág. 101)

Page 52: Aula 05 - UML e Padrões de Projeto

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.    

Page 53: Aula 05 - UML e Padrões de Projeto

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.      

Page 54: Aula 05 - UML e Padrões de Projeto

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      

Page 55: Aula 05 - UML e Padrões de Projeto

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      

Page 56: Aula 05 - UML e Padrões de Projeto

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

Page 57: Aula 05 - UML e Padrões de Projeto

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

Page 58: Aula 05 - UML e Padrões de Projeto

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

Page 59: Aula 05 - UML e Padrões de Projeto

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

Page 60: Aula 05 - UML e Padrões de Projeto

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

Page 61: Aula 05 - UML e Padrões de Projeto

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

Page 62: Aula 05 - UML e Padrões de Projeto

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

Page 63: Aula 05 - UML e Padrões de Projeto

Abstract  Factory  

UML e Padrões de Projeto Centro Universitário do Triângulo 63

Page 64: Aula 05 - UML e Padrões de Projeto

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.

Page 65: Aula 05 - UML e Padrões de Projeto

Abstract  Factory  

UML e Padrões de Projeto Centro Universitário do Triângulo 65

1

2

3 4

Page 66: Aula 05 - UML e Padrões de Projeto

Abstract  Factory  

UML e Padrões de Projeto Centro Universitário do Triângulo 66

Page 67: Aula 05 - UML e Padrões de Projeto

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.

Page 68: Aula 05 - UML e Padrões de Projeto

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.

Page 69: Aula 05 - UML e Padrões de Projeto

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.

Page 70: Aula 05 - UML e Padrões de Projeto

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);

}}

Page 71: Aula 05 - UML e Padrões de Projeto

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

Page 72: Aula 05 - UML e Padrões de Projeto

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

Page 73: Aula 05 - UML e Padrões de Projeto

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);

}}

Page 74: Aula 05 - UML e Padrões de Projeto

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

Page 75: Aula 05 - UML e Padrões de Projeto

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  

Page 76: Aula 05 - UML e Padrões de Projeto

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

Page 77: Aula 05 - UML e Padrões de Projeto

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

Page 78: Aula 05 - UML e Padrões de Projeto

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

Page 79: Aula 05 - UML e Padrões de Projeto

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

Page 80: Aula 05 - UML e Padrões de Projeto

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

Page 81: Aula 05 - UML e Padrões de Projeto

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