1. 2 detalhamento dos padrões - estrutura padrão bridge possui estrutura similar ao padrão...

141
1

Upload: raphael-ribas-rodrigues

Post on 07-Apr-2016

221 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

1

Page 2: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

2

Detalhamento dos Padrões - EstruturaPadrão Bridge Possui estrutura similar ao Padrão

Adapter, mas possui outra finalidade: separar a interface de sua implementação para que possam ser alteradas independentemente;

O Adapter serve para alterar a interface de um objeto já existente;

O Bridge tem a função de desacoplar uma abstração de sua implementação;

Page 3: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

3

Detalhamento dos Padrões - EstruturaPadrão Bridge Problema

Quando uma abstração pode ter uma entre várias implementações possíveis, a maneira usual de utilizá-las é através da herança: Classe Abstrata define a interface para

abstração; Subclasses Concretas implementam a classe

abstrata de formas diferentes; Logo, teremos abordagem pouco flexível em

virtude da ligação da herança com a implementação;

Page 4: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

4

Detalhamento dos Padrões - EstruturaPadrão Bridge Problema

Page 5: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

5

Detalhamento dos Padrões - EstruturaPadrão BridgeSolução com Bridge

Page 6: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

6

Detalhamento dos Padrões - EstruturaPadrão BridgeEstrutura

Page 7: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

7

Detalhamento dos Padrões - EstruturaPadrão Bridge Participantes

Abstraction : Define a interface de abstração. Mantém uma referência a um objeto do tipo Implementor.

RefinedAbstraction : Estende a interface definida por Abstração.

Implementor : Define a interface para classes de implementação. Esta não tem a obrigação de corresponder exatamente à interface de abstração. De fato, as duas interfaces podem ser bastante diferentes. Tipicamente, a interface de implementação fornece apenas operações primitivas, cabendo à abstração a responsabilidade de definir operações de alto nível baseadas nestas primitivas.

ConcreteImplementatorA e ConcreteImplementatorB : Implementação concreta da interface definida por Implementor.

Page 8: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

8

Detalhamento dos Padrões - EstruturaPadrão BridgeAplicabilidade Quando for necessário evitar uma ligação

permanente entre a interface e a implementação.

Quando alterações na implementação não puderem afetar clientes.

Quando implementações são compartilhadas entre objetos desconhecidos do cliente.

Page 9: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

9

Detalhamento dos Padrões - EstruturaPadrão BridgeConseqüências Detalhes de implementação totalmente

inacessíveis aos clientes. Eliminação de dependências em tempo de

compilação das implementações. Implementação de abstração pode ser

configurada em tempo de execução.

Page 10: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

10

Detalhamento dos Padrões - EstruturaPadrão BridgeCódigo Fonte – Exemplo...

Page 11: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

11

Detalhamento dos Padrões - EstruturaPadrão DecoratorClassificação: Padrão de ObjetoAnexar responsabilidades adicionais a

um objeto dinamicamente.Os Decorators oferecem uma

alternativa flexível ao uso de herança para estender uma funcionalidade;

Page 12: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

12

Detalhamento dos PadrõesPadrão DecoratorProblema A primeira idéia é criar subclasses que

implementem as funcionalidades desejadasListaSincronizadaListaComEventosListaNaoModificavel

Page 13: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

13

Detalhamento dos PadrõesPadrão DecoratorProblema Mas e se desejarmos mais de uma

funcionalidade ao mesmo tempo? Nesse caso teremos uma explosão de

classes. As novas classes (além das 3 anteriores) poderiam ser chamadas: ListaNaoModificavelSincronizada ListaComEventosNaoModificavel ListaComEventosSincronizada ListaComEventosNaoModificavelSincronizada

Page 14: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

14

Detalhamento dos PadrõesPadrão DecoratorProblemaEssa solução tem alguns problemas:

Torna a hierarquia bastante complexa;

O número de classes cresce 2^n – 1, onde n são as funcionalidades;Isso significa que com apenas 5 funcionalidade, teríamos 31 classes de Lista.

Page 15: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

15

Detalhamento dos Padrões - EstruturaPadrão Decorator Problema

Necessidade de adicionar responsabilidades aos objetos, com a impossibilidade de criar extensões das subclasses;

Às vezes é até possível realizar um grande número de extensões independentes, mas podem causar uma explosão de subclasses para suportar todas as combinações;

Page 16: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

16

Detalhamento dos PadrõesPadrão DecoratorObjetivo Adicionar responsabilidades a um objeto

Dinamicamente; Decoradores oferecem uma alternativa à

herança para estender funcionalidade

Page 17: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

17

Detalhamento dos PadrõesPadrão DecoratorMotivação

Algumas vezes queremos adicionar responsabilidades a objetos individuais e não a uma classe inteira;

As vezes as responsabilidades mudam ou aumentam com o tempo e isso requer uma solução flexível.

Page 18: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

18

Detalhamento dos Padrões - EstruturaPadrão Decorator

Page 19: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

19

Detalhamento dos Padrões - EstruturaPadrão Decorator Participantes

Componente: define a interface para objetos que podem ter responsabilidades acrescentadas a eles dinamicamente;

ConcreteComponente: define um objeto para o qual responsabilidades adicionais podem ser atribuídas;

Decorator: mantém uma referência para um objeto Componente e define uma interface que segue a interface Componente;

ConcreteDecoratorN: acrescenta responsabilidades ao componente;

Page 20: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

20

Detalhamento dos Padrões - EstruturaPadrão Decorator

Page 21: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

21

Detalhamento dos Padrões - EstruturaPadrão Decorator

Page 22: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

22

Detalhamento dos Padrões - EstruturaPadrão DecoratorAplicabilidade

Utilizado para adicionar responsabilidades a objetos individuais de forma dinâmica e transparente, isto é, sem afetar outros objetos, da mesma forma, quando se quer retirar responsabilidades;

Quando a utilização de heranças para a implementação do mesmo afetará a flexibilidade do sistema;

Page 23: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

23

Detalhamento dos Padrões - EstruturaPadrão DecoratorConseqüências

Fornece uma flexibilidade maior do que a herança estática.

Evita a necessidade de colocar classes sobrecarregadas de recursos em uma posição mais alta da hierarquia.

Simplifica a codificação permitindo que você desenvolva uma série de classes com funcionalidades específicas, em vez de codificar todo o comportamento no objeto.

Aprimora a extensibilidade do objeto, pois as alterações são feitas codificando novas classes.

Page 24: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

24

Detalhamento dos Padrões - EstruturaPadrão Decorator Código Fonte – Exemplo ...

Page 25: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

25

Detalhamento dos Padrões - ComportamentaisPadrão InterpreterClassificação: Padrão de Classe Dada uma linguagem, define uma

representação para sua gramática, juntamente com um interpretador que usa a representação para interpretar sentenças na linguagem;

A estrutura do padrão deve definir a gramática da linguagem e sua implementação deve permitir a interpretação das sentenças que respeitam a gramática definida;

Page 26: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

26

Detalhamento dos Padrões - ComportamentaisPadrão InterpreterPode ser utilizado para representar e

resolver problemas que possam ser expressos sob a forma de uma linguagem formal simples;

Page 27: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

27

Detalhamento dos Padrões - ComportamentaisPadrão InterpreterSolução

Símbolos Terminais

Símbolo Não

Terminal

Page 28: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

28

Detalhamento dos Padrões - ComportamentaisPadrão Interpreter ExpressãoAbstrata: fornece a interface comum a

todos os nós da árvore; Expressão Completa: implementa a operação de

interpretação para os símbolos terminais; Expressão Incompleta: implementa a operação de

interpretação para os símbolos não terminais; A operação de interpretação é chamada

recursivamente e a base da recursão é um símbolo terminal;

Contexto: contém informações globais ao interpretador, tal como o resultado das operações realizadas;

Cliente: constrói a árvore sintática abstrata a partir de instâncias de nós terminais e não-terminais;

Page 29: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

29

Detalhamento dos Padrões - ComportamentaisPadrão Interpreter

Resultado

Page 30: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

30

Detalhamento dos Padrões - ComportamentaisPadrão InterpreterAplicabilidade

Quando existir uma linguagem para interpretar;

Gramáticas simples. Em gramáticas complexas use um parser;

Page 31: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

31

Detalhamento dos Padrões - ComportamentaisPadrão InterpreterConseqüências

Facilidade em modificar e estender a linguagem;

Gramáticas complexas são difíceis de manter;

Adiciona novas formas de interpretar as expressões;

Page 32: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

32

Detalhamento dos Padrões - ComportamentaisPadrão Interpreter

Page 33: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

33

Detalhamento dos Padrões - ComportamentaisPadrão Interpreter

Page 34: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

34

Detalhamento dos Padrões - ComportamentaisPadrão Interpreter

Page 35: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

35

Detalhamento dos Padrões - ComportamentaisPadrão Interpreter

Page 36: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

36

Detalhamento dos Padrões - ComportamentaisPadrão Template MethodClassificação: Padrão de Classe Define o esqueleto de um algoritmo numa

operação, deixando que subclasses completem algumas das etapas;

Permite que subclasses redefinem determinadas etapas de um algoritmo sem alterar a estrutura do algoritmo;

Subclasses fazem override das operações para prover um comportamento concreto;

Este padrão é a base para a construção de frameworks.

Page 37: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

37

Detalhamento dos Padrões - ComportamentaisPadrão Template MethodEstrutura

Page 38: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

38

Detalhamento dos Padrões - ComportamentaisPadrão Template MethodParticipantes

ClasseAbstrata: Define operações abstratas que as subclasses concretas definem para implementar certas etapas do algoritmo; Implementa um Template Method definindo o esqueleto de um algoritmo: O Template Method chama várias operações, entre as

quais as operações abstratas da classe;ClasseConcreta: Implementa as

operações abstratas para desempenhar as etapas do algoritmo que tenham comportamento específico a esta subclasse

Page 39: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

39

Detalhamento dos Padrões - ComportamentaisPadrão Template MethodAplicabilidade Quando a estrutura fixa de um algoritmo puder ser definida pela

superclasse deixando certas partes para serem preenchidos por implementações que podem variar;

Para implementar partes que não variam de um algoritmo uma única vez e deixar subclasses implementarem o comportamento variável;

Quando um comportamento comum entre as subclasses deveria ser decomposto e localizado numa classe comum para evitar duplicação É um passo freqüente de "refactoring" de código

Primeiro identifique as diferenças; Coloque as diferenças em novos métodos; Substitua o código das diferenças por uma chamada a um dos

novos métodos;

Page 40: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

40

Detalhamento dos Padrões - ComportamentaisPadrão Template MethodConseqüências Template Methods constituem uma das

técnicas básicas de reuso de código; São particularmente importantes em

frameworks e bibliotecas de classes para o fatoramento de comportamento comum;

Deve explicitamente dizer quais os métodos que DEVEM ser sobrescritos e os que PODEM ser sobrescritos;

Page 41: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

41

Detalhamento dos Padrões - ComportamentaisPadrão Template MethodExemplo – Código Fonte JAVA...

Page 42: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

42

Detalhamento dos Padrões - Comportamentais Padrão Chain of Responsability Classificação: Padrão de Objeto Permite que uma requisição passe por

uma corrente de objetos até encontrar um que a processe;

Evita acoplar o remetente de um requisição ao seu destinatário ao dar a mais de um objeto a chance de servir a requisição. Compõe os objetos em cascata e passa a requisição pela corrente até que um objeto a sirva;

Page 43: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

43

Detalhamento dos Padrões - ComportamentaisPadrão Chain of ResponsabilityMotivação: Uma máquina de refrigerantes necessita

armazenar em locais diferentes cada tipo de moeda possível.

Pode ser útil que um objeto receba a moeda, mas se ele não for capaz de armazenar no local correto, passe-o para outro objeto buscando a colocação correta da moeda.

Isso é um exemplo de tentativa de desacoplamento, já que se alguém não pode resolver determinada tarefa ocorre uma delegação da responsabilidade para outro objeto de forma totalmente transparente.

Page 44: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

44

Detalhamento dos Padrões - ComportamentaisPadrão Chain of Responsability

• Permitir que vários objetos possam servir a uma requisição ou repassá-la;• Permitir divisão de responsabilidade de forma transparente;

[Argonavis]

Page 45: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

45

Detalhamento dos Padrões - ComportamentaisPadrão Chain of Responsability

[Argonavis]

Page 46: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

46

Detalhamento dos Padrões - ComportamentaisPadrão Chain of ResponsabilityProcessador: define a interface

para as solicitações; implementa a referência ao sucessor;

ProcessadorConcreto: trata as solicitações pelas quais ele é responsável; pode acessar seu sucessor, caso não consiga processar a informação;

Cliente: inicia a solicitação para um objeto do tipo ProcessadorConcreto;

[Argonavis]

Page 47: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

47

Detalhamento dos Padrões - Comportamentais

Page 48: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

48

Detalhamento dos Padrões - ComportamentaisPadrão Chain of Responsability

[Argonavis]

Page 49: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

49

Detalhamento dos Padrões - ComportamentaisPadrão Chain of ResponsabilityExemplo:

Mecanismo de Exceção em Java;Quando ocorre um erro em uma classe

a máquina virtual verifica se a classe possui o tratamento de exceção;Caso não possua, a classe pode indicar que a exceção pode ser tratada pela classe que a chamou;

A cadeia é construída em tempo de execução;

[Argonavis]

Page 50: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

50

Detalhamento dos Padrões - ComportamentaisPadrão Chain of Responsability

Aplicabilidade: Mais de um objeto pode tratar de um pedido, e o

tratador de pedidos (processador) não é conhecido a priori. O processador deve ser buscado automaticamente de forma ascendente;

Você quer emitir um pedido para um de vários objetos sem especificar o recebedor de forma explícita;

O conjunto de objetos que pode tratar de um pedido deve ser configurado dinamicamente.

Page 51: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

51

Detalhamento dos Padrões - ComportamentaisPadrão Chain of ResponsabilityConseqüências: Acoplamento reduzido:

Evita que um objeto (client) seja forçado a tomar conhecimento do outro (processador);

O objeto só precisa saber que o pedido foi tratado apropriadamente;

A estrutura da cadeia não precisa ser conhecida; Flexibilidade na atribuição de responsabilidades

para objetos (subclasses, alteração dinâmica da cadeia);

Sucesso no tratamento do pedido não é garantido.

Page 52: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

52

Detalhamento dos Padrões - ComportamentaisPadrão Chain of Responsability

Código Fonte – Exemplo ...

[Argonavis]

Page 53: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

53

Detalhamento dos Padrões - ComportamentaisPadrão CommandClassificação: Padrão de ObjetoEncapsular uma requisição como

um objeto, permitindo que clientes parametrizem diferentes requisições;

[Argonavis]

Page 54: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

54

Detalhamento dos Padrões - ComportamentaisPadrão CommandUma aplicação complexa pode

exigir a realização de diversos comandos diferentes;

Algumas vezes é necessário a seleção de objetos sem saber nada sobre a operação que está sendo executada;

[Argonavis]

Page 55: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

55

Detalhamento dos Padrões - ComportamentaisPadrão CommandMotivação: Algumas vezes é necessário se fazer uma

solicitação de serviço sem conhecimento algum do tipo de operação que está sendo requerida.

Na construção de um menu, por exemplo. O padrão Command permite que um menu

possa solicitar execução de pedidos sem conhecer a natureza destes pedidos,pois o próprio objeto encapsula os detalhes da execução do pedido.

Page 56: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

56

Detalhamento dos Padrões - ComportamentaisPadrão Command

[Argonavis]

Page 57: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

57

Detalhamento dos Padrões - ComportamentaisPadrão Command

Comando: define a interface para execução de uma operação;

ComandoConcreto: define um vínculo entre o objeto Receptor e a ação; implementa o executar() a partir das invocações das correspondentes operações do receptor;

Cliente: cria um objeto do tipo ComandoConcreto;

Executor: solicita ao Comando a execução da solicitação;

Receptor: sabe como executar as operações associadas a uma solicitação; qualquer classe pode funcionar como receptor;

Page 58: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

58

Detalhamento dos Padrões - ComportamentaisPadrão Command

aReceptor aCliente aComandoConcreto aComando Executor

Page 59: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

59

Detalhamento dos Padrões - ComportamentaisPadrão Command

Page 60: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

60

Detalhamento dos Padrões - ComportamentaisPadrão CommandAplicabilidade Parametrizar objetos com uma ação a executar. Especificar, armazenar e executar pedidos em momentos

diferentes: Commands podem ser transferidos entre espaços de

endereçamento e máquinas. Suportar undo: a operação execute pode armazenar o

estado para reverter os efeitos do próprio comando. Suportar ‘logs’ de modificações: através da inclusão de

undoable Commands em meio persistente. Estruturar um sistema em torno de operações de alto

nível: constituídas internamente por várias operações primitivas. Facilidades para extensão do sistema.

Page 61: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

61

Detalhamento dos Padrões - ComportamentaisPadrão CommandConseqüências Command desacopla o objeto que invoca a

operação daquele que sabe como executá-la. Commands são objetos de primeira classe,

ou seja, podem ser manipulados e estendidos como qualquer outro objeto.

É fácil acrescentar novos Commands porque não é preciso mudar classes existentes.

Page 62: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

62

Detalhamento dos Padrões - ComportamentaisPadrão CommandExemplo – Código Java ...

Page 63: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

63

Detalhamento dos Padrões - ComportamentaisPadrão IteratorClassificação: Padrão de ObjetoFornece um meio de acessar,

sequencialmente, os elementos, sem expor sua representação interna;

Page 64: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

64

Detalhamento dos Padrões - ComportamentaisPadrão IteratorMotivação: Objetos agregados como listas, tabelas hash,

dicionários, por exemplo, devem permitir que se acessem seus elementos de modo abstrato, sem que a representação interna de sua estrutura seja exposta;

Eventualmente também pode se desejar fazer duas travessias concorrentes sobre um mesmo objeto agregado.

O padrão Iterator permite a criação de tais facilidades.

Page 65: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

65

Detalhamento dos Padrões - ComportamentaisPadrão Iterator

[Argonavis]

Page 66: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

66

Detalhamento dos Padrões - ComportamentaisPadrão IteratorEstrutura

Page 67: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

67

Detalhamento dos Padrões - ComportamentaisPadrão Iterator Iterator:define a interface para acessar

e percorrer os elementos;ConcreteIterator (ListIterator,

SkipListIterator): implementa interface Iterator; mantém o controle na posição corrente no percurso do agregado;

Aggregate (AbstractList): define uma interface para o objeto iterator;

ConcreteAgregate (List, SkipList): implementa a interface de criação do iterador para retornar uma instância do ConcreteIterator;

Page 68: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

68

Detalhamento dos Padrões - ComportamentaisPadrão IteratorAplicabilidade

Se desejar acessar o conteúdo de um objeto agregado sem expor sua representação interna;

Se desejar suportar múltiplas formas de percorrer um objeto agregado;

Se quiser prover uma interface uniforme para percorrer diferentes estruturas agregadas. Suportar iteração polimórfica.

Page 69: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

69

Detalhamento dos Padrões - ComportamentaisPadrão IteratorConseqüências

Suporte a variações na maneira de se atravessar um objeto agregado (pre-order, pós-ordem, em-ordem);

Simplificação da interface do agregado;

Mais de um cursor pendente sobre um agregado.

Page 70: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

70

Detalhamento dos Padrões - ComportamentaisPadrão IteratorExemplo

Page 71: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

71

Detalhamento dos Padrões - ComportamentaisPadrão IteratorCódigo Fonte – Exemplo....

Cast de todos os Objetos Retornados

Page 72: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

72

Detalhamento dos Padrões - ComportamentaisPadrão IteratorCódigo Fonte – Exemplo...

Page 73: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

73

Detalhamento dos Padrões - ComportamentaisPadrão MediatorClassificação: Padrão de ObjetoPermite encapsular a forma como

os objetos interagem;

Page 74: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

74

Detalhamento dos Padrões - ComportamentaisPadrão MediatorProblema: Distribuição de comportamentos entre

diversas classes, com a intenção de melhorar a reusabilidade desses pequenos trechos de código.

Com muitas classes, a complexidade dos relacionamentos aumenta, ou seja, o acoplamento entre objetos fica forte.

Se houver necessidade de alteração de um comportamento, é necessário alterar várias classes.

Page 75: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

75

Detalhamento dos Padrões - ComportamentaisPadrão MediatorProblema:

Como permitir que um grupo de objetos se comunique entre si sem que haja acoplamento entre eles?

Como remover o forte acoplamento presente em relacionamentos muitos para muitos?

Como permitir que novos participantes sejam ligados ao grupo facilmente?

Page 76: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

76

Detalhamento dos Padrões - ComportamentaisPadrão MediatorSolução: Um objeto Mediador deve encapsular toda a

comunicação entre um grupo de objetos: Cada objeto participante conhece o mediador, mas

ignora a existência dos outros objetos; O mediador conhece cada um dos objetos

participantes: A interface do Mediador é usada pelos

colaboradores para iniciar a comunicação e receber notificações: O mediador recebe requisições dos remetentes; O mediador repassa as requisições aos destinatários; Toda a política de comunicação é determinada pelo

mediador (geralmente através de uma implementação concreta do mediador).

[Argonavis]

Page 77: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

77

Detalhamento dos Padrões - ComportamentaisPadrão MediatorSolução:

Introduzir um Mediator; Os objetos podem se comunicar sem se

conhecer; O Mediator centraliza o comportamento;

[Argonavis]

Page 78: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

78

Detalhamento dos Padrões - ComportamentaisPadrão MediatorEstrutura:

[Argonavis]

Page 79: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

79

Detalhamento dos Padrões - ComportamentaisPadrão Mediator Mediator: define uma interface para a

comunicação com os objetos Colleague; ConcreteMediator:implementa

comportamento cooperativo pela coordenação de objetos Colleague;conhece e mantém seus colleagues;

Colleague: cada casse Colleague conhece seu objeto Mediator; Cada Colleague se comunica com seu mediador sempre que o mesmo se apresentar em uma situação na qual seria necessário se comunicar com outro Colleague;

Page 80: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

80

Detalhamento dos Padrões - ComportamentaisPadrão MediatorAplicabilidade:

O reuso for difícil, uma vez que o objeto se comunica ou referencia muitos outros; O mediator simplifica o relacionamento entre os objetos;

Quando o comportamento distribuído entre diversas classes deve ser personalizado sem excesso de subclasses.

Page 81: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

81

Detalhamento dos Padrões - ComportamentaisPadrão MediatorConseqüências: Limita hierarquia de subclasses apenas à

classe Mediator; Promove desacoplamento entre Colleagues; Simplifica protocolos entre objetos: muitos-

para-muitos substituido com um-para-muitos;

Abstrai como os objetos cooperam (ajuda a entender o funcionamento dos objetos);

Centraliza comportamento.

Page 82: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

82

Detalhamento dos Padrões - ComportamentaisPadrão Mediator Código Fonte – Exemplo ...

Page 83: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

83

Detalhamento dos Padrões - ComportamentaisExercícios

Page 84: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

84

Detalhamento dos Padrões - ComportamentaisPadrão Memento Classificação: Padrão de Objeto Sem violar o encapsulamento, capturar e

deixar disponível o estado interno de um objeto para que o objeto possa ter esse estado restaurado posteriormente;

Page 85: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

85

Detalhamento dos Padrões - ComportamentaisPadrão Memento Problema:

É preciso guardar informações sobre um objeto suficientes para desfazer uma operação, mas essas informações não devem ser públicas;

[Argonavis]

Page 86: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

86

Detalhamento dos Padrões - ComportamentaisPadrão Memento Solução:

Um memento é um pequeno repositório para guardar estado dos objetos Pode-se usar outro objeto, um string, um arquivo

Memento guarda um snapshot no estado interno de outro objeto - a Fonte Um mecanismo de Undo irá requisitar um

memento da fonte quando ele necessitar verificar o estado desse objeto;

A fonte reinicializa o memento com informações que caracterizam seu estado atual;

Só a fonte tem permissão para recuperar informações do memento;

Page 87: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

87

Detalhamento dos Padrões - ComportamentaisPadrão Memento Estrutura:

Guarda os mementos da Fonte

Page 88: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

88

Detalhamento dos Padrões - ComportamentaisPadrão

Memento Estrutura

(Exemplo):

Fonte

Zelador

Page 89: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

89

Detalhamento dos Padrões - ComportamentaisPadrão Memento Dinâmica:

Page 90: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

90

Detalhamento dos Padrões - ComportamentaisPadrão Memento

Page 91: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

91

Detalhamento dos Padrões - ComportamentaisPadrão Memento

Page 92: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

92

Detalhamento dos Padrões - Comportamentais Padrão Memento Exemplo:

Implementar Memento em Java pode ser realizado aplicando o encapsulamento de pacotes;

Pacotes pequenos contendo apenas as classes que precisam compartilhar estado;

Page 93: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

93

Detalhamento dos Padrões - ComportamentaisPadrão Memento Aplicabilidade:Um snapshot do (parte do) estado

de um objeto precisa ser armazenada para que ele possa ser restaurado ao seu estado original posteriormente;

Uma interface direta para se obter esse estado iria expor detalhes de implementação e quebrar o encapsulamento do objeto;

Page 94: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

94

Detalhamento dos Padrões - ComportamentaisPadrão Memento Conseqüências:

Vantagens: O estado do Fonte é guardado fora dele sem a

perda do encapsulamento. O Fonte é simplificado por não ter a

responsabilidade de gerenciamento de estados anteriores.

Desvantagens: O uso de mementos pode ser uma solução cara

(muita memória), dependendo do tamanho e do número de estados a serem salvos.

O Zelador ganha a responsabilidade de deleção dos mementos armazenados.

Page 95: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

95

Detalhamento dos Padrões - ComportamentaisPadrão Observer Classificação: Padrão de Objeto Define uma dependência 1-para-n entres

objetos, de modo que quando o estado de um objeto é alterado todos seus dependentes são notificados e atualizados automaticamente.

Page 96: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

96

Detalhamento dos Padrões - ComportamentaisPadrão ObserverMotivação: Suponha que você deseja fornecer várias visões

distintas de um mesmo objeto que funciona como um repositório de dados;

Cada visão é criada por um objeto observador independente;

Caso cada observador seja diretamente conectado ao repositório, isto criará uma dependência do repositório com relação aos diferentes observadores, o que lhe reduzirá a reusabilidade e flexibilidade;

O padrão Observer descreve uma forma de manutenção destes relacionamentos de modo que observadores e repositórios sejam facilmente substituídos;

Page 97: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

97

Detalhamento dos Padrões - ComportamentaisPadrão Observer

Page 98: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

98

Detalhamento dos Padrões - ComportamentaisPadrão ObserverEstrutura:

Solicita o cadastroCadastra e Remove

os Observadores

Page 99: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

99

Detalhamento dos Padrões - Comportamentais Padrão Observer Participantes: Sujeito

Conhece seu Observador. Qualquer número de objetos Observadores podem observar um Sujeito; Provê uma interface para acoplar e desacoplar objetos Observadores;

SujeitoConcreto Guarda o estado de interesse para ObservadorConcreto (isto

é observers); Envia uma notificação para seu(s) Observadores(s) quando

seu estado muda; Observador

Define uma interface de atualização para objetos que devem ser notificados sobre mudanças em um Sujeito;

ObservadorConcreto Mantém uma referência para um objeto SujeitoConcreto;

Guarda o estado que deve ficar consistente com o de Sujeito; Implementa o Observador atualizando a interface para manter seu estado consistente com o de Sujeito;

Page 100: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

100

Detalhamento dos Padrões - Comportamentais

Page 101: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

101

Detalhamento dos Padrões - ComportamentaisPadrão ObserverAplicabilidade: Quando uma abstração apresenta dois aspectos,

um dependente do outro. Encapsulando estes aspectos em objetos separados permite que você os varie e reutilize de forma independente;

Quando uma modificação em um objeto requer modificação em outros, e você não sabe (em tempo de programação) quantos objetos precisam ser modificados;

Quando um objeto deve ser apto a notificar outros objetos sem saber quem são estes objetos. Em outras palavras, quando você os quer fracamente acoplados;

Page 102: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

102

Detalhamento dos Padrões - ComportamentaisPadrão ObserverConseqüências:Variação independente de observáveis e

observadores;É fácil adicionar observadores sem

modificar o observável ou os outros observadores;

Suporte a comunicação broadcast;Atualizações inesperadas (caso o

processo de notificação seja simplificado);

Page 103: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

103

Detalhamento dos Padrões - ComportamentaisPadrão ObserverExemplo – Código Java...:

Page 104: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

104

Detalhamento dos Padrões - ComportamentaisPadrão State Classificação: Padrão de Objeto Permitir a um objeto alterar o seu

comportamento quanto o seu estado interno mudar;

O objeto irá aparentar mudar de classe;

Page 105: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

105

Detalhamento dos Padrões - ComportamentaisPadrão State Motivação: Usar objetos para

representar estados e polimorfismo para tornar transparente a execução de tarefas dependentes de estado.

Page 106: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

106

Detalhamento dos Padrões - ComportamentaisPadrão State Estrutura:

Page 107: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

107

Detalhamento dos Padrões - ComportamentaisPadrão State Participantes:

ContextDefine a interface de interesse para os Clientes;

StateDefine uma interface para encapsulamentos de estados associados ao estado de Context;

ConcreteStateImplementa um comportamento associado com um estado de context;

Page 108: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

108

Detalhamento dos Padrões - ComportamentaisPadrão State Problema: Projetar um

computador de bordo. Um objeto, mostrador, com vários

comportamentos: Termômetro, Marcador de distância, Alarme de

Combustível Baixo, Indicador de velocidade média, Indicador de Consumo Médio.

O comportamento do mostrador depende de seu estado determinado por: Acionamento das chaves do painel Andamento do carro (combustível)

Page 109: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

109

Detalhamento dos Padrões - ComportamentaisPadrão State Porque usar State:

Objeto (mostrador) tem estados e comportamentos;

Mostrador muda seu estado com base em eventos.

Os estados são claramente identificáveis O comportamento do objeto Mostrador é

dependente de seu estado; Estensibilidade é importante; Facilita separar a determinação do estado do

Mostrador do correspondente comportamento.

Page 110: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

110

Detalhamento dos Padrões - ComportamentaisPadrão State Programa:

Page 111: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

111

Padrão State

Detalhamento dos Padrões - Comportamentais

Page 112: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

112

Detalhamento dos Padrões - ComportamentaisPadrão State Aplicabilidade:O Comportamento do objeto

depende do seu estado e precisa ser alterado em tempo de execução em função desse estado;

Operações que tenham muito código condicional que dependa do estado do objeto;

Page 113: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

113

Detalhamento dos Padrões - ComportamentaisPadrão StateConseqüências:

Localização de comportamento específico em um objeto associado a um estado. Facilidade de extensão horizontal;

Transições de estado realizadas de forma explícita.

Page 114: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

114

Detalhamento dos Padrões - ComportamentaisPadrão StateCódigo Fonte – Java...:

Page 115: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

115

Detalhamento dos Padrões - ComportamentaisPadrão Strategy Classificação: Padrão de ObjetoDefine uma família de algoritmos,

encapsular cada um, e fazê-los intercambiáveis;

Strategy permite que algoritmos variem independentemente entre clientes que os utilizam;

Page 116: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

116

Detalhamento dos Padrões - ComportamentaisPadrão StrategyMotivação:

Operações que são comuns a uma série de objetos de classes diferentes, com pequenas variações de comportamento.

Codificar tais métodos nas próprias classes, se tornariam mais complexas e difíceis de manter, além do inconveniente de termos que repetir o mesmo código várias vezes;

A classe no padrão Strategy torna-se uma espécie de agente capaz de selecionar o algoritmo para cada uso solicitados pelas classes clientes.

Page 117: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

117

Detalhamento dos Padrões - ComportamentaisPadrão

StrategyProblema:

[Argonavis]

Page 118: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

118

Detalhamento dos Padrões - ComportamentaisPadrão StrategyEstrutura:

Page 119: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

119

Detalhamento dos Padrões - ComportamentaisPadrão StrategyParticipantes: Strategy (Compositor)

Define uma interface comum para todos os algoritmos suportados. Context usa esta interface para chamar o algoritmo definido por uma ConcreteStrategy;

ConcreteStrategy (SimpleCompositor, TeXCompositor) Implementa o algoritmo usando a interface de Strategy;

Context (Composition) É configurado com um objeto ConcreteStrategy; Mantém uma referência para um objeto Strategy; Pode definir uma interface que permite a Strategy acessar

seus dados;

Page 120: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

120

Detalhamento dos Padrões - ComportamentaisPadrão StrategyAplicabilidade:Quando uma classe define muitos

comportamentos;Quando classes relacionadas forem

diferentes apenas no seu comportamento;

Quando você precisar de diferentes variações de um mesmo algoritmo.

Page 121: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

121

Detalhamento dos Padrões - ComportamentaisPadrão StrategyConseqüências:

Hierarquias de classes Strategy podem facilitar a criação de comportamentos variados das famílias de algoritmos relacionados.

Strategy é uma alternativa ao uso de subclasses; A classe cliente pode escolher entre as diversas

implementações de comportamento em execução;

Desvantagem: a interface Strategy é compartilhada por todas as ConcreteStrategy fazendo com que implementações simples precisam declarar e receber parâmetros que não precisem.

Page 122: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

122

Detalhamento dos Padrões - ComportamentaisPadrão StrategyCódigo Fonte – Java...:

Page 123: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

123

Detalhamento dos Padrões - ComportamentaisPadrão Visitor Classificação:Padrão de Objeto Permite a definição de uma nova operação

sem alterar as classes dos elementos nos quais a operação atua;

As classes que definem a estrutura de objetos raramente mudam, mas a adição de novas operações é freqüente: Se as operações fossem colocadas na classes da

estrutura, a mudança seria mais complexa; Visitor permite agrupar operações relacionadas

numa mesma classe;

Page 124: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

124

Detalhamento dos Padrões - ComportamentaisPadrão Visitor Problema:

Page 125: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

125

Detalhamento dos Padrões - ComportamentaisPadrão Visitor Quando Usar: Uma estrutura de objetos contém muitas classes de

objetos com interfaces diferentes e você deseja realizar operações nestes objetos que dependem das classes concretas;

Muitas operações distintas e não relacionadas devem ser realizadas numa estrutura de objetos e você quer evitar "poluir" as classes com estas operações;

Visitor permite que você agrupe as operações relacionadas numa mesma classe;

As classes que definem a estrutura de objetos raramente muda mas a adição de novas operações é freqüente;

Se as operações fossem colocadas na classes da estrutura, a mudança seria mais complexa;

Page 126: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

126

Detalhamento dos Padrões - ComportamentaisPadrão Visitor Visitor Permite:

Plugar nova funcionalidade em objetos sem precisar mexer na estrutura de herança;

Agrupar e manter operações relacionadas em uma classe e aplicá-las, quando conveniente, a outras classes (evitar espalhamento e fragmentação de interesses);

Page 127: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

127

Detalhamento dos Padrões - Comportamentais

[Argonavis]

Page 128: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

128

Detalhamento dos Padrões - Comportamentais

Page 129: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

129

Detalhamento dos Padrões - Comportamentais Padrão Visitor Visitante: Declara uma operação de visita

para cada classe de ElementoConcreto na estrutura de objetos.

VisitanteConcreto: Implementa cada operação declarada pelo Visitante. O VisitanteConcreto pode acumular estado

durante a varredura da estrutura de objetos. Elemento: Define uma operação accept() que

recebe um Visitante; ElementoConcreto: Implementa uma

operação accept() que recebe um Visitante e chama a operação de visita apropriada deste Visitante;

EstruturaDeObjetos: coleção de objetos;

Page 130: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

130

Detalhamento dos Padrões - ComportamentaisPadrão Visitor

Page 131: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

131

Detalhamento dos Padrões - ComportamentaisPadrão Visitor

ExemploAntes

Page 132: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

132

Page 133: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

133

Detalhamento dos Padrões - ComportamentaisPadrão

Visitor

Exemplo Depois

Page 134: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

134

Page 135: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

135

Detalhamento dos Padrões - ComportamentaisPadrão Visitor Aplicabilidade Uma estrutura de objetos contém muitas

classes de objetos com interfaces diferentes e você quer fazer operações nestes objetos que dependem das classes concretas;

Muitas operações distintas e não relacionadas devem ser aplicadas a uma estrutura de objetos e você não quer "poluir" as classes dos objetos com tais operações; um visitante permite que você agrupe as operações

relacionadas e as mantenha numa única classe.

Page 136: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

136

Detalhamento dos Padrões - ComportamentaisPadrão VisitorConseqüências Visitor permite adicionar operações com

facilidade basta adicionar um novo visitante um visitante junta operações relacionadas e separa operações não relacionadas;

Evita espalhar operações relacionadas adicionar novos elementos concretos é difícil cada elemento concreto novo significa uma nova operação abstrata no visitante portanto, use o visitante se as operações mudarem com muito mais frequência do que a estrutura de objetos.

Page 137: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

137

Detalhamento dos Padrões - Comportamentais Exemplo – Código Java

Page 138: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

138

Padrões de Projeto - Revisão Padrões de Criação Padrões que têm a ver com a instanciação de objetos

Abstract Factory - Provê uma interface para criar famílias de objetos relacionados ou interdependentes sem especificar suas classes concretas.

Builder - Separa a construção de um objeto complexo da sua representação de forma que o mesmo processo de construção possa criar representações diferentes.

Factory Method - Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar. O padrão Factory Method deixa uma classe repassar a responsabilidade de instanciação para subclasses.

Prototype - Especifica os tipos de objetos a criar usando uma instância-protótipo e cria novos objetos copiando este protótipo.

Singleton - Garante que uma classe tenha uma única instância e provê um ponto global de acesso à instância.

Page 139: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

139

Padrões de Projeto - Revisão Padrões Estruturais Padrões que têm a ver com a composição de classes ou objetos

Adapter - Converte a interface de uma classe em outra interface com a qual os clientes estão prontos para lidar. O padrão Adapter permite que classes trabalhem conjuntamente apesar de interfaces incompatíveis.

Bridge - Desacopla uma abstração de sua implementação de forma que as duas possam mudar independentemente uma da outra.

Composite - Compõe objetos em estruturas de árvore para representar hierarquias Parte-Todo. O padrão Composite permite que clientes tratem objetos individuais e composições de objetos de uniformemente.

Decorator - Adiciona responsabilidades a um objeto dinamicamente. Decoradores provêem uma alternativa flexível à herança para estender funcionalidade.

Façade – Provê uma interface unificada para um conjunto de interfaces num subsistema. O padrão Façade define uma interface de mais alto nível, deixando o subsistema mais fácil de usar.

Flyweight - Usa o compartilhamento para dar suporte eficiente ao uso de um grande número de objetos de granularidade pequena.

Proxy - Provê um objeto procurador para um outro objeto para controlar o acesso a ele.

Page 140: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

140

Padrões de Projeto - Revisão Padrões de Comportamento Padrões que caracterizam formas de interação entre classes e

objetos Chain of Responsibility - Evita acoplar o enviador de um pedido ao

receptor dando oportunidade a vários objetos para tratarem do pedido. Os objetos receptores são encadeados e o pedido é passado na cadeia até que um objeto o trate.

Command - Encapsula um pedido num objeto, permitindo assim parametrizar clientes com pedidos diferentes, enfileirar pedidos, fazer log de pedidos, e dar suporte a operações de undo.

Interpreter - Dada uma linguagem, define uma representação de sua gramática e um interpretador que usa a representação da gramática para interpretar sentenças da linguagem.

Iterator - Provê uma forma de acessar os elementos de uma coleção de objetos seqüencialmente sem expor sua representação subjacente.

Mediator - Define um objeto que encapsule a forma com a qual um conjunto de objetos interagem. O padrão Mediator promove o acoplamento fraco evitando que objetos referenciem uns aos outros explicitamente e permite que suas interações variem independentemente.

Page 141: 1. 2 Detalhamento dos Padrões - Estrutura Padrão Bridge Possui estrutura similar ao Padrão Adapter, mas possui outra finalidade: separar a interface de

141

Padrões de Projeto - Revisão Padrões de Comportamento Padrões que caracterizam formas de interação entre classes e

objetos Memento - Sem violar o princípio de encapsulamento, captura e

externaliza o estado interno de um objeto de forma a poder restaurar o objeto a este estado mais tarde.

Observer - Define uma dependência um-para-muitos entre objetos de forma a avisar e atualizar vários objetos quando o estado de um objeto muda.

State – Permite que um objeto altere seu comportamento quando seu estado interno muda. O objeto estará aparentemente mudando de classe com a mudança de estado.

Strategy - Define uma família de algoritmos, encapsula cada um, e deixe-os intercambiáveis. O padrão Strategy permite que o algoritmo varie independentemente dos clientes que o usam.

Template Method - Define o esqueleto de um algoritmo numa operação, deixando que subclasses completem algumas das etapas. O padrão Template Method permite que subclasses redefinem determinadas etapas de um algoritmo sem alterar a estrutura do algoritmo.

Visitor - Represente uma operação a ser realizada nos elementos de uma estrutura de objetos. O padrão Visitor permite que se defina uma nova operação sem alterar as classes dos elementos nos quais a operação age.