Mais informa��es http by 4mD4ar

VIEWS: 0 PAGES: 22

									Bruno Lustosa Pereira          Design Patterns
bruno@lustosa.net


                        Soluções elegantes para
                          problemas recorrentes




                              PHP Conference Brasil
                             2006-12-01 - São Paulo
                              Design Patterns
O que são esses padrões?

●   Estruturas recorrentes encontradas no processo de
    desenvolvimento de softwares orientados a objeto.
●   Modelos de soluções reutilizáveis para problemas
    encontrados diariamente.
●   Não é re-uso de código, e sim de idéias e estratégias
    de desenvolvimento.




                                                        1 / 21
                            Design Patterns
GoF - Gang of Four

●   O primeiro livro sobre o
    assunto.
●   A comunidade se refere aos
    4 autores como a "Gangue
    dos Quatro".




                                         2 / 21
                              Design Patterns
Tipos de Padrões

●   Criação: Principal função é lidar com os mecanismos
    de criação de objetos. Exemplos: Factory, Singleton e
    Registry.
●   Estruturais: Simplificam a realização de
    relacionamentos entre diferentes classes. Exemplos:
    Facade, Adapter e Decorator.
●   Comportamentais: Preocupam-se com a atribuição de
    responsabilidades entre objetos. Exemplos: Observer,
    Strategy.

                                                       3 / 21
                             Design Patterns
Prós e Contras

●   Prós:
      Facilitam o re-uso de técnicas e arquiteturas de
       software já testadas com sucesso.
      Define um padrão de comunicação compartilhado
       pela equipe de desenvolvimento.
●   Contras:
      Precisa ser reprogramado em cada aplicação.
      Uso indiscriminado pode aumentar muito a
       complexidade.

                                                          4 / 21
                               Design Patterns
Factory (fábrica)

●   Problema: Como encapsular o processo de criação de
    objetos complexos?
●   Exemplos: Objetos onde é necessário escolher qual
    subclasse instanciar, onde é necessário buscar suas
    configurações iniciais, ou onde se precisa criar objetos
    auxiliares como parte do processo de criação.




                                                          5 / 21
                           Design Patterns
Diagrama UML do Factory

●   Método factory() da Fábrica retorna instâncias
    de Produto.




                                                 6 / 21
                            Design Patterns
Singleton

●   Problema: Como garantir que uma classe só possua
    uma única instância, e que essa instância seja
    acessível globalmente?
●   Exemplos: Conexão com BD, escrita em arquivo, spool
    de impressão, outros padrões como o Registro.




                                                    7 / 21
                           Design Patterns
Diagrama UML do Singleton

●   Método instance() retorna a
    instância do singleton.
●   Construtor private.
●   Propriedade instance guarda
    referência à instância.




                                        8 / 21
                              Design Patterns
Registry (registro)

●   Problema: Como criar um "catálogo" de objetos, de
    onde se possa conseguir referências a eles através de
    uma interface conhecida?
●   Exemplo: Site com conexões para múltiplos BDs. As
    conexões ficam no registro, facilitando as consultas em
    qualquer ponto do código.




                                                        9 / 21
                             Design Patterns
Diagrama UML do Registry

●   Método instance() retorna a
    instância do registro.
●   Construtor private.
●   store é um array que guarda as
    referências dos objetos.
●   set() guarda referências e get() as
    recupera.




                                          10 / 21
                             Design Patterns
Facade (fachada)

●   Problema: Como simplificar a interface de um sistema
    ou classe complexos, criando uma “fachada” mais
    amigável?
●   Exemplos: Um gateway de pagamento, que serve de
    interface com bancos e administradoras de cartões.




                                                      11 / 21
                           Design Patterns
Diagrama UML do Facade

●   Facade é a classe que provê
    uma interface simples para
    um subsistema complexo.




                                        12 / 21
                             Design Patterns
Adapter (adaptador)

●   Problema: Como fazer com que duas classes com
    interfaces incompatíveis possam se falar?
●   Exemplos: Uma classe que só funciona com
    determinada versão de outra. Um adaptador poderia
    ser usado para fazer com que essa classe funcionasse
    com outras versões.




                                                     13 / 21
                          Design Patterns
Diagrama UML do Adaptador

●   Cliente fala com Compatível. Adaptador faz
    com que Cliente fale com Incompatível.




                                                 14 / 21
                             Design Patterns
Decorator (decorador)

●   Problema: Como adicionar funcionalidade a uma classe
    dinamicamente, sem precisar usar herança?
●   Exemplos: Um objeto "janela", que pode possuir
    diversas funcionalidades opcionais, como bordas, barra
    de rolagem, menu, etc. Usando herança, chegaríamos
    a uma explosão de subclasses, inviabilizando a
    manutenção.




                                                      15 / 21
                   Design Patterns
Diagrama UML do Decorator




                                16 / 21
                             Design Patterns
Observer (observador)

●   Problema: Como alertar objetos de que houve uma
    mudança de estado em um objeto de forma
    automática?
●   Exemplos: Campos em uma aplicação PHP-GTK,
    outros casos onde exista uma interdependência entre
    objetos (uma ação precisa ser tomada por um objeto A
    caso o estado do objeto B seja alterado).




                                                     17 / 21
                            Design Patterns
Diagrama UML do Observer
●   Objeto observável alerta com uma chamada a
    notify(), que executa update() em cada observador.




                                                   18 / 21
                            Design Patterns
Strategy (estratégia)

●   Problema: Como alterar a implementação interna de
    um objeto dinamicamente?
●   Exemplos: Classes onde se tenham muitos comandos
    switch. Qualquer problema onde se tenha que tomar
    uma ação diferente dependendo de algum tipo ou
    valor.




                                                   19 / 21
                          Design Patterns
Diagrama UML do Strategy
●   Classe Ordenacao pode usar qualquer uma das
    estratégias, chamando o método ordena().




                                                  20 / 21
                               Design Patterns
Mais informações

●   http://www.lustosa.net/ - Site pessoal, com os slides e a
    implementação em PHP dos padrões apresentados.
●   http://www.phppatterns.com/ - Excelente site sobre
    design patterns em PHP.




                                                         21 / 21

								
To top