padrões de projeto aula 9 – padrão adapter. padrÃo adapter padrões de projeto - adapter...

15
Padrões de Projeto Aula 9 – Padrão Adapter

Upload: thomaz-braga-faria

Post on 07-Apr-2016

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padrões de ProjetoAula 9 – Padrão Adapter

Page 2: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

PADRÃO ADAPTER

Soluções simples para problemas reais!

Page 3: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

O que fazer?

1. Trocar a tomada será que vale apena quebrar a parede?2. Comprar um novo carregador no padrão europeu Não deve ser barato...3. Comprar um adaptador! #seemslegit

Page 4: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Adaptadores e OO

• Situação: sua empresa compra uma biblioteca “X” que você precisará usar no seu sistema. Mas, as interfaces não são compatíveis... O que fazer?• Nota 1: a biblioteca “X” vêm compilada;• Nota 2: você deseja evitar alterações no código do sistema;

• Adiciona um adaptador entre elas. • Torna as interfaces compatíveis e respeita o princípio aberto-

fechado.

Page 5: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

O que é um adaptador?

• Um instrumento que transforma uma interface em outra.• Em outras palavras, permite que dois ou mais componentes de

software troquem informação mesmo com interfaces incompatíveis.

Page 6: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Definição

O padrão Adapter converte a interface de uma classe para outra interface que o cliente

espera encontrar. O Adaptador permite que classes com interfaces incompatíveis

trabalhem juntas.

Page 7: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Terminologia e Estrutura – Object Adapter

O cliente (Client) vê apenas a interface alvo (Target).

O adaptador (Adapter) é composto com o Adaptado.

O adaptador (Adapter) implementa a interface alvo (Target).

Todas as requisições são delegadas aos adaptados (Adaptee).

Page 8: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Prática • Crie uma interface chamada “TomadaDeDoisPinosIF”, que possui um método void

conectar(ConectorDeDoisPinos conector);• Crie uma classe “ConectorDeDoisPinos“, que possui uma variável protegida String

descricao e um método público getDescricao();• Crie uma classe chamada TomadaDeDoisPinos que implementa TomadaDeDoisPinosIF

• Agora crie uma interface chamada “TomadaDeTrêsPinosIF”, que possui um método void conectar(ConectorDeTresPinos conector); • Crie também uma classe “ConectorDeTresPinos“, que possui uma variável protegida

String descricao e um método público getDescricao().• Crie uma classe chamada TomadaDeTresPinos que implementa TomadaDeTresPinosIF

• Finalmente, crie as classes CarregadorNovo (herda de conector de 3 pinos) e CarregadorAntigo (herda de conector de 2 pinos)

• Tarefinha • No main, crie um carregador antigo e o conecte em uma tomada de 2 pinos;• No main, crie um carregador novo e o conecte em uma tomada de 2 pinos (sem

alterar o código existente).

Padr

ões d

e Pr

ojet

o - A

dapt

er

Page 9: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Exemplos de Adapters• JSDK API: Tratamento de eventos (java.awt.event)• MouseAdapter, WindowAdapter, etc. são stubs para

implementação de adapters• JSDK API: Wrappers de tipos em Java• Double, Integer, Character, etc. "Adaptam" tipos primitivos à

interface de java.lang.Object.• Uso de JTable, JTree, JList (javax.swing)• A interface TableModel e as classes AbstractTableModel e

DefaultTableModel oferecem uma interface para o acesso aos campos de uma Jtable

• Um adapter é útil para traduzir operações específicas do domínio dos dados (planilha, banco de dados, etc.) às operações da tabela.

Page 10: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Terminologia e Estrutura – Class Adapter

O class adapter é implementado com herança múltipla.A “herança múltipla pura”, A extends B,C,D não é suportada em java.Mas uma classe pode herdar de uma classe e implementar várias classes, uma maneira peculiar que uma classe pode usar para ser “filha” de várias outras.

Page 11: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Exercício I• Refaça o adaptador que fizemos em sala utilizando o modelo

“Class Adapter”. É simples!

Page 12: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Exercício II• Considere o seguinte contexto: você é o desenvolvedor que programou o

sistema de um restaurante.• O seu sistema lida com a parte de pagamentos, mas a princípio você

considerou apenas 2 bandeiras de cartão: Visa e Master. A estrutura UML do módulo de pagamentos é especificada abaixo:• “Compra” é composto por um objeto do tipo IPagamento

Page 13: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Exercício II• Porém, a loja decide que vai ter mais um tipo de cartão de crédito, terá o

“American”. Logo, você pensa: “Tudo bem, é só eu herdar de CartaodeCredito, implementar a forma específica de pagar e pronto! “.

• Mas... a empresa AmericanExpress já te forneceu uma lib pré-compilada (não pode ser alterada) e você não deveria mudar sua classe CartãoDeCrédito para evitar refazer os testes unitários e também evitar efeitos colaterais. Veja a estrutura da lib abaixo.

Page 14: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Exercício II• E agora? A minha linguagem não permite herança múltipla! O que fazer?• Com o padrão Adapter, é possível fazer essa implementação, e de forma

simples, sem ter que mudar o código do cliente (AmericanExpress) e nem o do sistema de pagamentos do restaurante.

• P.s.: preencha os métodos pagar com prints que exibam a bandeira do cartão.

1. Desenha a estrutura UML do projeto com o Adapter resolvendo o problema.

2. Implemente a solução.

Page 15: Padrões de Projeto Aula 9 – Padrão Adapter. PADRÃO ADAPTER Padrões de Projeto - Adapter Soluções simples para problemas reais!

Padr

ões d

e Pr

ojet

o - A

dapt

er

Referências• [1] Capítulo 7 do livro “Padrões de Projeto – Use a Cabeça!”