Padrões GoF Jobson Ronan {[email protected]}. Padrões Estruturais Tratam de compor classes e...

23
Padrões GoF Jobson Ronan {[email protected]}

Transcript of Padrões GoF Jobson Ronan {[email protected]}. Padrões Estruturais Tratam de compor classes e...

Page 1: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrões GoF

Jobson Ronan {[email protected]}

Page 2: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrões Estruturais Tratam de compor classes e objetos para formar estruturas

grandes e complexas

Page 3: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Adapter (Wrapper)

Page 4: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Adapter Intenção

Converter a interface de uma classe em outra interface, esperada pelos clientes. Permite que classes com interfaces incompatíveis trabalhem em conjunto.

Também conhecido como Wrapper

Motivação Algumas vezes uma classe (de um toolkit) não é reusável porque

sua interface não é compatível com a interface de uma aplicação de um domínio específico.

A solução é criar um objeto adaptador, que encapsule e filtre as especificidades da classe adaptada, fornecendo uma interface que a aplicação espera utilizar

Page 5: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão (Class)Adapter Estrutura e Participantes

Usando Herança Múltipla

Page 6: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão (Class)Adapter Estrutura e Participantes

Usando Composição

Page 7: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Adapter Aplicabilidade

Use o Padrão Adapter quando: Você quer usar uma classe existente, e sua interface não é compatível com

uma que você necessita Você quer criar uma classe reusável que coopera com classes não-

relacionadas ou não previstas a priori, isto é, classes que não apresentam necessariamente interfaces compatíveis

(Somente para ObjectAdapter) Você precisa usar várias subclasses existentes (de Adaptee), mas é impraticável adaptar as interfaces de cada uma através de herança. Um ObjectAdapter pode resolver isto adaptando abstratamente a interface da superclasse.

Page 8: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Adapter Conseqüências

ClassAdapter Adapta uma classe concreta, mas NÃO SUAS SUBCLASSES Pode sobrepor alguns comportamentos do adaptado, visto que é uma

subclasse da classe adaptada ObjectAdapter

Permite que um único Adapter trabalhe com muitos adaptados. Ou seja, o próprio Adaptee e suas subclasses.

Pode adicionar funcionalidade extra a todos os adaptados de uma só vez. Dificulta a sobreposição do comportamento do adaptado.

Page 9: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Bridge(Handle, Body)

Page 10: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Bridge Intenção

Desacoplar uma abstração de sua implementação, de modo que as duas possam variar independentemente.

Também conhecido como Handle/Body

Motivação Quando uma abstração pode ter várias implementações a solução

usual é acomodar todas as implementações através de herança No entanto, herança liga de forma permanente uma abstração a

uma implementação O padrão Bridge permite colocar as abstrações e suas

implementações em diferentes hierarquias de classes, e permite que variem de forma independente

Page 11: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Bridge Estrutura e Participantes

Page 12: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Bridge Aplicabilidade

Use o Padrão Bridge Quando: Você quer evitar ligação permanente entre uma abstração e sua

implementação. Pode ser, por exemplo, quando se deseja variar a implementação em run-time

Tanto a abstração quanto a implementação devem ser extensíveis através de herança

Mudanças na implementação de uma abstração não devem ter impacto sobre o cliente

Page 13: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Bridge Conseqüências

Desacoplamento entre interface e implementação Implementação de uma abstração configurada em run-time Eliminação de dependências de compilação Criação de camadas de abstração que podem melhor estruturar o sistema

Extensibilidade incrementada Herança para abstração e implementação

Detalhes de implementação são escondidos do cliente

Page 14: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Decorator

Page 15: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Decorator Intenção

Anexa dinamicamente responsabilidades adicionais a um objeto. Provê uma alternativa flexível ao uso de herança como modo de estender funcionalidade.

Motivação Algumas vezes se quer adicionar responsabilidades a um objeto, mas não à sua

classe. Acontece, por exemplo, com a criação de interfaces gráficas, quando se deseja acrescentar uma borda a um componente qualquer ou um scrollbar a uma área de texto.

Uma forma de se acrescentar responsabilidades é através de herança, mas isto torna o projeto inflexível, pois a escolha da borda é definida em tempo de compilação. Neste caso o cliente não pode controlar como, onde e quando decorar o componente com uma borda.

Uma abordagem mais flexível é inserir o componente em outro objeto que adiciona a borda, um Decorator.

Page 16: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Decorator Estrutura e Participantes

Page 17: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Decorator Aplicabilidade

Use o padrão Decorator: Para adicionar responsabilidades a objetos individuais de forma dinâmica e

transparente, sem afetar outros objetos Para responsabilidades que podem ser removidas Quando extensão através de herança é impraticável. Algumas vezes uma

grande quantidade de extensões independentes são possíveis e seria necessário um imenso número de subclasses para suportar cada combinação possível entre elas.

Conseqüências Mais flexibilidade que herança Evita incorporação forçada de comportamentos desnecessários

Page 18: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Proxy

Page 19: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Proxy Intenção

Prover um representante para outro objeto de modo a controlar o acesso a este

Motivação Várias razões para controlar acesso a um objeto, como por

exemplo: deferir o custo de criação e inicialização para o momento de uso (objetos

sob demanda); Prover um representante local para um objeto remoto; Proteger o objeto original.

Page 20: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Proxy

Page 21: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Proxy Aplicabilidade

O Padrão Proxy é usado sempre que se precisa de uma referência a um objeto, que seja mais versátil ou sofisticada do que um simples ponteiro.

As principais situações são Remote Proxy - provê um representate local para um objeto em um espaço

de endereçamento diferente Virtual Proxy - cria objeto sob demanda Protection Proxy - controla acesso ao objeto original Smart References - executa operações adicionais quando o objeto é

acessado Contagem de referências, carga de objetos persistentes, locks

Copy-on-write - compartilhar grandes objetos, fazendo uma cópia apenas se necessário

Page 22: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrão Proxy Conseqüências

Acrescenta um nível de indireção adicional

Page 23: Padrões GoF Jobson Ronan {jrjsj@cin.ufpe.br}. Padrões Estruturais Tratam de compor classes e objetos para formar estruturas grandes e complexas.

Padrões GoF

Jobson Ronan {[email protected]}