SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados

DCI com PHP
DCI com PHPDCI com PHP
DCI com PHP
Flávio Lisboa
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
Thiago Boufleuhr
 
Arquitetura software
Arquitetura softwareArquitetura software
Arquitetura software
Fábio Nogueira de Lucena
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
Fábio Nogueira de Lucena
 
ArquiteturaSoftware
ArquiteturaSoftwareArquiteturaSoftware
ArquiteturaSoftware
Fábio Nogueira de Lucena
 
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
Danielle Ballester, PMP,PSM,SFC,SDC,SMC,SPOC,SCT
 
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
Danielle Ballester, PMP,PSM,SFC,SDC,SMC,SPOC,SCT
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
elliando dias
 
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
Eliseu Castelo
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Glaucio Scheibel
 
Documentar Requisitos Usando Modelos
Documentar Requisitos Usando ModelosDocumentar Requisitos Usando Modelos
Documentar Requisitos Usando Modelos
Barbara Lima
 
Objectory
ObjectoryObjectory
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
Vagner Santana
 
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
 
Modelando Sistemas com UML
Modelando Sistemas com UMLModelando Sistemas com UML
Modelando Sistemas com UML
armeniocardoso
 
Modelo caso uso
Modelo caso usoModelo caso uso
Modelo caso uso
Gabriel Faustino
 
Aula4-modelagem e uml
Aula4-modelagem e umlAula4-modelagem e uml
Aula4-modelagem e uml
neilaxavier
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geral
sergiocrespo
 
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
Adriano Tavares
 
UNA - Eng Usa '12 - aula 05
UNA  - Eng Usa '12 - aula 05UNA  - Eng Usa '12 - aula 05
UNA - Eng Usa '12 - aula 05
Marcello Cardoso
 

Mais procurados (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
 

Destaque

Engenharia de Software II - Aula 8
Engenharia de Software II - Aula 8Engenharia de Software II - Aula 8
Engenharia de Software II - Aula 8
Alessandro Almeida
 
Engenharia de Software II - Aula 15
Engenharia de Software II - Aula 15Engenharia de Software II - Aula 15
Engenharia de Software II - Aula 15
Alessandro Almeida
 
Engenharia de Software II - Aula 6
Engenharia de Software II - Aula 6Engenharia de Software II - Aula 6
Engenharia de Software II - Aula 6
Alessandro Almeida
 
Engenharia de Software II - Aula 1
Engenharia de Software II - Aula 1Engenharia de Software II - Aula 1
Engenharia de Software II - Aula 1
Alessandro Almeida
 
Engenharia de Software II - Aula 9
Engenharia de Software II - Aula 9Engenharia de Software II - Aula 9
Engenharia de Software II - Aula 9
Alessandro Almeida
 
Engenharia de Software II - Aula 7
Engenharia de Software II - Aula 7Engenharia de Software II - Aula 7
Engenharia de Software II - Aula 7
Alessandro Almeida
 
Engenharia de software orientada a servicos
Engenharia de software orientada a servicosEngenharia de software orientada a servicos
Engenharia de software orientada a servicos
Leonardo Eloy
 
Engenharia de Software II - Aula 3
Engenharia de Software II - Aula 3Engenharia de Software II - Aula 3
Engenharia de Software II - Aula 3
Alessandro Almeida
 
Engenharia de Software I - Aula 2
Engenharia de Software I - Aula 2Engenharia de Software I - Aula 2
Engenharia de Software I - Aula 2
Alessandro Almeida
 
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
André Phillip Bertoletti
 
Engenharia de Software II - Aula 2
Engenharia de Software II - Aula 2Engenharia de Software II - Aula 2
Engenharia de Software II - Aula 2
Alessandro Almeida
 
Projeto de Interfaces - Aula 01
Projeto de Interfaces - Aula 01Projeto de Interfaces - Aula 01
Projeto de Interfaces - Aula 01
Carlos Rosemberg
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
Vagner Santana
 
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
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
Yan Justino
 

Destaque (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
 

Semelhante a 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
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
Fabio Moura Pereira
 
342336684-GSI030-Aula08-projetoImplementacao.pdf
342336684-GSI030-Aula08-projetoImplementacao.pdf342336684-GSI030-Aula08-projetoImplementacao.pdf
342336684-GSI030-Aula08-projetoImplementacao.pdf
GabrielMarchesan
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
ejdn1
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
Andre Baltieri
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetos
Gustavo Souza
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
ssuser7025cf
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
Wagner Zaparoli
 
Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6
Alessandro Almeida
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
Edjalma Queiroz da Silva
 
Reutilização
ReutilizaçãoReutilização
Reutilização
emjorge
 
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
Comunidade NetPonto
 
GoF.ppt
GoF.pptGoF.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
Fabio Kon
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
Rodrigo Caetano
 
Framework struts2v2.5
Framework struts2v2.5Framework struts2v2.5
Framework struts2v2.5
Eduardo Gabina
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Rodrigo Cândido da Silva
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Leonardo Lucas Lana
 
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...
Lucas Furtado de Oliveira
 
Padrões de Projeto (GoF)
Padrões de Projeto (GoF)Padrões de Projeto (GoF)
Padrões de Projeto (GoF)
Álvaro Farias Pinheiro
 

Semelhante a 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)
 

Último

Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
Manuais Formação
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
YeniferGarcia36
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
eaiprofpolly
 
karl marx biografia resumida com suas obras e história de vida
karl marx biografia resumida com suas obras e história de vidakarl marx biografia resumida com suas obras e história de vida
karl marx biografia resumida com suas obras e história de vida
KleginaldoPaz2
 
slides de Didática 2.pdf para apresentar
slides de Didática 2.pdf para apresentarslides de Didática 2.pdf para apresentar
slides de Didática 2.pdf para apresentar
JoeteCarvalho
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
MarcosPaulo777883
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
mamaeieby
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
lveiga112
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Biblioteca UCS
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
Professor Belinaso
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
WelberMerlinCardoso
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
PatriciaZanoli
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AntonioVieira539017
 
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
LeticiaRochaCupaiol
 
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIASA SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
HisrelBlog
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
Marlene Cunhada
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
LucianaCristina58
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
joseanesouza36
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
MateusTavares54
 

Último (20)

Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
 
karl marx biografia resumida com suas obras e história de vida
karl marx biografia resumida com suas obras e história de vidakarl marx biografia resumida com suas obras e história de vida
karl marx biografia resumida com suas obras e história de vida
 
slides de Didática 2.pdf para apresentar
slides de Didática 2.pdf para apresentarslides de Didática 2.pdf para apresentar
slides de Didática 2.pdf para apresentar
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
 
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
 
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIASA SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
 

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