1 / 141

Detalhamento dos Padrões - Estrutura

Detalhamento dos Padrões - Estrutura. Padrã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;

Download Presentation

Detalhamento dos Padrões - Estrutura

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Detalhamento dos Padrões - Estrutura Padrã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;

  2. Detalhamento dos Padrões - Estrutura Padrã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;

  3. Detalhamento dos Padrões - Estrutura Padrão Bridge Problema

  4. Detalhamento dos Padrões - Estrutura Padrão Bridge Solução com Bridge

  5. Detalhamento dos Padrões - Estrutura Padrão Bridge Estrutura

  6. Detalhamento dos Padrões - Estrutura Padrã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. ConcreteImplementatorAe ConcreteImplementatorB: Implementação concreta da interface definida por Implementor.

  7. Detalhamento dos Padrões - Estrutura Padrão Bridge Aplicabilidade 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.

  8. Detalhamento dos Padrões - Estrutura Padrão Bridge Conseqüê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.

  9. Detalhamento dos Padrões - Estrutura Padrão Bridge Código Fonte – Exemplo...

  10. Detalhamento dos Padrões - Estrutura Padrão Decorator Classificação: Padrão de Objeto Anexar responsabilidades adicionais a um objeto dinamicamente. Os Decorators oferecem uma alternativa flexível ao uso de herança para estender uma funcionalidade;

  11. Detalhamento dos Padrões Padrão Decorator Problema A primeira idéia é criar subclasses que implementem as funcionalidades desejadas ListaSincronizada ListaComEventos ListaNaoModificavel

  12. Detalhamento dos Padrões Padrão Decorator Problema 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

  13. Detalhamento dos Padrões Padrão Decorator Problema Essa 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.

  14. Detalhamento dos Padrões - Estrutura Padrã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;

  15. Detalhamento dos Padrões Padrão Decorator Objetivo Adicionar responsabilidades a um objeto Dinamicamente; Decoradores oferecem uma alternativa à herança para estender funcionalidade

  16. Detalhamento dos Padrões Padrão Decorator Motivaçã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.

  17. Detalhamento dos Padrões - Estrutura Padrão Decorator

  18. Detalhamento dos Padrões - Estrutura Padrã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;

  19. Detalhamento dos Padrões - Estrutura Padrão Decorator

  20. Detalhamento dos Padrões - Estrutura Padrão Decorator

  21. Detalhamento dos Padrões - Estrutura Padrão Decorator Aplicabilidade 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;

  22. Detalhamento dos Padrões - Estrutura Padrão Decorator Conseqüê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.

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

  24. Detalhamento dos Padrões - Comportamentais Padrão Interpreter Classificaçã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;

  25. Detalhamento dos Padrões - Comportamentais Padrão Interpreter Pode ser utilizado para representar e resolver problemas que possam ser expressos sob a forma de uma linguagem formal simples;

  26. Detalhamento dos Padrões - Comportamentais Padrão Interpreter Solução Símbolos Terminais Símbolo Não Terminal

  27. Detalhamento dos Padrões - Comportamentais Padrã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;

  28. Detalhamento dos Padrões - Comportamentais Padrão Interpreter Resultado

  29. Detalhamento dos Padrões - Comportamentais Padrão Interpreter Aplicabilidade Quando existir uma linguagem para interpretar; Gramáticas simples. Em gramáticas complexas use um parser;

  30. Detalhamento dos Padrões - Comportamentais Padrão Interpreter Conseqüê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;

  31. Detalhamento dos Padrões - Comportamentais Padrão Interpreter

  32. Detalhamento dos Padrões - Comportamentais Padrão Interpreter

  33. Detalhamento dos Padrões - Comportamentais Padrão Interpreter

  34. Detalhamento dos Padrões - Comportamentais Padrão Interpreter

  35. Detalhamento dos Padrões - Comportamentais Padrão Template Method Classificaçã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.

  36. Detalhamento dos Padrões - Comportamentais Padrão Template Method Estrutura

  37. Detalhamento dos Padrões - Comportamentais Padrão Template Method Participantes 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

  38. Detalhamento dos Padrões - Comportamentais Padrão Template Method Aplicabilidade 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;

  39. Detalhamento dos Padrões - Comportamentais Padrão Template Method Conseqüê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;

  40. Detalhamento dos Padrões - Comportamentais Padrão Template Method Exemplo – Código Fonte JAVA...

  41. 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;

  42. Detalhamento dos Padrões - Comportamentais Padrão Chain of Responsability Motivaçã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.

  43. Detalhamento dos Padrões - Comportamentais Padrã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]

  44. Detalhamento dos Padrões - Comportamentais Padrão Chain of Responsability [Argonavis]

  45. Detalhamento dos Padrões - Comportamentais Padrão Chain of Responsability Processador: 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]

  46. Detalhamento dos Padrões - Comportamentais

  47. Detalhamento dos Padrões - Comportamentais Padrão Chain of Responsability [Argonavis]

  48. Detalhamento dos Padrões - Comportamentais Padrão Chain of Responsability Exemplo: 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]

  49. Detalhamento dos Padrões - Comportamentais Padrã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.

More Related