A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Soluções elegantes para problemas recorrentes

Apresentações semelhantes


Apresentação em tema: "Soluções elegantes para problemas recorrentes"— Transcrição da apresentação:

1 Soluções elegantes para problemas recorrentes
Design Patterns Bruno Lustosa Pereira Soluções elegantes para problemas recorrentes PHP Conference Brasil São Paulo

2 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

3 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

4 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

5 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

6 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

7 Design Patterns Diagrama UML do Factory
Método factory() da Fábrica retorna instâncias de Produto. 6 / 21

8 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

9 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

10 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

11 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

12 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

13 Design Patterns Diagrama UML do Facade
Facade é a classe que provê uma interface simples para um subsistema complexo. 12 / 21

14 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

15 Design Patterns Diagrama UML do Adaptador
Cliente fala com Compatível. Adaptador faz com que Cliente fale com Incompatível. 14 / 21

16 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

17 Design Patterns Diagrama UML do Decorator 16 / 21

18 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

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

20 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

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

22 Design Patterns Mais informações
- Site pessoal, com os slides e a implementação em PHP dos padrões apresentados. - Excelente site sobre design patterns em PHP. 21 / 21


Carregar ppt "Soluções elegantes para problemas recorrentes"

Apresentações semelhantes


Anúncios Google