padrões de projeto: adapter

42
Design Patterns: Adapter Messias R. Batista @mrafaelbatista Sistema para Internet | Aplicações Corporativas

Upload: messias-batista

Post on 11-Apr-2017

177 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Padrões de Projeto: Adapter

Design Patterns: Adapter Messias R. Batista@mrafaelbatista

Sistema para Internet | Aplicações Corporativas

Page 2: Padrões de Projeto: Adapter

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

Page 3: Padrões de Projeto: Adapter

Origem do nome Adapter

3

Page 4: Padrões de Projeto: Adapter

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

Page 5: Padrões de Projeto: Adapter

Origem do nome Adapter: no contexto

No contexto o adapter é uma solução que busca adaptação entre padrões diferentes.

5

Page 6: Padrões de Projeto: Adapter

Origem do nome Adapter: apelido

Wrapper pode ser uma segunda nomeclatura para este padrão. Sendo compreendido como uma classe empacotadora.

6

Page 7: Padrões de Projeto: Adapter

Objetivo e Intenção do Padrão

7

Page 8: Padrões de Projeto: Adapter

Objetivo e Intenção do Padrão

8

Page 9: Padrões de Projeto: Adapter

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

Page 10: Padrões de Projeto: Adapter

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?

Page 11: Padrões de Projeto: Adapter

Cenário para Implementação

11

Page 12: Padrões de Projeto: Adapter

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

Page 13: Padrões de Projeto: Adapter

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

Page 14: Padrões de Projeto: Adapter

Cenário para Implementação: exemplo 1

Sistema Atual Novo Sistema

Comunicação

14

Page 15: Padrões de Projeto: Adapter

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).

Page 16: Padrões de Projeto: Adapter

Cenário para Implementação: exemplo 2

Mas, como seria a implementação de um Objeto Gráfico de Edição de Texto?

16

Page 17: Padrões de Projeto: Adapter

Cenário para Implementação: exemplo 2

Solução

17

Page 18: Padrões de Projeto: Adapter

Estrutura de Classe

18

Page 19: Padrões de Projeto: Adapter

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.

Page 20: Padrões de Projeto: Adapter

Estrutura de Classe: diagrama adapter de classe

20

Page 21: Padrões de Projeto: Adapter

Estrutura de Classe: diagrama adapter de objeto

21

Page 22: Padrões de Projeto: Adapter

Participantes do Padrão

22

Page 23: Padrões de Projeto: Adapter

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).

Page 24: Padrões de Projeto: Adapter

Colaboração

24

Page 25: Padrões de Projeto: Adapter

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.

Page 26: Padrões de Projeto: Adapter

Vantagens e Desvantagens

26

Page 27: Padrões de Projeto: Adapter

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

Page 28: Padrões de Projeto: Adapter

DesvantagensPontos de Atenção

• Volume de trabalho de adaptadores;

• Adaptadores conectáveis. Fornecer interfaces genéricas;

• Utilização de adaptadores de dois sentidos.

28

Page 29: Padrões de Projeto: Adapter

Exemplo de Código

29

Page 30: Padrões de Projeto: Adapter

Exemplo de Código: Diagrama

30

Page 31: Padrões de Projeto: Adapter

Exemplo de Código: Classe TomadaDeDoisPinos

31http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467

Page 32: Padrões de Projeto: Adapter

Exemplo de Código: Classe TomadaDeTresPinos

32http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467

Page 33: Padrões de Projeto: Adapter

Exemplo de Código: Classe AdapterTomada

33http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467

Page 34: Padrões de Projeto: Adapter

Exemplo de Código: Classe Teste

34http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467

Page 35: Padrões de Projeto: Adapter

Usos Conhecidos

35

Page 36: Padrões de Projeto: Adapter

Usos Conhecidos: ListView no Android

36

Page 37: Padrões de Projeto: Adapter

Usos Conhecidos: ListView no Android

37

Page 38: Padrões de Projeto: Adapter

Questões Sobre o Assunto

38

Page 39: Padrões de Projeto: Adapter

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

Page 40: Padrões de Projeto: Adapter

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

Page 41: Padrões de Projeto: Adapter

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

Page 42: Padrões de Projeto: Adapter

Design Patterns: Adapter Messias R. Batista

Sistema para Internet | Aplicações Corporativas

[email protected]@mrafaelbatista