Padrões de Projeto: Adapter
-
Upload
messias-batista -
Category
Technology
-
view
163 -
download
0
Transcript of Padrões de Projeto: Adapter
Design Patterns: Adapter Messias R. Batista@mrafaelbatista
Sistema para Internet | Aplicações Corporativas
Agenda
1.Origem do nome2.Objetivo e Intenção do
Padrão3.Cenário para
Implementação4.Estrutura de Classe5.Participantes do Padrão6.Colaboração7.Vantagens e Desvantagens8.Exemplo de código9.Usos conhecidos10.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/?adaptar4
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çãoTarget 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
DesvantagensPontos 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
31http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Exemplo de Código: Classe TomadaDeTresPinos
32http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Exemplo de Código: Classe AdapterTomada
33http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Exemplo de Código: Classe Teste
34http://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.
41http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467
Design Patterns: Adapter Messias R. Batista
Sistema para Internet | Aplicações Corporativas
[email protected]@mrafaelbatista