Padrão de Projeto - Adapter

1.731 visualizações

Publicada em

Padrão de Projeto Adapter.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.731
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
61
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Padrão de Projeto - Adapter

  1. 1. PADRÕES DE PROJETO - ADAPTER - Juliana da S. Cindra 2007
  2. 2. Padrão Adapter <ul><li>Nome: Adapter . </li></ul><ul><li>Conhecido como: Wrapper e Translator </li></ul><ul><li>Classificação: Estrutural </li></ul><ul><li>Propósito </li></ul><ul><li>O principal objetivo do Adapter é facilitar a conversão da interface de uma </li></ul><ul><li>classe para outra interface mais interessante para o cliente, fazendo com que </li></ul><ul><li>várias classes possam trabalhar em conjunto independentemente das interfaces </li></ul><ul><li>originais. Às vezes é preciso modificar uma classe que não pode ser alterada </li></ul><ul><li>adequadamente devido à falta do código fonte (alguma biblioteca de classes </li></ul><ul><li>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. </li></ul>
  3. 3. Adapter <ul><li>Classificação segundo GoF: </li></ul><ul><ul><li>Estrutural de Objeto, Classe. </li></ul></ul><ul><li>Classificação segundo Metsker </li></ul><ul><ul><li>Interface. </li></ul></ul><ul><li>Definição : </li></ul><ul><ul><li>Converte a interface de uma classe em uma outra interface esperada pelos clientes. Permite que classes de interfaces incompatíveis trabalhem juntas. </li></ul></ul>
  4. 4. Motivação <ul><li>Quando usar Adapter : </li></ul><ul><ul><li>Quando u ma classe já existente e sua interface não combinam com a esperada pelo cliente; </li></ul></ul><ul><ul><li>Quando s e 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; </li></ul></ul><ul><ul><li>Quando necessita r usar várias subclasses existentes, mas é impraticável a daptar suas interfaces fazendo um Subclassing de cada uma. </li></ul></ul>
  5. 5. Motivação Ex: Liberar o objeto cliente de saber dos detalhes. <ul><li>Supon do que temos os seguintes requisitos: </li></ul><ul><ul><li>Criar classes para pontos, linhas, e quadrados que têm o comportamento “display”. </li></ul></ul><ul><ul><li>Os objetos cliente não devem saber se eles estão lidando com um ponto, uma linha ou um quadrado. Eles apenas sabem que eles têm uma destas formas (“shapes”). </li></ul></ul><ul><li>Apesar do sistema ter pontos, linhas e quadrados, eu quero que os objetos cliente pensem que o sistema tem apenas formas (“shapes”). </li></ul>O que temos O que o cliente vê
  6. 6. Motivação <ul><li>Como isso deve ser feito? </li></ul><ul><ul><li>Defin indo a interface Shape e a implement ando apropriadamente n as subclasses. </li></ul></ul><ul><li>Suponha que seja requisitado a criação de Círculo, um novo tipo de Shape. </li></ul>
  7. 7. Motivação <ul><li>Felizmente, eu tenho um amigo que tem uma classe círculo já pronta (XXCircle). </li></ul><ul><li>Infelizmente, a classe XXCircle tem os seguintes nomes para suas operações: </li></ul><ul><ul><li>displayIt </li></ul></ul><ul><ul><li>fillIt </li></ul></ul><ul><ul><li>undisplayIt </li></ul></ul><ul><li>Eu não posso usar XXCircle porque eu quero preservar o comportamento polimórfico com Shape . </li></ul>
  8. 8. Motivação <ul><li>O que deve ser feito? </li></ul><ul><ul><li>Deve-se criar uma nova classe Circle que: </li></ul></ul><ul><ul><ul><li>Deriva de Shape e, por conseguinte, implementa sua interface. </li></ul></ul></ul><ul><ul><ul><li>Circle contém XXCircle. </li></ul></ul></ul><ul><ul><ul><li>Circle delega requisições feitas para o objeto Circle para o objeto XXCircle. </li></ul></ul></ul><ul><ul><ul><li>Quando um Circle é instanciado, ele instancia o correspondente XXCircle. </li></ul></ul></ul>
  9. 9. Motivação <ul><li>Fragmento de código Java: </li></ul>
  10. 10. Estrutura do Padrão Adapter <ul><li>Participantes: </li></ul><ul><ul><li>Cliente : Colabora entre os objetos conforme a interface Alvo . </li></ul></ul><ul><ul><li>Alvo : Define a interface de domínio específico que o Cliente utiliza. </li></ul></ul><ul><ul><li>Adaptador : Adapta a ClasseExistente para ser utilizada pela classe Alvo . </li></ul></ul><ul><ul><li>ClasseExistente : Define uma interface pré-existente que necessita ser adaptada. </li></ul></ul>
  11. 11. Estruturas <ul><li>A Estrutura Class Adapter u sa herança múltipla (ou implementação de interface) </li></ul>Client Target request( ) Adaptee specificRequest( ) Adapter request( ) request() { this.specificRequest() }
  12. 12. Estruturas <ul><li>A Estrutura Object Adapter u sa composição e delegação. </li></ul>Client Target request( ) Adaptee specificRequest( ) Adapter request( ) request() { this.adaptee->SpecificRequest() }
  13. 13. Conseq ü ências <ul><li>Vantagens: </li></ul><ul><ul><li>Adapta o Adaptador para o Alvo através de uma classe concreta. Como conseqüência, uma classe adaptada não funcionará para adaptar uma classe e suas subclasses. </li></ul></ul><ul><ul><li>Deixa o Adaptador sobrepor algum comportamento do adaptado,desde que o Adaptador seja uma subclasse do adaptado. </li></ul></ul><ul><ul><li>Introduz um único objeto e nenhum ponteiro adicional é necessário para chegar ao adaptado. </li></ul></ul><ul><li>Desvantagens: - </li></ul>
  14. 14. Bibliografia <ul><li>http://www.pg.cefetpr.br/coinf/simone/download/TrabalhoFinal. pdf </li></ul><ul><li>http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software </li></ul><ul><ul><li>http://pt.wikipedia.org/wiki/Adapter </li></ul></ul>

×