Você está na página 1de 28

Universidade Federal do Rio Grande do Norte Instituto metrpole Digital Programao Orientada Objetos

Padres de Projeto Bridge


ANTHONINI RODRIGUES, ROBERTO FILHO 2013

Tpicos abordados

Motivao Aplicabilidade Estrutura Colaboraes Consequncias Exemplos

Referncias

Bridge

Bridge

A inteno do Padro de Projeto Bridge desacoplar uma abstrao de sua implementao, de forma que as duas possam variar independentemente De novo
A

inteno do Padro de projeto Bridge desacoplar uma abstrao de sua implementao de tal forma que a implementao possa ser facilmente trocada

Como?
Encapsulando

os detalhes de implementao em um objeto que um componente da abstrao

Motivao

Quando uma abstrao tem varias implementaes possveis, a maneira mais usual de acomod-las usando herana Essa uma abordagem nem sempre muito flexvel

A herana liga uma implementao abstrao permanentemente, o que torna difcil modificar, aumentar e reutilizar abstraes independentemente.

Aplicabilidade

Use o padro Bridge quando:

Desejar evitar um vnculo permanente entre uma abstrao e sua implementao Tanto as abstraes como suas implementaes tiverem de ser extensveis por meio de subclasses Mudanas na implementao de uma abstrao no puderem ter impacto sobre os clientes (C++) voc desejar ocultar completamente a implementao de uma abstrao dos clientes Tiver uma proliferao de classes

Desejar compartilhar uma implementao entre mltiplos objetos e este fato deve estar oculto do cliente

Aplicabilidade

O padro Bridge til quando se tem uma abstrao que tem diferentes implementaes

Este padro permite que a abstrao e a sua implementao variem independentemente


O projeto e a implementao so mais robustos e mais flexveis s mudanas futuras quando se usa o padro

Estrutura

Estrutura do padro Bridge

Colaboraes

Abstraction repassa as solicitaes dos cliente para seu objeto Implementor

Consequncias

10

Desacopla a interface de implementao Extensibilidade melhorada

Ocultao de detalhes de implementao dos clientes

11

Exemplo 1

Bridge Exemplo

12

Para o exemplo as implementaes seriam as classes de Janela das plataformas. Vamos iniciar construindo elas, de maneira bem simples. A primeira classe ser a interface comum a todas as implementaes, chamadas de JanelaImplementor:

Bridge - Exemplo

13

Essa a classe abstrata que vai fornecer uma interface de acesso comum para as abstraes de janelas:

Bridge - Exemplo

14

Vamos ver agora a classe concreta que desenha a janela na plataforma Windows:

Bridge - Exemplo

15

Vamos ver agora a classe concreta que desenha a janela na plataforma Linux:

Bridge - Exemplo

16

Agora veja o exemplo da classe de JanelaDialogo, que abstrai uma janela de dilogo para todas as plataformas:

Bridge - Exemplo

17

Para uma janela de aviso por exemplo, bastaria um boto Ok, ento sua implementao seria algo do tipo:

Bridge - Exemplo

18

Diagrama de classes soluo exemplo Padro de Projeto Bridge

19

Exemplo 2

Bridge - Exemplo

20

Para o exemplo as implementaes seriam as classes de uma fbrica de veculos. Inicialmente a fbrica s tem o tipo carro e uma oficina de produo e outra de montagem.

Cliente

Carro

Produzir carro

Montar Carro

Bridge - Exemplo
Problema
Suponha

21

motos

agora, que a fbrica tambm produz

Soluo
A

soluo mais comum seria criamos uma classe abstrata Veiculo, e fazemos com que ela seja superclasse tanto de carro quanto de moto O cliente agora se comunica com objetos Veiculo Sendo assim, temos uma nova soluo

Bridge - Exemplo

Cliente

22
Veiculo

Infelizmente, esta abordagem traz novos problemas. Observe a 4 linha do diagrama

As classes da linha 4 representam quatro tipos especficos de oficina de veculos


E se eu tiver um outro tipo de veculo?

Carro

Moto

Seis tipos diferentes de oficina ( trs rvores de programas)

Produzir Carro

Montar Carro

Produzir Moto

Montar Moto

E se eu tiver um outro tipo de Oficina, outra variao de conceito?

Terei nove tipos diferentes de Veculos(para os trs tipos de veiculo)

Bridge - Exemplo

23

A exploso de classes surge porque, nesta soluo, a abstrao (os tipos de veiculo) e a implementao (tipos de oficina) esto fortemente acoplados. Cada tipo de figura (abstrao) deve saber que tipo de mdulo externo (implementao) ele deve utilizar

Precisamos de um modo de desacoplar as variaes na abstrao das variaes na implementao, de tal forma que o nmero de classes cresa somente linearmente

Bridge - Exemplo

24

Esta exatamente a inteno do padro Bridge

Desacoplar a abstrao de sua implementao, de modo que possam variar independentemente

Abstrao 1 Abstrao 2 Abstrao 3 ...

Implementao A Implementao B Implementao C ...

Bridge - Exemplo

25

Neste projeto, Veiculo usa oficinas para manifestar seu comportamento, chegamos ao padro Bridge

BRIDGE

Veiculo

Oficina

Carro

Moto

Produzir

Montar

Diagrama de classes nova soluo exemplo Padro de Projeto Bridge, com padro aplicado

26

Referncias

Referncias

27

Gamma,E., Johnson, R., Helm, R ., Vlissides, J., Padres de Projeto, Solues Reutilizveis em Software
Padres de Projeto - Bridge http://brizeno.wordpress.com/category/padroes-de-projeto/bridge/ Bridge Pattern - Wikipdia - http://en.wikipedia.org/wiki/Bridge_pattern Bridge Design Pattern - http://javapapers.com/design-patterns/bridgedesign-pattern/ Padres de Projeto - Adapter, Proxy, Composite e Bridge: Bridge ( Lorran Pegoretti, Luiz Marcon Universidade Vila Velha ) http://www.slideshare.net/lorran33/padres-de-projeto-adapter-proxycomposite-e-bridge?from_search=9

28

Obrigado!