design patterns bruno lustosa pereira [email protected] soluções elegantes para problemas...
TRANSCRIPT
![Page 1: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/1.jpg)
Design PatternsBruno Lustosa [email protected]
Soluções elegantes para problemas recorrentes
PHP Conference Brasil2006-12-01 - São Paulo
![Page 2: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/2.jpg)
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
![Page 3: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/3.jpg)
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
![Page 4: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/4.jpg)
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
![Page 5: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/5.jpg)
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
![Page 6: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/6.jpg)
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
![Page 7: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/7.jpg)
Design Patterns
Diagrama UML do Factory
● Método factory() da Fábrica retorna instâncias de Produto.
6 / 21
![Page 8: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/8.jpg)
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
![Page 9: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/9.jpg)
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
![Page 10: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/10.jpg)
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
![Page 11: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/11.jpg)
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
![Page 12: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/12.jpg)
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
![Page 13: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/13.jpg)
Design Patterns
Diagrama UML do Facade
● Facade é a classe que provê uma interface simples para um subsistema complexo.
12 / 21
![Page 14: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/14.jpg)
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
![Page 15: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/15.jpg)
Design Patterns
Diagrama UML do Adaptador
● Cliente fala com Compatível. Adaptador faz com que Cliente fale com Incompatível.
14 / 21
![Page 16: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/16.jpg)
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
![Page 17: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/17.jpg)
Design Patterns
Diagrama UML do Decorator
16 / 21
![Page 18: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/18.jpg)
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
![Page 19: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/19.jpg)
Design Patterns
Diagrama UML do Observer
● Objeto observável alerta com uma chamada a notify(), que executa update() em cada observador.
18 / 21
![Page 20: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/20.jpg)
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
![Page 21: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/21.jpg)
Design Patterns
Diagrama UML do Strategy
● Classe Ordenacao pode usar qualquer uma das estratégias, chamando o método ordena().
20 / 21
![Page 22: Design Patterns Bruno Lustosa Pereira bruno@lustosa.net Soluções elegantes para problemas recorrentes PHP Conference Brasil 2006-12-01 - São Paulo](https://reader033.vdocuments.pub/reader033/viewer/2022051413/552fc0f8497959413d8b4923/html5/thumbnails/22.jpg)
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