Padrões-11 - Padrões Estruturais - Adaptador

2,890 views

Published on

Padrões de Projeto. Padrão Estrutural. Adaptador.

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
2,890
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
123
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Padrões-11 - Padrões Estruturais - Adaptador

  1. 1. Padrões de Projeto Padrões Estruturais Adaptador
  2. 2. Adaptador • Converte a interface de uma classe em uma outra interface que o cliente espera. • O adaptador permite que classes que possuem interfaces incompatíveis trabalhem juntas • Também conhecido como Wrapper 2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  3. 3. Motivação • Às vezes um toolkit que é projetado para reuso não é reusável somente porque sua interface não combina com a interface específica de um domínio que uma aplicação requer • Exemplo: um editor de desenho – Abstração chave: Shape • Subclasses: – LineShape, – PolygonShape – TextShape --> mais complicado (atualização de tela, gerência de buffer) 3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  4. 4. Motivação • Ideal: usar TextView toolkit de prateleira – Mas as interfaces podem não “casar” – Opções: 1) Mudar código de TextView (não faz sentido, além de se precisar do código fonte do mesmo) 2) Definir TextShape para que ele adapte a interface de TextView para a de Shape • Existem duas formas de se fazer isto... 4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  5. 5. Motivação • Duas formas: – Versão Adaptador de Classe: herdando a interface de Shape e a implementação de TextView – Versão Adaptador de Objeto: compondo uma instância de TextView dentro de TextShape e implementando TextShape em termos da interface de TextView 5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  6. 6. Versão Adaptador de Objeto 6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  7. 7. Aplicação • Use o padrão Adaptador quando: – Deseja-se usar uma classe pré-existente e sua interface não combina (“casa”) com a que você precisa – Deseja-se criar uma classe reusável que coopere com classes não relacionadas ou imprevisíveis, isto é, classe que não necessariamente tenham interfaces compatíveis – Precisa-se usar várias subclasses pré-existentens, mas e impraticável adaptar suas interfaces através de subclasse de todos. Um adaptador de objetos pode adaptar a interface da classe pai (somente no caso de adaptador de objeto) 7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  8. 8. Estrutura (Adaptador de Classe) 8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  9. 9. Estrutura (Adaptador de Objeto) 9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  10. 10. Participantes • Target (Shape) – Define uma interface específica de domínio que o Cliente usa • Client (DrawingEditor) – Colabora com objetos de acordo com a interface de Target • Adaptee (TextView) – Define uma interface pré-existente que necessita de adaptação • Adapter (TextShape) – Adapta a interface de Adaptee para a de Target 10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  11. 11. Colaborações • Clientes chamam operações de uma instância do Adaptador (Adapter) • Por sua vez, o adaptador chama operações de Adaptee que atendem à requisição 11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  12. 12. Conseqüências • Um adaptador de classe: – Adapta Adaptee para Target pelo “contrato” com a classe concreta Adapter. Como conseqüência, uma classe adapter não funcionará quando se deseja adaptar uma classe e todas suas subclasses – Permite Adapter sobrescrever algum comportamento de Adaptee, uma vez que Adapter é uma subclasse de Adaptee – Introduz somente um objeto e nenhuma indireção de ponteiro adicional é necessária para se obter o “adaptado” Livro Texto: Design Pattern - Elements 12 Eduardo N. F. Zagari of Reusable OO Software - Gamma
  13. 13. Conseqüências • Um adaptador de objeto: – Permite que um único Adapter trabalhe com muitos Adaptees, isto é, o próprio Adaptee e todas as suas subclasses (se alguma). O Adapter também pode adicionar funcionalidade a todos os Adaptees de uma única vez. – Torna mais difícil sobrescrever o comportamento do Adaptee. Isto irá requerer além das subclasses de Adaptee que se faça que o Adapter se refira a elas ao invés do próprio Adaptee 13 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  14. 14. Conseqüências • Quanto de trabalho os Adaptadores fazem? – Isto varia desde a simples conversão das interfaces (de Adaptee para Target) até o suporte a um conjunto inteiramente diferente de operações • Adaptadores plugáveis – Uma classe é mais reusável quando se minimizam as considerações que outras classes devem fazer para usá-la. Como? Fazendo a adaptação de interface dentro da classe (ver exemplo!) 14 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  15. 15. Implementação • Embora a implementação do Adaptador geralmente seja direta, algumas questões para se manter em mente: – Em C++, a implementação de um adaptador de classe deveria herdar publicamente de Target e de modo privado de Adaptee. Assim, o Adapter seria um subtipo de Target, mas não de Adaptee 15 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  16. 16. Implementação • Adaptadores plugáveis: – Considere o componente TreeDisplay que pode mostrar estruturas de árvores graficamente. • Se queremos que ele seja “mais reusável”, não se pode querer que os objetos que ele mostre tenham uma interface específica • Aplicações definem suas próprias estruturas de árvores e cada estrutura terá sua própria interface... – Primeiro passo: encontrar uma interface minimalista (narrow interface) para o Adaptee, isto é, o conjunto mínimo de operações que nos permitam realizar a adaptação 16 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  17. 17. Implementação • No caso do TreeDisplay, a interface minimalista deve incluir 2 operações: – Uma que define como apresentar um nó em uma estrutura hierárquica graficamente – Outra que recupere o nó filho • 3 abordagens para Interface Narrow: – Usando operações abstratas – Usando objetos delegados – Usando adaptadores parametrizados (Smaltalk) 17 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  18. 18. Operações Abstratas 18 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  19. 19. Objetos Delegados 19 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  20. 20. Exemplo 20 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  21. 21. Exemplo • Shape considera BoundingBox pelos cantos. • TextView define pela origem, altura e largura • Shape tem a operação CreateManipulator • TextView não tem operação equivalente • TextShape é um adaptador entre estas interfaces diferentes 21 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  22. 22. Exemplo • Um adaptador de classes usa herança múltipla para adaptar interfaces. – A chave é usar um “ramo” da herança para herdar a interface e outra para herdar a implementação (em C++ a primeira de forma pública e a outra privada) 22 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  23. 23. Exemplo (adaptador de classe) 23 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  24. 24. Exemplo 24 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  25. 25. Exemplo 25 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  26. 26. Exemplo (adaptador de objeto) 26 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  27. 27. Exemplo 27 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma

×