SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Padrão de Projeto
    Adapter
Uma tomada que só aceita plugue de 2
              pinos
Plugue com 3 pinos de um dispositivo
Como Conectá-los?
Utilizando um Adaptador
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.
Por que não troquei a tomada?

Por que não troquei o plugue do
         dispositivo?
Em Projetos de Desenvolvimento de
 Software também encontramos
      problemas como este!
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.
Classe  de uma biblioteca de
         terceiros utilizada no projeto

class ClasseUtil
        def hello
            "Hello"
        end

        def world
            "World"
        end
end
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. 
                              
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?
ADAPTER
(Também conhecido como:
 Wrapper ou Translator)
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.
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.
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.
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.
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.
Diagrama de um Object Adapter

 
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
 
 
 
 
 
Diagrama de um Class Adapter

 
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.
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.
Estrutura
Voltando ao Código...
A Nova Classe da Biblioteca
class ClasseUtil
   
    #def hello ----------> Método depreciado
    #    "Hello"
    #end
     
    def alo
        "Hello"
    end

    def world
        "World"
    end
end
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
Adaptador (Herança)
class AdapterH < ClasseUtil

    def initialize
    end

    def hello
        self.alo #readaptando a chamada para o metodo correto
    end

   
end
ACTIVE RECORDS



      Aplicação Clássica do
        Adapter no RoR
Mysql, Postgres, Oracle, SqlServer...

 
 
results = mysql_connection.query(sql)

ou

results = sybase_connection.sql(sql)

e por aí vai...
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
Adaptar ou Modificar?
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
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
  
Por que não troquei a tomada?

Por que não troquei o plugue do
         dispositivo?
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.
FIM



        Lorena Erdens
      Matheus Andrade

Mais conteúdo relacionado

Mais procurados

Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de softwareAplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de softwareCesar Rocha
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareÁlvaro Farias Pinheiro
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelRyan Padilha
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Ryan Padilha
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Ryan Padilha
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) Grupo Treinar
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Padrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadePadrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadeEduardo Nicola F. Zagari
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 

Mais procurados (20)

Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de softwareAplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
UML
UMLUML
UML
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Padrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadePadrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - Facade
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 

Destaque

Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoVinícius de Paula
 
Flyweight Design Pattern
Flyweight Design PatternFlyweight Design Pattern
Flyweight Design PatternVarun MC
 
Ilha dos Amores- Os Lusíadas: simbologia
Ilha dos Amores- Os Lusíadas: simbologiaIlha dos Amores- Os Lusíadas: simbologia
Ilha dos Amores- Os Lusíadas: simbologiasin3stesia
 

Destaque (8)

Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de Projeto
 
Flyweight
FlyweightFlyweight
Flyweight
 
Flyweight Design Pattern
Flyweight Design PatternFlyweight Design Pattern
Flyweight Design Pattern
 
Padroes
PadroesPadroes
Padroes
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Lusiadas Figurasdeestilo
Lusiadas FigurasdeestiloLusiadas Figurasdeestilo
Lusiadas Figurasdeestilo
 
Ilha dos Amores
Ilha dos AmoresIlha dos Amores
Ilha dos Amores
 
Ilha dos Amores- Os Lusíadas: simbologia
Ilha dos Amores- Os Lusíadas: simbologiaIlha dos Amores- Os Lusíadas: simbologia
Ilha dos Amores- Os Lusíadas: simbologia
 

Semelhante a Padrão De Projeto Adapter

Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorEduardo Nicola F. Zagari
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAAricelio Souza
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Walney Negreiros
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5oliveiraprog
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 

Semelhante a Padrão De Projeto Adapter (20)

Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - Adaptador
 
Padroes de Projeto
Padroes de ProjetoPadroes de Projeto
Padroes de Projeto
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
padrao de projeto1
padrao de projeto1padrao de projeto1
padrao de projeto1
 
Refatorações
RefatoraçõesRefatorações
Refatorações
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAA
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Mini aula-java
Mini aula-javaMini aula-java
Mini aula-java
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
Quick reference
Quick referenceQuick reference
Quick reference
 
Interface
InterfaceInterface
Interface
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 

Padrão De Projeto Adapter

  • 2. Uma tomada que só aceita plugue de 2 pinos
  • 3. Plugue com 3 pinos de um dispositivo
  • 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.
  • 8. Por que não troquei a tomada? Por que não troquei o plugue do dispositivo?
  • 9. Em Projetos de Desenvolvimento de Software também encontramos problemas como este!
  • 10. 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.
  • 11. Classe  de uma biblioteca de terceiros utilizada no projeto class ClasseUtil         def hello             "Hello"         end         def world             "World"         end end
  • 12. 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.   
  • 13. 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?
  • 14. ADAPTER (Também conhecido como: Wrapper ou Translator)
  • 15. 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.
  • 16. 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.
  • 17. 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.
  • 18. 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.
  • 19. 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.
  • 20. Diagrama de um Object Adapter  
  • 21. 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          
  • 22. Diagrama de um Class Adapter  
  • 23. 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.
  • 24. 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.
  • 27. A Nova Classe da Biblioteca class ClasseUtil         #def hello ----------> Método depreciado     #    "Hello"     #end           def alo         "Hello"     end     def world         "World"     end end
  • 28. 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
  • 29. Adaptador (Herança) class AdapterH < ClasseUtil     def initialize     end     def hello         self.alo #readaptando a chamada para o metodo correto     end     end
  • 30. ACTIVE RECORDS Aplicação Clássica do Adapter no RoR
  • 31. Mysql, Postgres, Oracle, SqlServer...     results = mysql_connection.query(sql) ou results = sybase_connection.sql(sql) e por aí vai...
  • 32. 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
  • 34. 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
  • 35. 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  
  • 36. Por que não troquei a tomada? Por que não troquei o plugue do dispositivo?
  • 37. 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.
  • 38. FIM Lorena Erdens Matheus Andrade