Padrão De Projeto Adapter

10.060 visualizações

Publicada em

Simples apresentação sobre o Padrão de Projeto ADAPTER

Publicada em: Tecnologia, Educação
1 comentário
3 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
10.060
No SlideShare
0
A partir de incorporações
0
Número de incorporações
15
Ações
Compartilhamentos
0
Downloads
221
Comentários
1
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Padrão De Projeto Adapter

  1. 1. Padrão de Projeto Adapter
  2. 2. Uma tomada que só aceita plugue de 2 pinos
  3. 3. Plugue com 3 pinos de um dispositivo
  4. 4. Como Conectá-los?
  5. 5. Utilizando um Adaptador
  6. 6. Perceba que O plugue e a tomada possuem interfaces diferentes entre si, portanto eles não podem se encaixar. Porém Utilizando um ADAPTADOR, um instrumento que transforma uma interface em outra, a conexão foi realizada.
  7. 7. Por que não troquei a tomada? Por que não troquei o plugue do dispositivo?
  8. 8. Em Projetos de Desenvolvimento de Software também encontramos problemas como este!
  9. 9. Um exemplo     Suponha que em um projeto, utilizamos uma classe utilitária de um framework (ou o próprio completo) ou de uma biblioteca de classes de terceiros. Em todo o nosso projeto, utilizamos os métodos desta classe.
  10. 10. Classe  de uma biblioteca de terceiros utilizada no projeto class ClasseUtil         def hello             "Hello"         end         def world             "World"         end end
  11. 11. Na documentação da classe, o método hello será depreciado (sem utilização) no futuro.       Digamos que versões subseqüentes da classe sejam lançadas e o método hello tenha sido retirado definitivamente.   
  12. 12. Como poderemos utilizar a nova versão da classe em nossa aplicação que utiliza o antigo método hello (agora excluído)?     Se apenas substituírmos a classe em nossa aplicação, será disparado um erro, afirmando que está sendo feito uma chamada que não existe. E agora?
  13. 13. ADAPTER (Também conhecido como: Wrapper ou Translator)
  14. 14. Propósito O principal objetivo do Adapter é facilitar a conversão da interface de uma classe para outra interface mais interessante para o cliente, fazendo com que várias classes possam trabalhar em conjunto independentemente das interfaces originais. Às vezes é preciso modificar uma classe que não pode ser alterada adequadamente devido à falta do código fonte (alguma biblioteca de classes comercial), ou por alguma outra razão. O Adapter é uma das formas de modificar classes nestas circunstâncias, sendo classificado com a de finalidade estrutural e abrange tanto escopo de classe quanto de objeto.
  15. 15. Motivação: Adapter é usado quando: Uma classe já existente e sua interface não combinam com a esperada pelo cliente; Se quer criar uma classe reutilizável que coopera com classes não relacionadas ou não previstas, isto é, classes que não necessariamente tenham interfaces compatíveis; Se necessita usar várias subclasses existentes, mas é impraticável adaptar suas interfaces fazendo um Subclassing de cada uma.
  16. 16. Formas de Implementação Object Adapter Cria-se uma classe intermediária que servirá como interface entre as chamadas do código do cliente e  o código alvo.   Class Adapter  Cria-se uma classe que herdará da classe do cliente e sobrescreve-se ou recria-se o método chamado.
  17. 17. Componentes  Adaptado: Classe que contém a funcionalidade que o cliente está interessado. Entretanto não é compatível com o cliente.   Alvo: Domínio da interface específica que o cliente usa.   Adaptador: Classe que adapta o Alvo ao Adaptado.   Cliente: Interage com o Adaptado incompatível.
  18. 18. Object Adapter Objects usam uma técnica composta para adaptar uma interface à outra. O Adapter herda a interface-alvo que o client eespera ver. Quando o cliente chama um método no objeto alvo, o pedido é traduzido para o método correspondente no adaptado. ObjectAdapters permitem que o cliente e o adaptado sejam transparentes um para o outro. Só o Adapter sabe da existencia dos dois.  Sua principal vantagem é que o Adapter adapta não somente o Adaptado mas todas as suas subclasses. A principal desvantagem é que  seu uso requer a escrita de todo o código necessario para delegar as chamadas do Adaptado.
  19. 19. Diagrama de um Object Adapter  
  20. 20. Class Adapter Class Adapters usam herança invés de composição. Isso significa que invés de elegaras chamadas ao Adaptado, ela as põe em sub-classes. Assim, Class Adapters devem herdar tanto o Alvo quanto o Adaptado.  Ao fazer uma chamada ao Alvo, a chamada é simplesmente encaminhada para o método especifico que foi herdado pela interface          
  21. 21. Diagrama de um Class Adapter  
  22. 22. Object Adapters X Class Adapters O OA permite que um único Adapter trabalhe com muitos Adaptados (e suas sub-classes), já o CA adapta uma classe concreta e não suas sub-classes. O CA pode sobrepor alguns comportamentos do Adaptado visto que é uma subclasses dele, o que não é tão trivial no OA.  A implementação do CA normalmente é mais simples pois envolve menos código.
  23. 23. Aplicabilidade Use o Padrão Adapter quando:    Desejar usar uma classe existente e sua interface não corresponde ao que você precisa; Desejar criar uma classe reutilizável que coopera com classes imprevistas ou não relacionáveis, isto é, classes que não tem necessariamente interfaces compatíveis.
  24. 24. Estrutura
  25. 25. Voltando ao Código...
  26. 26. A Nova Classe da Biblioteca class ClasseUtil         #def hello ----------> Método depreciado     #    "Hello"     #end           def alo         "Hello"     end     def world         "World"     end end
  27. 27. Adaptador (Composição) class AdapterC     @biblioteca     def initialize         self.biblioteca = ClasseUtil.new #instanciando a biblioteca     end     def hello         self.biblioteca.alo     end     def world         self.biblioteca.world     end end
  28. 28. Adaptador (Herança) class AdapterH < ClasseUtil     def initialize     end     def hello         self.alo #readaptando a chamada para o metodo correto     end     end
  29. 29. ACTIVE RECORDS Aplicação Clássica do Adapter no RoR
  30. 30. Mysql, Postgres, Oracle, SqlServer...     results = mysql_connection.query(sql) ou results = sybase_connection.sql(sql) e por aí vai...
  31. 31. Active Record soluciona com AbstractAdapter define a interface para um banco de dados que é usado em todo o Active Record   Subclasses da AbstractAdapter: MysqlAdapter, SybaseAdapter, OracleAdapter, etc.   Cada subclasse implementa seus métodos
  32. 32. Adaptar ou Modificar?
  33. 33. Procure modificar as classes quando:   as alterações forem simples e claras; você entende completamente o código contido na classe; a modificação será "definitiva" para o projeto LEMBRETE: O Ruby suporta modificar o objeto em tempo de execução
  34. 34. Adote a solução de adaptadores quando: a incompatibilidade entre as interfaces é grande e complexa ; você não tem bastante conhecimento e afinidade com o código e a idéia contida na classe  
  35. 35. Por que não troquei a tomada? Por que não troquei o plugue do dispositivo?
  36. 36. Padrões Relacionados O Adapter se relaciona a outro padrões pela semelhança entre a implementação. Proxy: Enquanto o Adapter visa traduzir interfaces entre cliente e objeto final, o Proxy visa poder interferir entre a chama do Cliente e a execucao do objeto final. Decorator: Agrega funcionalidades a outros objetos sem alterar sua interface. Por isso esse padrão é mais transparente à aplicação que uma Adapter. Como sua interface se mantém, o Decorator suporta composição recursiva, algo que nao se aplica ao Adapter.  Bidge: Tem uma estrutura similiar ao Adapter, mas o proposito de separar a interface da implementação.
  37. 37. FIM Lorena Erdens Matheus Andrade

×