Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.