SlideShare a Scribd company logo
1 of 27
Download to read offline
Padrões de Projeto

       Padrões Estruturais
               Adaptador
Adaptador
• Converte a interface de uma classe em
  uma outra interface que o cliente espera.
• O adaptador permite que classes que
  possuem interfaces incompatíveis
  trabalhem juntas
• Também conhecido como Wrapper



2              Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                 of Reusable OO Software - Gamma
Motivação
• Às vezes um toolkit que é projetado para reuso
  não é reusável somente porque sua interface não
  combina com a interface específica de um
  domínio que uma aplicação requer
• Exemplo: um editor de desenho
    – Abstração chave: Shape
      • Subclasses:
         – LineShape,
         – PolygonShape
         – TextShape --> mais complicado (atualização de tela, gerência de buffer)
3                       Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                          of Reusable OO Software - Gamma
Motivação
• Ideal: usar TextView toolkit de prateleira
    – Mas as interfaces podem não “casar”
    – Opções:
      1) Mudar código de TextView (não faz sentido, além
        de se precisar do código fonte do mesmo)
      2) Definir TextShape para que ele adapte a interface
        de TextView para a de Shape
         •   Existem duas formas de se fazer isto...


4                      Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                         of Reusable OO Software - Gamma
Motivação
• Duas formas:
    – Versão Adaptador de Classe: herdando a
      interface de Shape e a implementação de
      TextView
    – Versão Adaptador de Objeto: compondo uma
      instância de TextView dentro de TextShape e
      implementando TextShape em termos da
      interface de TextView
5                 Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                    of Reusable OO Software - Gamma
Versão Adaptador de Objeto




6           Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
              of Reusable OO Software - Gamma
Aplicação
• Use o padrão Adaptador quando:
    – Deseja-se usar uma classe pré-existente e sua interface
      não combina (“casa”) com a que você precisa
    – Deseja-se criar uma classe reusável que coopere com
      classes não relacionadas ou imprevisíveis, isto é, classe
      que não necessariamente tenham interfaces compatíveis
    – Precisa-se usar várias subclasses pré-existentens, mas e
      impraticável adaptar suas interfaces através de subclasse
      de todos. Um adaptador de objetos pode adaptar a interface
      da classe pai (somente no caso de adaptador de objeto)
7                     Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                        of Reusable OO Software - Gamma
Estrutura (Adaptador de Classe)




8         Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
            of Reusable OO Software - Gamma
Estrutura (Adaptador de Objeto)




9         Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
            of Reusable OO Software - Gamma
Participantes
• Target (Shape)
     – Define uma interface específica de domínio que o Cliente
       usa

• Client (DrawingEditor)
     – Colabora com objetos de acordo com a interface de Target

• Adaptee (TextView)
     – Define uma interface pré-existente que necessita de
       adaptação

• Adapter (TextShape)
     – Adapta a interface de Adaptee para a de Target
10                     Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                         of Reusable OO Software - Gamma
Colaborações
• Clientes chamam operações de uma
  instância do Adaptador (Adapter)
• Por sua vez, o adaptador chama operações
  de Adaptee que atendem à requisição




11            Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                of Reusable OO Software - Gamma
Conseqüências
• Um adaptador de classe:
     – Adapta Adaptee para Target pelo “contrato” com a
       classe concreta Adapter. Como conseqüência, uma
       classe adapter não funcionará quando se deseja
       adaptar uma classe e todas suas subclasses
     – Permite Adapter sobrescrever algum comportamento
       de Adaptee, uma vez que Adapter é uma subclasse de
       Adaptee
     – Introduz somente um objeto e nenhuma indireção de
       ponteiro adicional é necessária para se obter o
       “adaptado”     Livro Texto: Design Pattern - Elements
12                                                       Eduardo N. F. Zagari
                       of Reusable OO Software - Gamma
Conseqüências
• Um adaptador de objeto:
     – Permite que um único Adapter trabalhe com muitos
       Adaptees, isto é, o próprio Adaptee e todas as suas
       subclasses (se alguma). O Adapter também pode
       adicionar funcionalidade a todos os Adaptees de uma
       única vez.
     – Torna mais difícil sobrescrever o comportamento do
       Adaptee. Isto irá requerer além das subclasses de
       Adaptee que se faça que o Adapter se refira a elas ao
       invés do próprio Adaptee
13                   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                       of Reusable OO Software - Gamma
Conseqüências
• Quanto de trabalho os Adaptadores fazem?
     – Isto varia desde a simples conversão das interfaces
       (de Adaptee para Target) até o suporte a um conjunto
       inteiramente diferente de operações
• Adaptadores plugáveis
     – Uma classe é mais reusável quando se minimizam as
       considerações que outras classes devem fazer para
       usá-la. Como? Fazendo a adaptação de interface
       dentro da classe (ver exemplo!)
14                   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                       of Reusable OO Software - Gamma
Implementação
• Embora a implementação do Adaptador
  geralmente seja direta, algumas questões
  para se manter em mente:
     – Em C++, a implementação de um adaptador
       de classe deveria herdar publicamente de
       Target e de modo privado de Adaptee. Assim,
       o Adapter seria um subtipo de Target, mas não
       de Adaptee
15                 Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                     of Reusable OO Software - Gamma
Implementação
• Adaptadores plugáveis:
     – Considere o componente TreeDisplay que pode mostrar
       estruturas de árvores graficamente.
        • Se queremos que ele seja “mais reusável”, não se pode
          querer que os objetos que ele mostre tenham uma interface
          específica
        • Aplicações definem suas próprias estruturas de árvores e
          cada estrutura terá sua própria interface...
     – Primeiro passo: encontrar uma interface minimalista (narrow
       interface) para o Adaptee, isto é, o conjunto mínimo de operações
       que nos permitam realizar a adaptação
16                       Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                           of Reusable OO Software - Gamma
Implementação
• No caso do TreeDisplay, a interface minimalista deve incluir 2
  operações:
     – Uma que define como apresentar um nó em uma estrutura
       hierárquica graficamente
     – Outra que recupere o nó filho
• 3 abordagens para Interface Narrow:
     – Usando operações abstratas
     – Usando objetos delegados
     – Usando adaptadores parametrizados (Smaltalk)



17                       Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                           of Reusable OO Software - Gamma
Operações Abstratas




18       Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
           of Reusable OO Software - Gamma
Objetos Delegados




19      Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
          of Reusable OO Software - Gamma
Exemplo




20   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
Exemplo
• Shape considera BoundingBox pelos cantos.
• TextView define pela origem, altura e largura
• Shape tem a operação CreateManipulator
• TextView não tem operação equivalente
• TextShape é um adaptador entre estas interfaces
     diferentes

21                Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                    of Reusable OO Software - Gamma
Exemplo
• Um adaptador de classes usa herança
     múltipla para adaptar interfaces.
     – A chave é usar um “ramo” da herança para
       herdar a interface e outra para herdar a
       implementação (em C++ a primeira de forma
       pública e a outra privada)


22                  Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                      of Reusable OO Software - Gamma
Exemplo (adaptador de classe)




23        Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
            of Reusable OO Software - Gamma
Exemplo




24   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
Exemplo




25   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
Exemplo (adaptador de objeto)




26        Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
            of Reusable OO Software - Gamma
Exemplo




27   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma

More Related Content

What's hot

Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto AdapterMatheus Andrade
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singletonWendel Moreira
 
Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...George Mendonça
 
Apresentação java
Apresentação javaApresentação java
Apresentação javamunosai
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoElaine Cecília Gatto
 
Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...
Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...
Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...Sandro Andrade
 

What's hot (20)

Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Design Patterns - Adapter e Decorator
Design Patterns - Adapter e DecoratorDesign Patterns - Adapter e Decorator
Design Patterns - Adapter e Decorator
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
Apresentação seminario padrao_proxy
Apresentação seminario padrao_proxyApresentação seminario padrao_proxy
Apresentação seminario padrao_proxy
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Iniciando no Codeigniter
Iniciando no CodeigniterIniciando no Codeigniter
Iniciando no Codeigniter
 
Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...
Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...
Palestra do FISL15: QtModeling: Metamodelagem e Model-Driven Software Enginee...
 

Viewers also liked

SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisEduardo Nicola F. Zagari
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosEduardo Nicola F. Zagari
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerEduardo Nicola F. Zagari
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCEduardo Nicola F. Zagari
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasEduardo Nicola F. Zagari
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelEduardo Nicola F. Zagari
 

Viewers also liked (15)

Padrões-01 - Introdução
Padrões-01 - IntroduçãoPadrões-01 - Introdução
Padrões-01 - Introdução
 
ICC-07 Softwares - Introdução
ICC-07 Softwares - IntroduçãoICC-07 Softwares - Introdução
ICC-07 Softwares - Introdução
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas Operacionais
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
Classificação de Documentos
Classificação de DocumentosClassificação de Documentos
Classificação de Documentos
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - Broker
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVC
 
ICC-05 Álgebra Booleana
ICC-05 Álgebra BooleanaICC-05 Álgebra Booleana
ICC-05 Álgebra Booleana
 
ICC-06 Periféricos - Introdução
ICC-06 Periféricos - IntroduçãoICC-06 Periféricos - Introdução
ICC-06 Periféricos - Introdução
 
ICC-02 Evolução dos Computadores
ICC-02 Evolução dos ComputadoresICC-02 Evolução dos Computadores
ICC-02 Evolução dos Computadores
 
ICC-01 História dos Computadores
ICC-01 História dos ComputadoresICC-01 História dos Computadores
ICC-01 História dos Computadores
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - Camadas
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - Microkernel
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 

Similar to Padrão Adaptador

Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - AdapterJuliana Cindra
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
BlingTech - Padrões de Projeto
BlingTech - Padrões de ProjetoBlingTech - Padrões de Projeto
BlingTech - Padrões de ProjetoFernando Henrique
 
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
 
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
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetosGustavo Souza
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introduçãoelliando dias
 
Word embeddings introdução, motivação e exemplos
Word embeddings  introdução, motivação e exemplosWord embeddings  introdução, motivação e exemplos
Word embeddings introdução, motivação e exemplosFelipe
 

Similar to Padrão Adaptador (20)

Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - Adapter
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
BlingTech - Padrões de Projeto
BlingTech - Padrões de ProjetoBlingTech - Padrões de Projeto
BlingTech - Padrões de Projeto
 
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
 
UMLIntro.pptx
UMLIntro.pptxUMLIntro.pptx
UMLIntro.pptx
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
UMLIntro.pdf
UMLIntro.pdfUMLIntro.pdf
UMLIntro.pdf
 
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
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetos
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Strategy pattern
Strategy patternStrategy pattern
Strategy pattern
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Word embeddings introdução, motivação e exemplos
Word embeddings  introdução, motivação e exemplosWord embeddings  introdução, motivação e exemplos
Word embeddings introdução, motivação e exemplos
 

More from Eduardo Nicola F. Zagari

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasEduardo Nicola F. Zagari
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSEduardo Nicola F. Zagari
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxEduardo Nicola F. Zagari
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealEduardo Nicola F. Zagari
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Eduardo Nicola F. Zagari
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Eduardo Nicola F. Zagari
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Eduardo Nicola F. Zagari
 

More from Eduardo Nicola F. Zagari (10)

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes Linux
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo Real
 
Módulo de Estudos em Tempo Real
Módulo de Estudos em Tempo RealMódulo de Estudos em Tempo Real
Módulo de Estudos em Tempo Real
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
 
ICC-03 Organização dos Computadores
ICC-03 Organização dos ComputadoresICC-03 Organização dos Computadores
ICC-03 Organização dos Computadores
 
ICC-04 Sistemas Numéricos
ICC-04 Sistemas NuméricosICC-04 Sistemas Numéricos
ICC-04 Sistemas Numéricos
 

Padrão Adaptador

  • 1. Padrões de Projeto Padrões Estruturais Adaptador
  • 2. Adaptador • Converte a interface de uma classe em uma outra interface que o cliente espera. • O adaptador permite que classes que possuem interfaces incompatíveis trabalhem juntas • Também conhecido como Wrapper 2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 3. Motivação • Às vezes um toolkit que é projetado para reuso não é reusável somente porque sua interface não combina com a interface específica de um domínio que uma aplicação requer • Exemplo: um editor de desenho – Abstração chave: Shape • Subclasses: – LineShape, – PolygonShape – TextShape --> mais complicado (atualização de tela, gerência de buffer) 3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 4. Motivação • Ideal: usar TextView toolkit de prateleira – Mas as interfaces podem não “casar” – Opções: 1) Mudar código de TextView (não faz sentido, além de se precisar do código fonte do mesmo) 2) Definir TextShape para que ele adapte a interface de TextView para a de Shape • Existem duas formas de se fazer isto... 4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 5. Motivação • Duas formas: – Versão Adaptador de Classe: herdando a interface de Shape e a implementação de TextView – Versão Adaptador de Objeto: compondo uma instância de TextView dentro de TextShape e implementando TextShape em termos da interface de TextView 5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 6. Versão Adaptador de Objeto 6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 7. Aplicação • Use o padrão Adaptador quando: – Deseja-se usar uma classe pré-existente e sua interface não combina (“casa”) com a que você precisa – Deseja-se criar uma classe reusável que coopere com classes não relacionadas ou imprevisíveis, isto é, classe que não necessariamente tenham interfaces compatíveis – Precisa-se usar várias subclasses pré-existentens, mas e impraticável adaptar suas interfaces através de subclasse de todos. Um adaptador de objetos pode adaptar a interface da classe pai (somente no caso de adaptador de objeto) 7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 8. Estrutura (Adaptador de Classe) 8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 9. Estrutura (Adaptador de Objeto) 9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 10. Participantes • Target (Shape) – Define uma interface específica de domínio que o Cliente usa • Client (DrawingEditor) – Colabora com objetos de acordo com a interface de Target • Adaptee (TextView) – Define uma interface pré-existente que necessita de adaptação • Adapter (TextShape) – Adapta a interface de Adaptee para a de Target 10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 11. Colaborações • Clientes chamam operações de uma instância do Adaptador (Adapter) • Por sua vez, o adaptador chama operações de Adaptee que atendem à requisição 11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 12. Conseqüências • Um adaptador de classe: – Adapta Adaptee para Target pelo “contrato” com a classe concreta Adapter. Como conseqüência, uma classe adapter não funcionará quando se deseja adaptar uma classe e todas suas subclasses – Permite Adapter sobrescrever algum comportamento de Adaptee, uma vez que Adapter é uma subclasse de Adaptee – Introduz somente um objeto e nenhuma indireção de ponteiro adicional é necessária para se obter o “adaptado” Livro Texto: Design Pattern - Elements 12 Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 13. Conseqüências • Um adaptador de objeto: – Permite que um único Adapter trabalhe com muitos Adaptees, isto é, o próprio Adaptee e todas as suas subclasses (se alguma). O Adapter também pode adicionar funcionalidade a todos os Adaptees de uma única vez. – Torna mais difícil sobrescrever o comportamento do Adaptee. Isto irá requerer além das subclasses de Adaptee que se faça que o Adapter se refira a elas ao invés do próprio Adaptee 13 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 14. Conseqüências • Quanto de trabalho os Adaptadores fazem? – Isto varia desde a simples conversão das interfaces (de Adaptee para Target) até o suporte a um conjunto inteiramente diferente de operações • Adaptadores plugáveis – Uma classe é mais reusável quando se minimizam as considerações que outras classes devem fazer para usá-la. Como? Fazendo a adaptação de interface dentro da classe (ver exemplo!) 14 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 15. Implementação • Embora a implementação do Adaptador geralmente seja direta, algumas questões para se manter em mente: – Em C++, a implementação de um adaptador de classe deveria herdar publicamente de Target e de modo privado de Adaptee. Assim, o Adapter seria um subtipo de Target, mas não de Adaptee 15 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 16. Implementação • Adaptadores plugáveis: – Considere o componente TreeDisplay que pode mostrar estruturas de árvores graficamente. • Se queremos que ele seja “mais reusável”, não se pode querer que os objetos que ele mostre tenham uma interface específica • Aplicações definem suas próprias estruturas de árvores e cada estrutura terá sua própria interface... – Primeiro passo: encontrar uma interface minimalista (narrow interface) para o Adaptee, isto é, o conjunto mínimo de operações que nos permitam realizar a adaptação 16 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 17. Implementação • No caso do TreeDisplay, a interface minimalista deve incluir 2 operações: – Uma que define como apresentar um nó em uma estrutura hierárquica graficamente – Outra que recupere o nó filho • 3 abordagens para Interface Narrow: – Usando operações abstratas – Usando objetos delegados – Usando adaptadores parametrizados (Smaltalk) 17 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 18. Operações Abstratas 18 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 19. Objetos Delegados 19 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 20. Exemplo 20 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 21. Exemplo • Shape considera BoundingBox pelos cantos. • TextView define pela origem, altura e largura • Shape tem a operação CreateManipulator • TextView não tem operação equivalente • TextShape é um adaptador entre estas interfaces diferentes 21 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 22. Exemplo • Um adaptador de classes usa herança múltipla para adaptar interfaces. – A chave é usar um “ramo” da herança para herdar a interface e outra para herdar a implementação (em C++ a primeira de forma pública e a outra privada) 22 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 23. Exemplo (adaptador de classe) 23 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 24. Exemplo 24 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 25. Exemplo 25 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 26. Exemplo (adaptador de objeto) 26 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 27. Exemplo 27 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma