Design Patterns: Adapter
Messias R. Batista
@mrafaelbatista
Sistema para Internet | Aplicações Corporativas
Agenda
1. Origem do nome
2. Objetivo e Intenção do Padrão
3. Cenário para Implementação
4. Estrutura de Classe
5. Participantes do Padrão
6. Colaboração
7. Vantagens e Desvantagens
8. Exemplo de código
9. Usos conhecidos
10.Questões sobre o assunto
Design Patterns: Adapter
2
Origem do nome Adapter
3
Origem do nome Adapter: etimologia
“O verbo adaptar vem do latin adaptare (ajustar uma
coisa a outra) composto do prefixo ad (fazer) y do verbo
aptare (ajustar, aplicar, [...], equipar), frequentativo do
verbo apere (amarrar) [...].”
http://etimologias.dechile.net/?adaptar
4
Origem do nome Adapter: no contexto
No contexto o adapter é uma solução que busca
adaptação entre padrões diferentes.
5
Origem do nome Adapter: apelido
Wrapper pode ser uma segunda nomeclatura para este
padrão. Sendo compreendido como uma classe
empacotadora.
6
Objetivo e Intenção do Padrão
7
Objetivo e Intenção do Padrão
8
Objetivo e Intenção do Padrão
“Converter a interface de uma classe em outra interface,
esperada pelos clientes. O Adapter permite que classes
com interfaces incompatíveis trabalhem em conjunto”
(GAMMA, 2000, p. 140)
9
Objetivo e Intenção do Padrão
10
• Você quer usar uma classe existente, mas sua interface não
corresponder à interface de que necessita;
• Você quer criar uma classe reutilizável que coopere com classe não
relacionadas ou não-previstas, ou seja, classe que não
necessariamente tenham interfaces compatíveis;
• (somente para adaptadores de objetos) você precisa usar várias
subclasses existentes, porém, for impraticável adaptaressas interfaces
criando subclasses para cada uma. Um adaptador de objeto pode
adaptar a interface da sua classe-mãe.
Quando utilizar o padrão Adapter?
Cenário para Implementação
11
Cenário para Implementação: problema central
“Algumas vezes, uma classe toolkit, projetada para ser
reutilizada não é reutilizável porque sua interface não
corresponde à interface específica de um domínio
requerida por uma aplicação”. (GAMMA, 2000, p. 141)
12
Cenário para Implementação: exemplo 1
• Uma organização está precisando atualizar seu Sistema de
Informação. Um novo sistema é adquirido.
• Neste novo sistema, busca-se utilizar as tecnologias mais
recentes.
• Porém, o processo de mudança será realizado de forma
modular.
• A medida que um módulo fique pronto, ele deverá ser
acoplado ao sistema antigo até que todo o sistema antigo
seja substituído.
13
Cenário para Implementação: exemplo 1
Sistema Atual Novo Sistema
Comunicação
14
Cenário para Implementação: exemplo 2
• Considerar um editor de desenho;
• Abstração-chave é o Objeto Gráfico que tem forma editável;
• A interface do Objeto Gráfico é a Shape;
• Nesta complexidade é fácil implementar objetos gráficos
como linhas, polígonos;
• Através de subclasses os Objetos Gráficos são
implementados, como LineShape, ou PolígonoShape.
15Exemplo encontrado em GAMMA (2000).
Cenário para Implementação: exemplo 2
Mas, como seria a implementação de um Objeto
Gráfico de Edição de Texto?
16
Cenário para Implementação: exemplo 2
Solução
17
Estrutura de Classe
18
Estrutura de Classe: tipos de Adapters
19
Adapter de Objeto
Configura-se na utilização de uma composição de
objetos para envelopar uma interface alterada.
Adapter de Classe
Utiliza-se de herança múltipla para gerar o adaptador a
partir da gênese desta subclasse.
SIERRA, K.; BATES, B., Use a Cabeça! Java, Rio de Janeiro, AltaBooks. 2005.
Estrutura de Classe: diagrama adapter de classe
20
Estrutura de Classe: diagrama adapter de objeto
21
Participantes do Padrão
22
Participantes do Padrão
23
Participante Referência Função
Target Shape Define a interface específica do domínio
que o Client usa.
Client DrawingEditor Colabora com objetos compatíveis com a
interface de Target.
Adaptee TextView Define uma interface existente que
necessita ser adaptada.
Adapter TextShape Adapta a interface do Adaptee à interface
de Target.
Fonte: Elaborado pelo autor a partir de GAMMA (2000).
Colaboração
24
Colaboração
25
O cliente visualiza apenas a
interface Target.
O Adapter se comunica com o
Adaptee.
O Adapter implementa a
interface Target.
As solicitações são
delegadas ao Adaptado.
Vantagens e Desvantagens
26
Vantagens
• Implementação de boas práticas de OO como composição ou
herança;
• Vinculação a uma interface e não a uma implementação;
• Flexibilidade na utilização de vários tipos de adaptadores.
27
Desvantagens
Pontos de Atenção
• Volume de trabalho de adaptadores;
• Adaptadores conectáveis. Fornecer interfaces genéricas;
• Utilização de adaptadores de dois sentidos.
28
Exemplo de Código
29
Exemplo de Código: Diagrama
30
Exemplo de Código: Classe TomadaDeDoisPinos
31
http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Exemplo de Código: Classe TomadaDeTresPinos
32
http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Exemplo de Código: Classe AdapterTomada
33
http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Exemplo de Código: Classe Teste
34
http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Usos Conhecidos
35
Usos Conhecidos: ListView no Android
36
Usos Conhecidos: ListView no Android
37
Questões Sobre o Assunto
38
Questão 1 – São classes implementadas no
Padrão de Projeto Adapter
a) Adapter, Adaptee, Target e Shape
b) Adapter, Target, Client, Shape
c) Adapter, Target, Adaptee, Client
d) Target, Client, Class, Adapter
e) Objetos, Cliente, Target, Adapter
39
Questão 2 - Adapter é um padrão estrutural
utilizado para compatibilizar interfaces de
modo que elas possam interagir.
a) Certo
b) Errado
Prova Analista de Desenvolvimento | SERPRO | CESPE | 2008
40
Referências
GAMMA, Erich et al. Padrões de Projeto: soluções reutilizáveis de software orientado a
objetos. Porto Alegre: Bookman, 2000.
GLAUBER, Nelson. Dominando o Android: do básico ao avançado. Novatec, São Paulo,
2015.
GUERRA, Eduardo. Design Patterns com Java: projeto orientado a objetos guiado por
padrões. Casa do Código, São Paulo.
MEDEIROS, Igor. Padrão de Projeto Adapter em Java. http://www.devmedia.com.br/padrao-
de-projeto-adapter-em-java/26467 Acessado em: 24 de maio de 2016.
SIERRA, K.; BATES, B., Use a Cabeça! Java, Rio de Janeiro, AltaBooks. 2005.
41
http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Design Patterns: Adapter
Messias R. Batista
Sistema para Internet | Aplicações Corporativas
mrafaelbatista@gmail.com
www.mrafaelbatista.com.br
@mrafaelbatista

Padrões de Projeto: Adapter

  • 1.
    Design Patterns: Adapter MessiasR. Batista @mrafaelbatista Sistema para Internet | Aplicações Corporativas
  • 2.
    Agenda 1. Origem donome 2. Objetivo e Intenção do Padrão 3. Cenário para Implementação 4. Estrutura de Classe 5. Participantes do Padrão 6. Colaboração 7. Vantagens e Desvantagens 8. Exemplo de código 9. Usos conhecidos 10.Questões sobre o assunto Design Patterns: Adapter 2
  • 3.
    Origem do nomeAdapter 3
  • 4.
    Origem do nomeAdapter: etimologia “O verbo adaptar vem do latin adaptare (ajustar uma coisa a outra) composto do prefixo ad (fazer) y do verbo aptare (ajustar, aplicar, [...], equipar), frequentativo do verbo apere (amarrar) [...].” http://etimologias.dechile.net/?adaptar 4
  • 5.
    Origem do nomeAdapter: no contexto No contexto o adapter é uma solução que busca adaptação entre padrões diferentes. 5
  • 6.
    Origem do nomeAdapter: apelido Wrapper pode ser uma segunda nomeclatura para este padrão. Sendo compreendido como uma classe empacotadora. 6
  • 7.
  • 8.
  • 9.
    Objetivo e Intençãodo Padrão “Converter a interface de uma classe em outra interface, esperada pelos clientes. O Adapter permite que classes com interfaces incompatíveis trabalhem em conjunto” (GAMMA, 2000, p. 140) 9
  • 10.
    Objetivo e Intençãodo Padrão 10 • Você quer usar uma classe existente, mas sua interface não corresponder à interface de que necessita; • Você quer criar uma classe reutilizável que coopere com classe não relacionadas ou não-previstas, ou seja, classe que não necessariamente tenham interfaces compatíveis; • (somente para adaptadores de objetos) você precisa usar várias subclasses existentes, porém, for impraticável adaptaressas interfaces criando subclasses para cada uma. Um adaptador de objeto pode adaptar a interface da sua classe-mãe. Quando utilizar o padrão Adapter?
  • 11.
  • 12.
    Cenário para Implementação:problema central “Algumas vezes, uma classe toolkit, projetada para ser reutilizada não é reutilizável porque sua interface não corresponde à interface específica de um domínio requerida por uma aplicação”. (GAMMA, 2000, p. 141) 12
  • 13.
    Cenário para Implementação:exemplo 1 • Uma organização está precisando atualizar seu Sistema de Informação. Um novo sistema é adquirido. • Neste novo sistema, busca-se utilizar as tecnologias mais recentes. • Porém, o processo de mudança será realizado de forma modular. • A medida que um módulo fique pronto, ele deverá ser acoplado ao sistema antigo até que todo o sistema antigo seja substituído. 13
  • 14.
    Cenário para Implementação:exemplo 1 Sistema Atual Novo Sistema Comunicação 14
  • 15.
    Cenário para Implementação:exemplo 2 • Considerar um editor de desenho; • Abstração-chave é o Objeto Gráfico que tem forma editável; • A interface do Objeto Gráfico é a Shape; • Nesta complexidade é fácil implementar objetos gráficos como linhas, polígonos; • Através de subclasses os Objetos Gráficos são implementados, como LineShape, ou PolígonoShape. 15Exemplo encontrado em GAMMA (2000).
  • 16.
    Cenário para Implementação:exemplo 2 Mas, como seria a implementação de um Objeto Gráfico de Edição de Texto? 16
  • 17.
    Cenário para Implementação:exemplo 2 Solução 17
  • 18.
  • 19.
    Estrutura de Classe:tipos de Adapters 19 Adapter de Objeto Configura-se na utilização de uma composição de objetos para envelopar uma interface alterada. Adapter de Classe Utiliza-se de herança múltipla para gerar o adaptador a partir da gênese desta subclasse. SIERRA, K.; BATES, B., Use a Cabeça! Java, Rio de Janeiro, AltaBooks. 2005.
  • 20.
    Estrutura de Classe:diagrama adapter de classe 20
  • 21.
    Estrutura de Classe:diagrama adapter de objeto 21
  • 22.
  • 23.
    Participantes do Padrão 23 ParticipanteReferência Função Target Shape Define a interface específica do domínio que o Client usa. Client DrawingEditor Colabora com objetos compatíveis com a interface de Target. Adaptee TextView Define uma interface existente que necessita ser adaptada. Adapter TextShape Adapta a interface do Adaptee à interface de Target. Fonte: Elaborado pelo autor a partir de GAMMA (2000).
  • 24.
  • 25.
    Colaboração 25 O cliente visualizaapenas a interface Target. O Adapter se comunica com o Adaptee. O Adapter implementa a interface Target. As solicitações são delegadas ao Adaptado.
  • 26.
  • 27.
    Vantagens • Implementação deboas práticas de OO como composição ou herança; • Vinculação a uma interface e não a uma implementação; • Flexibilidade na utilização de vários tipos de adaptadores. 27
  • 28.
    Desvantagens Pontos de Atenção •Volume de trabalho de adaptadores; • Adaptadores conectáveis. Fornecer interfaces genéricas; • Utilização de adaptadores de dois sentidos. 28
  • 29.
  • 30.
  • 31.
    Exemplo de Código:Classe TomadaDeDoisPinos 31 http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
  • 32.
    Exemplo de Código:Classe TomadaDeTresPinos 32 http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
  • 33.
    Exemplo de Código:Classe AdapterTomada 33 http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
  • 34.
    Exemplo de Código:Classe Teste 34 http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
    Questão 1 –São classes implementadas no Padrão de Projeto Adapter a) Adapter, Adaptee, Target e Shape b) Adapter, Target, Client, Shape c) Adapter, Target, Adaptee, Client d) Target, Client, Class, Adapter e) Objetos, Cliente, Target, Adapter 39
  • 40.
    Questão 2 -Adapter é um padrão estrutural utilizado para compatibilizar interfaces de modo que elas possam interagir. a) Certo b) Errado Prova Analista de Desenvolvimento | SERPRO | CESPE | 2008 40
  • 41.
    Referências GAMMA, Erich etal. Padrões de Projeto: soluções reutilizáveis de software orientado a objetos. Porto Alegre: Bookman, 2000. GLAUBER, Nelson. Dominando o Android: do básico ao avançado. Novatec, São Paulo, 2015. GUERRA, Eduardo. Design Patterns com Java: projeto orientado a objetos guiado por padrões. Casa do Código, São Paulo. MEDEIROS, Igor. Padrão de Projeto Adapter em Java. http://www.devmedia.com.br/padrao- de-projeto-adapter-em-java/26467 Acessado em: 24 de maio de 2016. SIERRA, K.; BATES, B., Use a Cabeça! Java, Rio de Janeiro, AltaBooks. 2005. 41 http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
  • 42.
    Design Patterns: Adapter MessiasR. Batista Sistema para Internet | Aplicações Corporativas mrafaelbatista@gmail.com www.mrafaelbatista.com.br @mrafaelbatista