Padrões-11 - Padrões Estruturais - Adaptador
-
Upload
nicola-zagari -
Category
Technology
-
view
2.498 -
download
4
description
Transcript of Padrões-11 - Padrões Estruturais - Adaptador
![Page 1: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/1.jpg)
Padrões de Projeto
Padrões Estruturais
Adaptador
![Page 2: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/2.jpg)
2 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 3: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/3.jpg)
3 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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)
![Page 4: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/4.jpg)
4 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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...
![Page 5: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/5.jpg)
5 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 6: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/6.jpg)
6 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Versão Adaptador de Objeto
![Page 7: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/7.jpg)
7 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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)
![Page 8: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/8.jpg)
8 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Estrutura (Adaptador de Classe)
![Page 9: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/9.jpg)
9 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Estrutura (Adaptador de Objeto)
![Page 10: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/10.jpg)
10 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 11: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/11.jpg)
11 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 12: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/12.jpg)
12 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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”
![Page 13: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/13.jpg)
13 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 14: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/14.jpg)
14 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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!)
![Page 15: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/15.jpg)
15 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 16: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/16.jpg)
16 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 17: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/17.jpg)
17 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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)
![Page 18: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/18.jpg)
18 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Operações Abstratas
![Page 19: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/19.jpg)
19 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Objetos Delegados
![Page 20: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/20.jpg)
20 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
![Page 21: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/21.jpg)
21 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 22: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/22.jpg)
22 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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)
![Page 23: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/23.jpg)
23 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo (adaptador de classe)
![Page 24: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/24.jpg)
24 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
![Page 25: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/25.jpg)
25 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
![Page 26: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/26.jpg)
26 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo (adaptador de objeto)
![Page 27: Padrões-11 - Padrões Estruturais - Adaptador](https://reader038.fdocument.pub/reader038/viewer/2022102700/5491565bb47959b5168b4591/html5/thumbnails/27.jpg)
27 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo