14

Click here to load reader

Padrão de Projeto - Adapter

Embed Size (px)

DESCRIPTION

Padrão de Projeto Adapter.

Citation preview

Page 1: Padrão de Projeto - Adapter

PADRÕES DE PROJETO

- ADAPTER -

Juliana da S. Cindra

2007

Page 2: Padrão de Projeto - Adapter

Padrão Adapter

Nome: Adapter. Conhecido como: Wrapper e Translator Classificação: Estrutural 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.

Page 3: Padrão de Projeto - Adapter

Adapter

Classificação segundo GoF:Estrutural de Objeto, Classe.

Classificação segundo Metsker

Interface.

Definição:Converte a interface de uma classe em uma outra interface esperada pelos clientes. Permite que classes de interfaces incompatíveis trabalhem juntas.

Page 4: Padrão de Projeto - Adapter

Motivação

Quando usar Adapter:– Quando uma classe já existente e sua interface

não combinam com a esperada pelo cliente;– Quando 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;

– Quando necessitar usar várias subclasses existentes, mas é impraticável adaptar suas interfaces fazendo um Subclassing de cada uma.

Page 5: Padrão de Projeto - Adapter

Motivação Ex: Liberar o objeto cliente de saber dos detalhes.

Supondo que temos os seguintes requisitos:

– Criar classes para pontos, linhas, e quadrados que têm o comportamento “display”.

– 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”).

Apesar do sistema ter pontos, linhas e quadrados, eu quero que os objetos cliente pensem que o sistema tem apenas formas (“shapes”).

O que temos O que o cliente vê

Page 6: Padrão de Projeto - Adapter

Motivação

Como isso deve ser feito?– Definindo a interface Shape e a implementando

apropriadamente nas subclasses.

Suponha que seja requisitado a criação de Círculo, um novo tipo de Shape.

Page 7: Padrão de Projeto - Adapter

Motivação

Felizmente, eu tenho um amigo que tem uma classe círculo já pronta (XXCircle).

Infelizmente, a classe XXCircle tem os seguintes nomes para suas operações:– displayIt– fillIt– undisplayIt

Eu não posso usar XXCircle porque eu quero preservar o comportamento polimórfico com Shape.

Page 8: Padrão de Projeto - Adapter

Motivação O que deve ser feito?

– Deve-se criar uma nova classe Circle que: Deriva de Shape e, por conseguinte, implementa sua interface. Circle contém XXCircle. Circle delega requisições feitas para o objeto Circle para o objeto XXCircle. Quando um Circle é instanciado, ele instancia o correspondente XXCircle.

Page 9: Padrão de Projeto - Adapter

Motivação

Fragmento de código Java:

Page 10: Padrão de Projeto - Adapter

Estrutura do Padrão Adapter

Participantes:– Cliente: Colabora entre os objetos conforme a interface Alvo.– Alvo: Define a interface de domínio específico que o Cliente utiliza.– Adaptador: Adapta a ClasseExistente para ser utilizada pela classe

Alvo.– ClasseExistente: Define uma interface pré-existente que necessita

ser adaptada.

Page 11: Padrão de Projeto - Adapter

Estruturas

A Estrutura Class Adapter usa herança múltipla (ou implementação de interface)

Client Targetrequest( )

Adaptee

specificRequest( )

Adapterrequest( )

request(){ this.specificRequest()}

Page 12: Padrão de Projeto - Adapter

Estruturas

A Estrutura Object Adapter usa composição e delegação.

Client Target

request( )

Adaptee

specificRequest( )

Adapterrequest( )

request(){ this.adaptee->SpecificRequest()}

Page 13: Padrão de Projeto - Adapter

Conseqüências

Vantagens:– 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.

– Deixa o Adaptador sobrepor algum comportamento do adaptado,desde que o Adaptador seja uma subclasse do adaptado.

– Introduz um único objeto e nenhum ponteiro adicional é necessário para chegar ao adaptado.

Desvantagens: -

Page 14: Padrão de Projeto - Adapter

Bibliografia

http://www.pg.cefetpr.br/coinf/simone/download/TrabalhoFinal.pdf

http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software– http://pt.wikipedia.org/wiki/Adapter