SlideShare a Scribd company logo
1 of 9
Pós-Graduação Engenharia de Software

     Disciplina Projeto de Sistemas de Software




Padrão de Projeto: Entendendo Abstract Factory




                                      Lígia de Almeida Avelar

                               Thiago Antonius Oliveira Souza




            Salvador, 8 de junho de 2009
Trabalho da Disciplina Projeto Tópicos Especiais em Projeto
                 de Sistemas de Software
          Padrão de Projeto: Entendendo Abstract Factory
Autores
     Lígia de Almeida Avelar
     Thiago Antonius Oliveira Souza

1. Introdução
  Padrões de projetos são soluções pré-determinadas para problemas que
  comumente se repetem e podem ser reutilizadas em diversos cenários a partir de
  adaptações. Christopher Alexander foi o responsável pelo desenvolvimento deste
  conceito para a arquitetura na década de 70, segundo ele:

                 "Um padrão descreve um problema que ocorre inúmeraspar vezes em
                 determinado contexto, e descreve ainda a solução para esse problema, de
                 modo que essa solução possa ser utilizada sistematicamente em distintas
                 situações." [Alexander apud Macoratti]

  Conhecidos como a Gang of Four (Gangue dos quatro) Eric Gamma, Richard
  Helm, Ralph Johnson e John Vlissides escreveram o livro Design Pattern:
  Elements of Reusable Object-Oriented Software responsável por disseminar o uso
  de Padrões na área de Tecnologia da Informação, neste livro foram descritos 23
  padrões conhecidos como padrões Gof.

                 "Os padrões de projeto são descrições de objetos que se comunicam e
                 classes que são customizadas para resolver um problema genérico de
                 design em um contexto específico" [GoF apud Rocha]

  Os padrões GoF são classificados de acordo com o escopo – aplicação em
  classes ou objetos – e a finalidade – o propósito da solução.

  De acordo com o escopo os padrões se classificam em:

      •    Padrões para classes – tratam o relacionamento entre classes e subclasses
           (herança), são estáticos por serem fixados em tempo de compilação.

      •    Padrões para objetos – tratam do relacionamento entre objetos
                 (associação e composição), são dinâmicos, pois podem se alterar
           em tempo de execução.

  De acordo com a finalidade os padrões se classificam em padrões de:

      •    Criação – Diz respeito à criação do objeto. Estes padrões abstraem o
           processo de instanciação dos objetos tornando o sistema independente da
           forma com que eles são criados, compostos e representados. [Souza].
Escopo de Classe             Factory Method

                                       Abstract Factory,   Builder,   Prototype,
          Escopo de Objeto
                                       Singleton


      •   Estruturais – Tratam das associações entre classes (usam herança para
          compor interfaces) e objetos (descrevem formas de compor objetos para
          realizar novas funcionalidades). [Souza]

          Escopo de Classe             Adapter

                                       Bridge, Composite, Decorator, Façade,
          Escopo de Objeto
                                       Flyweight, Proxy


      •   Comportamentais – Diz respeito à interação e divisão de responsabilidades
          entre classes e objetos.

          Escopo de Classe             Interpreter, Template Method

                                       Chain of Responsability, Command,
          Escopo de Objeto             Iterator, Mediator, Memento, Observer,
                                       State, Strategy, Visitor


   Dentre os principais benefícios obtidos pela utilização de padrões de projetos
   destacam-se:

      •   Soluções testadas, aprovadas e documentadas previamente;

      •   Facilidade de manutenção no sistema;

      •   Flexibilidade no sistema para mudanças;

      •   Os padrões utilizam as melhores práticas de Orientação a Objetos;

      •   Utilização de um vocabulário comum para os envolvidos no projeto;


2. Tutorial
2.1 Abstract Factory
O Padrão Abstract Factory ou Fábrica Abstrata fornece uma interface para criação de
objetos que delega as instanciações para as subclasses. Utilizado em casos onde o
cliente cria diferentes objetos definidos em tempo de execução. A estrutura do
Abstract Factory está representada através do diagrama abaixo:
2.2 Cenário
Para aplicar os conceitos de Padrão de Projeto foi escolhido o contexto de um serviço
bancário realizado pelo Caixa Eletrônico 24h. O Caixa 24h possui uma aplicação
responsável por fornecer serviços como saldo, extrato e transferência para usuários
de diferentes bancos. A partir da autenticação do usuário a aplicação identifica em
qual banco será realizada a ação requerida. A aplicação deve ser flexível o suficiente
para que novos bancos possam ser agregados ao Caixa 24h sem causar grandes
impactos. Além disso, a aplicação cliente não precisa saber quais bancos são
implementados, nem como seus produtos estão desenvolvidos.


2.3 Solução
A solução com o Abstract Factory foi desenhada de acordo com o diagrama a seguir:
Foi criada uma classe Banco que representa a nossa fábrica abstrata que se refere ao
Banco 24h. Nela temos quatro métodos, são eles:
   •   obterFabrica() – Método responsável por instanciar as fábricas concretas,
       como por exemplo, o Banco Real e o Banco do Brasil;
   •   criarExtrato() e criarSaldo() – Métodos abstratos, que definem os tipos de
       produtos que cada fábrica concreta deve obrigatoriamente implementar.
   •   autentica() – Método abstrato responsável por autenticar o cliente, o mesmo foi
       colocado na classe abstrata para que cada banco concreto faça a autenticação
       de acordo com suas regras.
A fábrica abstrata Banco foi implementada da seguinte forma:
As fábricas concretas são responsáveis por implementar os métodos abstratos
criaSaldo() e criaExtrato(), para isso ela deve herdar a classe Banco. Como exemplo
de uma das fábricas concretas temos o código da classe BancoBrasil:




Para cada tipo de produto a ser criado deve se definir uma interface com os métodos
que necessitam ser implementados. No nosso contexto definimos as interfaces
Extrato e Saldo conforme código abaixo.




Foram criados produtos simples para facilitar a compreensão, porém os produtos
poderiam ter mais funcionalidades como, por exemplo, no caso do Extrato, gerar
extrato simplificado, completo, por período, dentre outros. Poderiam também ser
criados diversos produtos como saque, transferência, etc.
Deve existir uma implementação de cada produto para cada banco, abaixo
mostraremos os extratos do banco Real e Brasil:




Como pode ser visto em seguida cada banco tem a sua forma de gerar o extrato,
porém todos seguem a especificações da interface.
A aplicação cliente mostra como utilizar o padrão Abstract Factory. Como pode ser
visto no código abaixo, em nenhum momento a aplicação cliente se preocupa em
instanciar uma fábrica de determinado banco, ela simplesmente pede para a fábrica
abstrata Banco e esta se responsabiliza pela instanciação, tirando da aplicação todo
conhecimento de qual fábrica está sendo utilizada.




A fábrica abstrata cria a instância de uma fábrica concreta em tempo de execução a
partir de uma chave, esta chave é informada pelo usuário do banco, porém a solução
ideal seria a identificação do banco e os dados do usuário através do cartão do
banco.
É isso aí, o padrão Abstract Factory trouxe vários benefícios ao nosso sistema, com
ele ficou possível adicionar novos bancos ao Caixa 24h sem precisar modificar a
aplicação cliente, o padrão também centralizou a criação das fábricas de produtos,
logo caso precise modificar a forma de criação, só é necessário alterar em um único
lugar.

3. Bibliografia
MACORATTI, J.C. Padrões de Projeto – Design Patterns. Disponível na Internet.
http://www.macoratti.net/vb_pd1.htm. 01 de jun 2009.
ROCHA,      H.    da.   Padrões      de     Projeto.   Disponível     na         Internet.
http://www.argonavis.com.br/cursos/java/j930/J930_01.pdf. 01 de jun 2009.
SOUZA,      V. E.        S.    Padrões      de    Projeto.     Disponível   na   Internet.
http://www.disi.unitn.it/~vitorsouza/sites/default/files/DesignPatterns02.pdf. 01 de jun
2009

More Related Content

What's hot

Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
Thiago Boufleuhr
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
Adriano Tavares
 

What's hot (20)

DCI com PHP
DCI com PHPDCI com PHP
DCI com PHP
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
Arquitetura software
Arquitetura softwareArquitetura software
Arquitetura software
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
ArquiteturaSoftware
ArquiteturaSoftwareArquiteturaSoftware
ArquiteturaSoftware
 
Análise de Sistemas Orientado a Objetos - 01
Análise de Sistemas Orientado a Objetos - 01Análise de Sistemas Orientado a Objetos - 01
Análise de Sistemas Orientado a Objetos - 01
 
Análise de Sistemas Orientado a Objetos - 05
Análise de Sistemas Orientado a Objetos - 05Análise de Sistemas Orientado a Objetos - 05
Análise de Sistemas Orientado a Objetos - 05
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
 
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
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Documentar Requisitos Usando Modelos
Documentar Requisitos Usando ModelosDocumentar Requisitos Usando Modelos
Documentar Requisitos Usando Modelos
 
Objectory
ObjectoryObjectory
Objectory
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
 
Modelando Sistemas com UML
Modelando Sistemas com UMLModelando Sistemas com UML
Modelando Sistemas com UML
 
Modelo caso uso
Modelo caso usoModelo caso uso
Modelo caso uso
 
Aula4-modelagem e uml
Aula4-modelagem e umlAula4-modelagem e uml
Aula4-modelagem e uml
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geral
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
 
UNA - Eng Usa '12 - aula 05
UNA  - Eng Usa '12 - aula 05UNA  - Eng Usa '12 - aula 05
UNA - Eng Usa '12 - aula 05
 

Viewers also liked

Introdução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de SoftwareIntrodução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de Software
Willian Carminato
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
paulo peres
 

Viewers also liked (16)

Engenharia de Software II - Aula 8
Engenharia de Software II - Aula 8Engenharia de Software II - Aula 8
Engenharia de Software II - Aula 8
 
Engenharia de Software II - Aula 15
Engenharia de Software II - Aula 15Engenharia de Software II - Aula 15
Engenharia de Software II - Aula 15
 
Engenharia de Software II - Aula 6
Engenharia de Software II - Aula 6Engenharia de Software II - Aula 6
Engenharia de Software II - Aula 6
 
Engenharia de Software II - Aula 1
Engenharia de Software II - Aula 1Engenharia de Software II - Aula 1
Engenharia de Software II - Aula 1
 
Engenharia de Software II - Aula 9
Engenharia de Software II - Aula 9Engenharia de Software II - Aula 9
Engenharia de Software II - Aula 9
 
Engenharia de Software II - Aula 7
Engenharia de Software II - Aula 7Engenharia de Software II - Aula 7
Engenharia de Software II - Aula 7
 
Engenharia de software orientada a servicos
Engenharia de software orientada a servicosEngenharia de software orientada a servicos
Engenharia de software orientada a servicos
 
Engenharia de Software II - Aula 3
Engenharia de Software II - Aula 3Engenharia de Software II - Aula 3
Engenharia de Software II - Aula 3
 
Engenharia de Software I - Aula 2
Engenharia de Software I - Aula 2Engenharia de Software I - Aula 2
Engenharia de Software I - Aula 2
 
Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2Engenharia de Software - Unimep/Pronatec - Aula 2
Engenharia de Software - Unimep/Pronatec - Aula 2
 
Engenharia de Software II - Aula 2
Engenharia de Software II - Aula 2Engenharia de Software II - Aula 2
Engenharia de Software II - Aula 2
 
Projeto de Interfaces - Aula 01
Projeto de Interfaces - Aula 01Projeto de Interfaces - Aula 01
Projeto de Interfaces - Aula 01
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Introdução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de SoftwareIntrodução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de Software
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 

Similar to Travalho versao final

Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
Lucas Simões Maistro
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
ejdn1
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
ssuser7025cf
 

Similar to Travalho versao final (20)

Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
342336684-GSI030-Aula08-projetoImplementacao.pdf
342336684-GSI030-Aula08-projetoImplementacao.pdf342336684-GSI030-Aula08-projetoImplementacao.pdf
342336684-GSI030-Aula08-projetoImplementacao.pdf
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetos
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
GoF.ppt
GoF.pptGoF.ppt
GoF.ppt
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 
Framework struts2v2.5
Framework struts2v2.5Framework struts2v2.5
Framework struts2v2.5
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
 
Padrões de Projeto (GoF)
Padrões de Projeto (GoF)Padrões de Projeto (GoF)
Padrões de Projeto (GoF)
 

Recently uploaded

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 

Recently uploaded (20)

Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
Novena de Pentecostes com textos de São João Eudes
Novena de Pentecostes com textos de São João EudesNovena de Pentecostes com textos de São João Eudes
Novena de Pentecostes com textos de São João Eudes
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Slides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exerciciosSlides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exercicios
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 

Travalho versao final

  • 1. Pós-Graduação Engenharia de Software Disciplina Projeto de Sistemas de Software Padrão de Projeto: Entendendo Abstract Factory Lígia de Almeida Avelar Thiago Antonius Oliveira Souza Salvador, 8 de junho de 2009
  • 2. Trabalho da Disciplina Projeto Tópicos Especiais em Projeto de Sistemas de Software Padrão de Projeto: Entendendo Abstract Factory Autores  Lígia de Almeida Avelar  Thiago Antonius Oliveira Souza 1. Introdução Padrões de projetos são soluções pré-determinadas para problemas que comumente se repetem e podem ser reutilizadas em diversos cenários a partir de adaptações. Christopher Alexander foi o responsável pelo desenvolvimento deste conceito para a arquitetura na década de 70, segundo ele: "Um padrão descreve um problema que ocorre inúmeraspar vezes em determinado contexto, e descreve ainda a solução para esse problema, de modo que essa solução possa ser utilizada sistematicamente em distintas situações." [Alexander apud Macoratti] Conhecidos como a Gang of Four (Gangue dos quatro) Eric Gamma, Richard Helm, Ralph Johnson e John Vlissides escreveram o livro Design Pattern: Elements of Reusable Object-Oriented Software responsável por disseminar o uso de Padrões na área de Tecnologia da Informação, neste livro foram descritos 23 padrões conhecidos como padrões Gof. "Os padrões de projeto são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico de design em um contexto específico" [GoF apud Rocha] Os padrões GoF são classificados de acordo com o escopo – aplicação em classes ou objetos – e a finalidade – o propósito da solução. De acordo com o escopo os padrões se classificam em: • Padrões para classes – tratam o relacionamento entre classes e subclasses (herança), são estáticos por serem fixados em tempo de compilação. • Padrões para objetos – tratam do relacionamento entre objetos (associação e composição), são dinâmicos, pois podem se alterar em tempo de execução. De acordo com a finalidade os padrões se classificam em padrões de: • Criação – Diz respeito à criação do objeto. Estes padrões abstraem o processo de instanciação dos objetos tornando o sistema independente da forma com que eles são criados, compostos e representados. [Souza].
  • 3. Escopo de Classe Factory Method Abstract Factory, Builder, Prototype, Escopo de Objeto Singleton • Estruturais – Tratam das associações entre classes (usam herança para compor interfaces) e objetos (descrevem formas de compor objetos para realizar novas funcionalidades). [Souza] Escopo de Classe Adapter Bridge, Composite, Decorator, Façade, Escopo de Objeto Flyweight, Proxy • Comportamentais – Diz respeito à interação e divisão de responsabilidades entre classes e objetos. Escopo de Classe Interpreter, Template Method Chain of Responsability, Command, Escopo de Objeto Iterator, Mediator, Memento, Observer, State, Strategy, Visitor Dentre os principais benefícios obtidos pela utilização de padrões de projetos destacam-se: • Soluções testadas, aprovadas e documentadas previamente; • Facilidade de manutenção no sistema; • Flexibilidade no sistema para mudanças; • Os padrões utilizam as melhores práticas de Orientação a Objetos; • Utilização de um vocabulário comum para os envolvidos no projeto; 2. Tutorial 2.1 Abstract Factory O Padrão Abstract Factory ou Fábrica Abstrata fornece uma interface para criação de objetos que delega as instanciações para as subclasses. Utilizado em casos onde o cliente cria diferentes objetos definidos em tempo de execução. A estrutura do Abstract Factory está representada através do diagrama abaixo:
  • 4. 2.2 Cenário Para aplicar os conceitos de Padrão de Projeto foi escolhido o contexto de um serviço bancário realizado pelo Caixa Eletrônico 24h. O Caixa 24h possui uma aplicação responsável por fornecer serviços como saldo, extrato e transferência para usuários de diferentes bancos. A partir da autenticação do usuário a aplicação identifica em qual banco será realizada a ação requerida. A aplicação deve ser flexível o suficiente para que novos bancos possam ser agregados ao Caixa 24h sem causar grandes impactos. Além disso, a aplicação cliente não precisa saber quais bancos são implementados, nem como seus produtos estão desenvolvidos. 2.3 Solução A solução com o Abstract Factory foi desenhada de acordo com o diagrama a seguir:
  • 5. Foi criada uma classe Banco que representa a nossa fábrica abstrata que se refere ao Banco 24h. Nela temos quatro métodos, são eles: • obterFabrica() – Método responsável por instanciar as fábricas concretas, como por exemplo, o Banco Real e o Banco do Brasil; • criarExtrato() e criarSaldo() – Métodos abstratos, que definem os tipos de produtos que cada fábrica concreta deve obrigatoriamente implementar. • autentica() – Método abstrato responsável por autenticar o cliente, o mesmo foi colocado na classe abstrata para que cada banco concreto faça a autenticação de acordo com suas regras. A fábrica abstrata Banco foi implementada da seguinte forma:
  • 6. As fábricas concretas são responsáveis por implementar os métodos abstratos criaSaldo() e criaExtrato(), para isso ela deve herdar a classe Banco. Como exemplo de uma das fábricas concretas temos o código da classe BancoBrasil: Para cada tipo de produto a ser criado deve se definir uma interface com os métodos que necessitam ser implementados. No nosso contexto definimos as interfaces Extrato e Saldo conforme código abaixo. Foram criados produtos simples para facilitar a compreensão, porém os produtos poderiam ter mais funcionalidades como, por exemplo, no caso do Extrato, gerar extrato simplificado, completo, por período, dentre outros. Poderiam também ser criados diversos produtos como saque, transferência, etc.
  • 7. Deve existir uma implementação de cada produto para cada banco, abaixo mostraremos os extratos do banco Real e Brasil: Como pode ser visto em seguida cada banco tem a sua forma de gerar o extrato, porém todos seguem a especificações da interface.
  • 8. A aplicação cliente mostra como utilizar o padrão Abstract Factory. Como pode ser visto no código abaixo, em nenhum momento a aplicação cliente se preocupa em instanciar uma fábrica de determinado banco, ela simplesmente pede para a fábrica abstrata Banco e esta se responsabiliza pela instanciação, tirando da aplicação todo conhecimento de qual fábrica está sendo utilizada. A fábrica abstrata cria a instância de uma fábrica concreta em tempo de execução a partir de uma chave, esta chave é informada pelo usuário do banco, porém a solução
  • 9. ideal seria a identificação do banco e os dados do usuário através do cartão do banco. É isso aí, o padrão Abstract Factory trouxe vários benefícios ao nosso sistema, com ele ficou possível adicionar novos bancos ao Caixa 24h sem precisar modificar a aplicação cliente, o padrão também centralizou a criação das fábricas de produtos, logo caso precise modificar a forma de criação, só é necessário alterar em um único lugar. 3. Bibliografia MACORATTI, J.C. Padrões de Projeto – Design Patterns. Disponível na Internet. http://www.macoratti.net/vb_pd1.htm. 01 de jun 2009. ROCHA, H. da. Padrões de Projeto. Disponível na Internet. http://www.argonavis.com.br/cursos/java/j930/J930_01.pdf. 01 de jun 2009. SOUZA, V. E. S. Padrões de Projeto. Disponível na Internet. http://www.disi.unitn.it/~vitorsouza/sites/default/files/DesignPatterns02.pdf. 01 de jun 2009