A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Padrões de Projeto Aula 9 – Padrão Adapter."— Transcrição da apresentação:

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

2 Padrão Adapter Soluções simples para problemas reais!
Padrões de Projeto - Adapter

3 O que fazer? Trocar a tomada  será que vale apena quebrar a parede?
Padrões de Projeto - Adapter Trocar a tomada  será que vale apena quebrar a parede? Comprar um novo carregador no padrão europeu  Não deve ser barato... Comprar um adaptador!  #seemslegit

4 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. Padrões de Projeto - Adapter

5 O que é um adaptador? Padrões de Projeto - Adapter 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.

6 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. Padrões de Projeto - Adapter Hoje começaremos pela definição.

7 Terminologia e Estrutura – Object Adapter
O adaptador (Adapter) implementa a interface alvo (Target). O cliente (Client) vê apenas a interface alvo (Target). Padrões de Projeto - Adapter A interface-alvo será sempre a entidade com quem o cliente consegue conversar. Neste caso, queremos adaptar tomada de dois pinos para tomada de 3 pinos, logo, o adaptado é “TomadaDeDoisPinos”. O adaptador, por sua vez, sempre implementará a interface alvo e terá por composição o Adaptado. O adapator, então, delegará funções para o adaptado. O adaptador (Adapter) é composto com o Adaptado. Todas as requisições são delegadas aos adaptados (Adaptee).

8 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 de Projeto - Adapter

9 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. Padrões de Projeto - Adapter

10 Terminologia e Estrutura – Class Adapter
Padrões de Projeto - 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.

11 Exercício I Refaça o adaptador que fizemos em sala utilizando o modelo “Class Adapter”. É simples!  Padrões de Projeto - Adapter

12 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 Padrões de Projeto - Adapter

13 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. Padrões de Projeto - Adapter

14 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. Desenha a estrutura UML do projeto com o Adapter resolvendo o problema. Implemente a solução. Padrões de Projeto - Adapter

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


Carregar ppt "Padrões de Projeto Aula 9 – Padrão Adapter."

Apresentações semelhantes


Anúncios Google