58
Bit 2 Bit Study Group http://blog.bit2bit.com.br – [email protected] - @bit2bitgroup Introdução a Design Pattern Ricardo Alexandre Schulze [email protected]

Design pattern

Embed Size (px)

DESCRIPTION

Introdução a Design Pattern

Citation preview

Page 1: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Introdução a Design Pattern

Ricardo Alexandre [email protected]

Page 2: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Agenda

• História• Conceito• Padrões de Criação• Padrões Estruturais• Padrões Comportamentais• Conclusão• Referências

Page 3: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

História• Conceito criado na década de 70 por Christopher Alexander.

• Em 1987, Kent Beck e Ward Cunningham, na época programadores, propuseram os primeiros padrões de projetos, para construção de janelas em linguagem Smalltalk.

• Em 1995 o conceito de padrão de projeto ganhou popularidade com o lançamento do livro Design Patterns: Elements of Reusable Object-Oriented Software. Escrito pelo grupo conhecido com GoF.

• GoF (Gang Of Four), Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, estes criarão os padrões GoF, composto por 23 padrões divididos em 3 grupos: Padrões de Criação(5), Padrões Estruturais(7), Padrões Comportamentais(11).

Page 4: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

História• Devido a esse ganho de popularidade, surgiram outros livros como o,

Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development.

• Esse segundo livro deu origem aos Padrões GRASP (General Responsibility Assignment Software Patterns), que é composto de 7 padrões.

• Em 2009 mais de 30 Colaboradores participaram na criação do livro de Thomas Erl – SOA Design patterns . O objetivo desse livro era o de fazer um catálogo dos design patterns para SOA (Service Oriented Architecture).

• Mais de 200 profissionais de TI ao redor do mundo participaram da revisão do livro de Thomas Erl. Esses Design Patterns estão publicados e discutidos no site http://www.soapatterns.org/

Page 5: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Conceito• “Um Pattern descreve uma solução comprovada para um problema de

desenho recorrente, dando ênfase particular no contexto e forçando a aproximação do problema, consequências e o impacto de sua solução.” Glaucio Sheibel.

• Idealmente, um pattern deve ter as seguintes Características:1. Encapsulamento: um padrão encapsula um problema/solução bem definido,

independente, específico e bem formulado.2. Generalidade: deve permitir a construção de outras realizações a partir dele.3. Equilíbrio: dá a razão, relacionada com cada restrição, de cada passo do projeto, com

análise de abstração de dados empíricos.4. Abstração: representam a abstração do cotidiano ou da experiência empírica.5. Abertura: deve permitir sua expansão para níveis mais baixo de detalhes.6. Combinatoriedade: relacionamento hierárquico, padrões de alto nível, podem ser

compostos, ou ser relacionados com padrões de níveis mais baixos.

Page 6: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Conceito• Além das características, um design pattern deve ter um formato

descrito em 5 partes:1. Nome: Descrição da solução, mais do que do problema e do contexto.2. Exemplos: figuras, diagramas ou descrições que ilustrem um protótipo.3. Contexto: descrições nas quais o padrão se aplica.4. Problema: descrição das forças e restrições e suas interações.5. Solução: relacionamentos estáticos e regras dinâmicas, descrevendo como construir

uma solução usando o padrão, podendo citar, suas variações e ajustes.

Page 7: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Page 8: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Padrões de Criação• Ao todo são 5 padrões de criação são eles:

1. Abstract Factory.2. Factory Method.3. Singleton.4. Builder.5. Prototype.

• Padrões de criação as vezes competem entre si. Existem situações onde podem ser usados Abstract Facthory ou Prototype por exemplo.

• Padrões de criação também podem complementar um ao outro. Exemplo, uma Abstract Factory pode armazenar um set de Prototype.

Page 9: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Abstract FactoryDefinição• É um padrão que permite a criação de famílias de objetos

relacionados ou dependentes, através de uma única interface, sem que a classe concreta seja especificada.

UTILIZAÇÃO• Padrão utilizado, quando a criação de um objeto pai depende da

criação de seus objetos filhos. Exemplo, para um carro existir, é preciso que existam motor, rodas, portas, etc… e o contrário também se aplica, um motor precisa de um carro. Este é apenas um dos exemplos.

• Outro exemplo de usabilidade deste padrão é na criação de uma Toolkit que disponibilize controles para diferentes interfaces gráficas.

Page 10: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Abstract Factory

Page 11: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Factory Method

Definição • Define uma interface para criar um objeto, mas é a subclasse quem

decide qual objeto será instanciado.• O factory method permite adiar a instanciação para as subclasses.

Utilização• Imagine por exemplo, uma fábrica de brinquedos, esta fábrica possui

vários moldes (carro,cavalo,figurinhas). Uma pessoa é responsável por fazer a mistura do plástico, e injeta-la na máquina, a máquina por sua vez injetara o plástico, porém o que definira qual brinquedo será produzido, é o Molde.

Page 12: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Factory Method

Page 13: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Singleton

Definição • Este padrão garante a existência de apenas uma instância de uma

classe, mantendo um ponto global de acesso ao seu objeto.

Utilização• Bem como a definição explica, ele garante que o objeto será único,

exemplos, o Presidente da República é único, assim como o presidente de uma determinada empresa. O padrão singleton, não serve apenas para isso, ele pode complementar outros padrões, um exemplo seria o Factory, no exemplo do carro, poderíamos definir por exemplo, que o motor do carro seria único.

Page 14: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Singleton

Page 15: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Builder

Definição • Separa a construção de um objeto complexo de sua representação.

Utilização• Um bom exemplo seria uma rede de fastfood, onde um cliente pode

pedir um item principal ,exemplo os combos. Os combos são constituídos de um item principal (o lanche), um item secundário (o acompanhamento), um item terciário (a bebida), e um quarto item que pode variar (o brinquedo). Portanto, quando o cliente pede esse combo ao caixa, o caixa demanda a construção do combo(item por item) e ao final o cliente recebe o Combo (e não o lanche, o acompanhamento, a bebida).

Page 16: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Builder

Page 17: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Prototype

Definição• Específica o tipo de objeto a ser criado através de uma instância de

objeto protótipo.

Utilização• Em sistemas que usam Abstract Factory, que as vezes podem ser

complexas, e o Prototype pode facilitar em algumas situações.• Em sistemas que utilizam classes definidas em tempo de execução.

• Podemos citar o exemplo de uma divisão celular, onde a partir de uma célula, vão ser criadas duas células , ou seja, ela faz um clone dela mesma.

Page 18: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Prototype

Page 19: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Padrões Estruturais• Ao todo são 7 padrões estruturais, são eles:

1. Adapter.2. Bridge.3. Composites.4. Proxy.5. Façade.6. Flyweight.7. Decorator.

• Consiste Basicamente de classes que utilizam Herança para compor interfaces.

• Define formas de compor objetos para que possamos obter novas funcionalidades.

Page 20: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Adapter

Definição• Como o nome já diz, o adapter, adapta a interface de

uma classe, para que ela possa interagir com outras.

Utilização• Como sua definição explica, ele ‘adapta’ uma interface

a outra, por intermédio de uma nova interface, que fara a adaptação, um exemplo é esta figura acima, que explícita bem, a função de um adapter.

Page 21: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Adapter

Page 22: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Bridge

Definição• Padrão que faz a interface variar independentemente das suas

implementações.

Utilização• Um exemplo de utilização de um padrão bridge é o quadro de

luz de uma casa, que possui, por exemplo, interruptores para diferentes tipos de objetos (Lâmpada, Ventilador, etc). A intenção do switch é de apenas ligar e desligar os objetos, sendo que esse switch pode ser implementado de diferentes maneiras.

Page 23: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Bridge

Page 24: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Composites

Definição• Possibilita enxergar um conjunto (composição) de objetos

como se fosse um só.• Representa estrutura de objetos agrupados hierarquicamente.

Utilização• Compõe objetos em três estruturas e permite que o cliente

trate objetos individuais, e a composição uniforme. Um exemplo, de utilização é uma expressão aritmética, 2 + 3 e (2 + 3) + (4 * 6), ambas são validas.

Page 25: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Composites

Page 26: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

ProxyDefinição• De forma geral funciona de interface para outra classe.• Um proxy pode conectar-se a diferentes tipos de objetos.

Utilização• Um exemplo bem simples da utilização de proxy, é uma

movimentação bancária, por exemplo, um cliente de banco utiliza um cheque para pagar uma conta, ao invés de pagar em dinheiro, por fim, controla o acesso ao dinheiro da conta do cliente.

Page 27: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Proxy

Page 28: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

FlyweightDefinição• Similar a um pool.• Define como compartilhar objetos para que os mesmos possam ser

usados em vários locais ao mesmo tempo, sendo assim, o padrão flyweight atua de forma independente em cada local.

Utilização• Apropriado quando vários objetos devem ser manipulados, e esses não

suportam dados adicionais. Não existem ponteiros para os métodos do dado, diminuindo o consumo de memória. Em contrapartida são chamadas sub-rotinas diretamente para acessar o dado. Um exemplo de Flyweight é a rede telefônica, onde vários usuários estão conectados, porém quando alguém pega o telefone para discar, a ele não importa quantas pessoas estão conectadas, e sim, o fato de que ele precisar receber um tom de ligação, que ele precisa enviar os dígitos, e completar a ligação.

Page 29: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Flyweight

Page 30: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Façade

Definição• É um objeto que disponibiliza uma interface para uma grande

quantidade de funcionalidades de uma API.

Utilização• O padrão façade define uma interface indefinida de alto nível, para

um subsistema mais fácil de se interagir. Um exemplo é o de um comprador que liga para um número e fala com uma representante de comprador, esse representante age como um façade, providenciando uma interface para o setor de pagamento e para o setor de envio.

Page 31: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Facade

Page 32: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Decorator

Definição• Anexa responsabilidades adicionais a um objeto dinamicamente.• Alternativa flexível as subclasses extendendo sua funcionalidade.• Amplia as funcionalidades através da composição.

Utilização• Imagine que você tem uma árvore. Ai começam a pendurar itens

nessa árvore, como bolas, luzes, e outras coisas, a árvore ainda esta lá inalterada. Porém ela agora é conhecida como árvore de natal, e tem um método adicional, proporcionado pela luz, dentre outros atributos.

Page 33: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Decorator

Page 34: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Padrões Comportamentais

• Ao todo são 11 padrões comportamentais1. Chain of Responsibility.2. Command.3. Interpreter.4. Iterator.5. Mediator.6. Memento.7. Observer.8. State.9. Strategy.10. Template Method.11. Visitor.

Page 35: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Chain of Responsability

Definição• Representa o encadeamento de objetos receptores para o

processamento de uma sério de solicitações diferentes.• Esses receptores passam a solicitação ao longo da cadeia até que um

ou vários objetos a tratem.

Utilização• Imagine um sistema de coleta de moedas de um banco, esse sistema

funciona como uma cadeia, ou seja, ao invés de ter vários slots de moeda atrelados a um identificador, o padrão Chain utiliza apenas um slot, quando a moeda é jogada no sistema, mecanismos a identificam e encaminham para o receptor apropriado.

Page 36: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Chain of Responsability

Page 37: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Command

Definição• Encapsula uma solicitação como um objeto. Desta forma permite que

clientes realizem diferentes solicitações.• Enfileira ou faz o registro de solicitações e suporta operações que

podem ser desfeitas.

Utilização• Um exemplo bem simples da utilização do Command, é quando você

vai ao restaurante, ai o garçom pega seu pedido (command) e o encapsula num papel, ai ele coloca esse papel numa fila de espera. Você pode fazer novos pedidos (command) a qualquer momento.

Page 38: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Command

Page 39: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Interpreter

Definição• Um padrão interpreter define a linguagem, assim como

representações para gramáticas e abstrações para análises sintáticas.

Utilização• Os músicos são um exemplo de interpreter, o tempo e a note de uma

música podem ser anotados em uma linguagem de notas, e posteriormente em linguagem de música como mostra o exemplo a a seguir.

Page 40: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Interpreter

Page 41: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Iterator

Definição• permite a iteração, e um modo de acesso a elementos de um

agregado de objetos, sequencialmente, sem exposição de estruturas internas.

Utilização• Um Exemplo simples de iterator, é uma televisão, onde o usuário,

passa pelos canais, sendo que para este usuário o número do canal não é importante e sim sua programação, logo, o usuário interage com o controle, que por sua vez interage com a televisão, dessa forma comprovando o agregado de objetos sequenciais.

Page 42: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Iterator

Page 43: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Mediator

Definição• É um padrão que desacopla e gerencia as colaborações entre um

grupo de objetos.• Define um objeto que encapsula as interações entre esse grupo.

Utilização• Esse padrão encaixa perfeitamente em um aeroporto, como um

controlador de voo, por exemplo, ao invés dos aviões conversarem entre si um a um, eles intermediam essa ’conversa’ com uma torre de controle, ou seja, todos os aviões conversam com a torre de controle, e os aviões não conversam entre si.

Page 44: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Mediator

Page 45: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Memento

Definição• armazenar o estado interno de um objeto em um determinado

momento, para que seja possível retorná-lo a este estado, caso necessário.

Utilização• Serve para você manter o estado de um objeto, como um parâmetro.

Exemplo você pretende trocar os freios de seu carro em casa, remove o pneu dos dois lados, ai você mantém um dos freios intactos, a fim de, usar como parâmetro na remontagem do freio.

Page 46: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Memento

Page 47: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Observer

Definição• Relação um para todos, dessa forma quando este um altera seu

status, todos atualizam automaticamente.

Utilização• Exemplos de leilão, onde você tem um auditor que define um preço e

os compradores, que levantam as placas para confirmar sua oferta, dessa forma, o auditor aumenta o valor das ofertas, então novamente os compradores reagem a mais está ação.

Page 48: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Observer

Page 49: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

State

Definição• É usado para permitir que um objeto altere seu comportamento

quando um estado muda.• Usa o objeto como um estado.

Utilização• A utilização deste padrão aparece em máquinas de venda

(amendoins, refrigerantes etc..) essas maquinas tem estados baseados no que elas tem a disposição e na quantidade de dinheiro colocado. Quando o dinheiro é depositado, uma seleção é feita, a máquina por sua vez, ira atuar de duas formas, entregar o produto sem troco, ou entregar o produto com troco, ou não entregar o produto (dinheiro depositado insuficiente), ou não entregar o produto e devolver o dinheiro (devido a falta do produto).

Page 50: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

State

Page 51: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Strategy

Definição• Definir uma família de algoritmos e encapsula cada algoritmo como

uma classe, permitindo assim que elas possam ser trocados entre si. Este padrão permite que o algoritmo possa variar independentemente dos clientes que o utilizam.

Utilização• Pattern bem representado por meios de se chegar a um aeroporto, o

viajante poderá escolher entre diversas opções, como ir com seu próprio carro, ônibus, limusine, entre diversos tipos de locomoção, todos eles vão levar o viajante para o aeroporto, e eles podem ser usados alternadamente.

Page 52: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Strategy

Page 53: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Template Method

Definição• Define o esqueleto de um algoritmo numa operação, passando alguns

passos para as subclasses.• A classe base declara o placeholder e as subclasses preenchem esses

placeholders.• Permite que a subclasse mude certos passos sem mudar a estrutura do

algoritmo.

Utilização• A seguir esta sendo usado um exemplo de planta de casa, onde várias

outras casas herdam de um template de casa, elas podem adicionar outras coisas, mudar a cor etc, porém sem alterar o template original da casa, removendo ou alterando algo.

Page 54: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Template Method

Page 55: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Visitor

Definição• Realiza uma operação sobre elementos da estrutura de um objeto.

Permite que se crie uma nova operação sem alterar a classe dos elementos sobre os quais ela atua

• habilidade de adicionar novas funcionalidades a estruturas de um objeto pré-existente sem a necessidade de modificá-las.

Utilização• Aplica-se para problemas semelhantes ao de uma empresa de taxi,

quando um cliente liga para a empresa de taxi solicitando o taxi, o cliente esta aceitando um visitor, quando o cliente entra no taxi, ele não esta mais em controle de sua movimentação e sim o Visitor.

Page 56: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Visitor

Page 57: Design pattern

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Conclusão

• Espero que esta abordagem, sobre design patterns tenha sido útil, de fácil compreensão, já que o intuito para este momento não era o de aprofundar-se sobre cada Design pattern.

• Creio que os objetivos deste material, foram satisfatórios, abrindo um leque de opções a serem estudas de maneira mais específica.

• Em breve estarei pesquisando mais sobre cada design, me aprofundando mais em suas Utilizações. Fazendo uma apresentação mais específica sobre cada um deles.