Bridge GoF Patern

Post on 04-Jul-2015

158 views 1 download

description

Apresentação sobre o parttern bridge para a disciplina da pós-graduação da PUC - Projeto de Sistema de Software. Além da especificação do pattern tem um exemplo em python do padrão.

Transcript of Bridge GoF Patern

Bridge – Design Pattern

Rômulo Jales <romulo@romulojales.com>

O Que é?

v GoF pattern v Padrão Estrutural v Também conhecido por Handle / Body

18/09/13 @LES/PUC-Rio 2

Propósito

v Define uma estrutura independente da implementação para limitar o acoplamento. Não use subclasses a não ser para fazer coisas diferentes!

18/09/13 @LES/PUC-Rio 3

Motivação

v Uso herança tende a tornar as coisas mais difíceis.

v Separar a implementação da abstração.

18/09/13 @LES/PUC-Rio 4

Aplicação

v Evita um vinculo permanente v Abstrações e implementações extensíveis

por subclasses v Mudanças não devem ter impactos nos

clientes v Proliferação de classes v Compartilhar a implementação entre

objetos

18/09/13 @LES/PUC-Rio 5

Estrutura

18/09/13 @LES/PUC-Rio 6

http://oreboladodeturing.files.wordpress.com/2011/08/patternbridge1.jpg

Participantes

v Abstrações (bridge) v Implementação (classes concretas)

18/09/13 @LES/PUC-Rio 7

Colaborações

v A classe abstrata repassa a requisição para o implementador

18/09/13 @LES/PUC-Rio 8

Consequências

v Desacopla a interface v Melhora a extensibilidade v Esconde detalhes de implementação do

cliente

18/09/13 @LES/PUC-Rio 9

Exemplo

class Abstrata(object): def funcao_abs(self, arg): print arg def funcao_repassada_ao_bridge(self, arg): ponto = self.get_ponte(arg) ponto.funcao_assumida(arg) def get_ponte(self, arg): if type(arg) == str: return ImplementadorSTR() elif type(arg) == int: return ImplementadorINT()

18/09/13 @LES/PUC-Rio 10

class Ponte(object): def funcao_assumida(self, arg): raise NotImplemented class ImplementadorSTR(Ponte): def funcao_assumida(self, arg): print "oi sou uma string: " + arg class ImplementadorINT(Ponte): def funcao_assumida(self, arg): print "oi sou um inteiro: " + arg

18/09/13 @LES/PUC-Rio 11

class ClasseCliente(Abstrata): def minha_funcao(self): return "Oi sou do cliente" c = ClasseCliente() print c.minha_funcao() print c.funcao_abs(123) print c.funcao_repassada_ao_bridge(1) print c.funcao_repassada_ao_bridge("1")

18/09/13 @LES/PUC-Rio 12

Exemplo (mais prático...)

v Classe models do Django v Abstrai a persistência em banco v Evoca os implementadores para realizar

comunicação com banco v A classe sabe quem evocar v Cliente não sabe como é feita as

operações

18/09/13 @LES/PUC-Rio 13

Referências

v Design Patterns: Elements of Reusable Object-Oriented Software

18/09/13 @LES/PUC-Rio 14