Vous êtes sur la page 1sur 29

Ministrio da Educao Universidade Tecnolgica Federal do Paran UTFPR

Campus Medianeira

Especializao em Projeto e Desenvolvimento de Sistemas Baseados em Objetos para Ambiente Internet

Padres de Projetos

Romualdo Rubens de Freitas, M.Sc.


romualdo@utfpr.edu.br

Design Patterns

Apresentao
Bem-vindo(a) Parte III do material para a disciplina de Padres de Projeto. Este material composto de 3 (trs) partes. Cada parte versa sobre um conjunto de padres de projeto, apresentando caractersticas, aplicabilidades, estruturas na forma de Diagramas de Classe da UML e exemplos prticos.

Romualdo Rubens de Freitas

ii

Design Patterns

Licena
O uso deste material est condicionado licena Creative Commons AttributionNoncommercial-Share Alike 2.5 Brazil, que pode ser obtida mediante o acesso ao endereo http://creativecommons.org/licenses/by-nc-sa/2.5/br/.

Resumidamente, com este material possvel realizar: Cpia, distribuio, exibio e execuo; Criao de obras derivadas.

Tendo em mente as seguintes condies: Atribuio: deve-se dar crdito ao autor original; Uso No-Comercial: proibido o uso deste material com fins financeiros; Compartilhamento pela mesma licena: se este material for alterado,

transformado, ou outra obra for criada a parte dele, a obra resultante somente poder ser distribuda mediante licena idntica a esta.

Romualdo Rubens de Freitas

iii

Design Patterns

SUMRIO
PARTE III ....................................................................................................................... 5 Proxy Estrutura ........................................................................................................... 6 Bridge Estrutura.......................................................................................................... 9 Composite Estrutura ................................................................................................. 12 Memento Comportamento........................................................................................ 16 Mediator Comportamento........................................................................................ 19 Flyweight Estrutura .................................................................................................. 22 Interpreter Comportamento..................................................................................... 25 REFERNCIAS ........................................................................................................... 29

Romualdo Rubens de Freitas

iv

Design Patterns

PARTE III

Romualdo Rubens de Freitas

Design Patterns

Proxy Estrutura
Apresentao Este padro de projetos prov acesso controlado a outros objetos por meio de um objeto substituto.

Aplicabilidade Normalmente, quando uma simples referncia a um objeto no suficiente necessitando-se de uma que seja mais sofisticada, pois o acesso ao objeto precisa ser controlado, possivelmente, verificando se os direitos de acesso o permitem. Alguns tipos de proxies que podem, dependendo da situao, ser utilizados so: Proxy Remoto, Proxy Virtual, Proxy de Proteo e Proxy de Referncia Inteligente.

Estrutura

Descrio Tanto RealSubject quanto Proxy implementam a mesma interface, SubjectProxy, o que permite que a aplicao possa tratar objetos Proxy como se fossem objetos RealSubject. RealSubject realiza o trabalho verdadeiro, enquanto Proxy simplesmente controla o acesso a ele. O objeto Proxy mantm uma referncia a RealSubject, instanciando-o ou cuidando de sua criao. Desta forma, as requisies feitas ao objeto Proxy so redirecionadas ao objeto RealSubject de forma controlada.

Romualdo Rubens de Freitas

Design Patterns

Exemplo de Cdigo

Exemplo na API Java A classe java.lang.reflect.Proxy fornece mtodos para a criao de classes e instncias de proxies dinmicos, sendo a super-classe para todos os proxies dinmicos criados por estes mtodos.

Observaes Um Proxy Remoto fornece uma referncia a um objeto localizado em outro espao de endereamento, no mesmo computador ou em um computador conectado rede. O Proxy Virtual possibilita a um objeto que tenha um processo de criao custoso aplicao ser criado somente quando for necessrio. No Proxy de Proteo o acesso ao objeto real controlado e cada cliente tem um nvel diferenciado de acesso. O Proxy de Referncia Inteligente permite controlar, por exemplo, a quantidade de referncias feitas ao objeto real.

Padres Relacionados Adapter e Decorator.

Anti-Pattern Quando a invocao de um mtodo necessita que outras aes sejam tomadas antes que este possa efetivamente ser executado, o padro de projetos Proxy uma boa soluo. Caso a aplicao tenha que tomar cincia (algum processamento, como, por exemplo, verificar

Romualdo Rubens de Freitas

Design Patterns

direitos do usurio) das aes necessrias antes ou depois da invocao de um determinado mtodo, isto a torna complexa, de difcil manuteno e extensibilidade se tal processamento for implementado na aplicao cliente.

Romualdo Rubens de Freitas

Design Patterns

Bridge Estrutura
Apresentao Este padro de projetos possibilita que abstraes sejam desacopladas de suas implementaes, permitindo que ambas possam variar independentemente umas das outras. Este padro til no s quando uma dada classe varia, mas quando o que ela faz tambm varia. Neste sentindo, a classe em si vista como a implementao e o que ela faz como a abstrao.

Aplicabilidade Em casos quando se deseja que a implementao seja selecionada em tempo de execuo evitando o seu vnculo com a abstrao. Quando abstrao e implementao devem ser estendidas por meio de classes derivadas permitindo combinar diferentes abstraes e implementaes.

Estrutura

Descrio A relao entre Abstraction e Implementor conhecida como bridge e todos os mtodos na abstrao so implementados em funo da implementao, pois Abstraction possui uma referncia para Implementor, e todas as classes concretas de Abstraction so declaradas em termos de Abstraction e no de Implementor.

Romualdo Rubens de Freitas

Design Patterns

Exemplo de Cdigo

Romualdo Rubens de Freitas

10

Design Patterns

Exemplo na API Java

Observaes Apesar de os padres de projeto State, Strategy, Bridge e, em menor grau, Adapter terem estruturas semelhantes, eles so aplicados para a soluo de diferentes problemas.

Padres Relacionados Abstract Factory e Adapter.

Anti-Pattern Quando uma implementao est diretamente vinculada sua abstrao tem-se o antipattern para o padro de projetos Bridge, pois se novos requisitos surgirem, tanto para a abstrao quanto para a implementao, a proliferao de classes aumentar muito, tornado a evoluo da aplicao difcil e trabalhosa.

Romualdo Rubens de Freitas

11

Design Patterns

Composite Estrutura
Apresentao Objetos so compostos em uma estrutura semelhante a uma rvore para representar hierarquias todo-parte. Assim, este padro de projetos permite que elementos primitivos e composies de elementos sejam tratados de forma semelhante.

Aplicabilidade Quando se deseja modelar relaes de componentes e estes, por sua vez, tambm so constitudos de outros componentes.

Estrutura

Descrio A aplicao cliente faz uso de ComponentComposite para ter acesso aos objetos na composio. A interface ComponentComposite, por sua vez, define uma interface padro para todos os objetos na composio, tanto para elementos simples ou primitivos (Leaf), quanto para elementos compostos (Composite). Leaf implementa os mtodos para os elementos da composio, enquanto ComponentComposite implementa os mtodos relacionados aos elementos na composio. Tanto Leaf quanto Composite implementam ComponentComposite, mas, no entanto, alguns dos mtodos de ComponentComposite no fazem sentido a Leaf, da mesma forma que outros no fazem sentido a ComponentComposite. Neste caso, possvel realizar uma implementao padro, como lanar uma exceo, por exemplo, nos mtodos definidos

Romualdo Rubens de Freitas

12

Design Patterns

em ComponentComposite. Assim, os mtodos que interessam a Leaf sero sobrescritos, da mesma forma sero sobrescritos os que interessam a Composite. Se um mtodo que no possui relao com Leaf, por exemplo, for invocado, a exceo ser lanada.

Exemplo de Cdigo

Romualdo Rubens de Freitas

13

Design Patterns

Exemplo na API Java

Observaes O padro de projetos Composite pode ser dividido, basicamente, em dois grupos: Composio de Relao e Composio Taxonmica. No primeiro caso, a relao todo-parte d-se pela composio de objetos complexos feita de objetos menores, que podem, tambm, ser compostos de objetos ainda menores. J no segundo caso, a relao de composio existe entre objetos de tipos que so mais ou menos gerais. A Composio Taxonmica geralmente utilizada quando se deseja percorrer os seus elementos, encontrar alguma informao ou processar um elemento com base em algum contexto. Este processamento realizado pela aplicao cliente. A Composio de Relao implementada levando-se em considerao o comportamento desejado, o que ter diferentes implicaes quanto ao encapsulamento, que pode ser: Comportamento por Agregao cuja implementao do comportamento est vinculada ao percorrimento de todos os elementos filhos para que se possa realizar o processamento da composio; Comportamento Caso Melhor/Pior quando a implementao do comportamento leva em considerao o processamento dos elementos filhos e, caso algum no satisfaa determinada condio, a composio como um todo no a satisfar tambm; Comportamento Investigatrio caso em que a aplicao cliente realizar o percorrimento na composio, pois somente esta saber se um determinado elemento satisfaz ou no um dado critrio.

Padres Relacionados Decorator, Flyweight, Iterator e Visitor.

Romualdo Rubens de Freitas

14

Design Patterns

Anti-Pattern No anti-pattern deste padro de projetos a composio substituda por diversas referncias aos elementos que uma dada classe deve possuir. Para que esta classe possa processar um novo elemento, outra referncia deve ser acrescentada, o que, muito provavelmente, acarretar a mudana no processamento das varias partes.

Romualdo Rubens de Freitas

15

Design Patterns

Memento Comportamento
Apresentao Este padro de projetos baseia-se em dois objetos: o objeto Originator e o objeto Caretaker. O primeiro qualquer objeto da aplicao, enquanto o segundo necessita realizar algum processamento no primeiro, mas precisa que o estado inicial possa ser restaurado. Desta forma, o conceito de encapsulamento no violado, o que, de outra forma, exporia aplicao os detalhes de implementao do objeto que sofrer o processamento.

Aplicabilidade Quando se deseja realizar algum processamento temporrio em determinado objeto da aplicao, o padro de projetos Memento aplicado de tal forma que um instantneo (snapshot) do estado (ou de parte deste) do objeto em questo seja salvo para ser restaurado posteriormente ao processamento realizado.

Estrutura

Descrio O objeto Caretaker deve realizar algum processamento com o objeto Originator, possivelmente mudando seu estado. Antes que isto acontea, o objeto Caretaker pede ao objeto Originator por uma referncia a Memento, realiza o processamento desejado e devolve a referncia a Memento ao objeto Originator para que seu estado seja restaurado.

Romualdo Rubens de Freitas

16

Design Patterns

Exemplo de Cdigo

Romualdo Rubens de Freitas

17

Design Patterns

Exemplo na API Java

Observaes A implementao deste padro de projetos deve ser realizada com cautela, pois o objeto Originator pode modificar outros objetos e este padro de projetos age sobre um nico objeto.

Padres Relacionados Command e Iterator.

Anti-Pattern Para este padro de projetos o seu anti-pattern a falta da possibilidade de restaurao do estado do objeto com o qual se deseja realizar algum processamento (Originator). Mesmo que a aplicao acrescente a possibilidade de restaurao de estado de um dado objeto sem a aplicao deste padro de projetos, ainda seria o uso do anti-pattern, pois a aplicao precisaria expor os detalhes de implementao do objeto em questo.

Romualdo Rubens de Freitas

18

Design Patterns

Mediator Comportamento
Apresentao Este padro de projetos prov uma interface unificada a um conjunto de interfaces em um subsistema, fazendo com que a comunicao entre os vrios objetos do subsistema seja realizada por um objeto. Desta forma, os objetos do subsistema deixam de manter relaes entre si, reduzindo, assim, o acoplamento.

Aplicabilidade A aplicabilidade para este padro de projetos d-se quando se quer separar a comunicao que vrios objetos tm entre si atravs de uma interface bem definida, diminuindo, assim, suas interdependncias.

Estrutura

Descrio Objetos Colleague so desacoplados uns dos outros. As classes concretas de Colleague conversam com a implementao concreta de Mediator, que, por sua vez, conduz a troca de mensagens entre objetos Colleague.

Romualdo Rubens de Freitas

19

Design Patterns

Exemplo de Cdigo

Romualdo Rubens de Freitas

20

Design Patterns

Exemplo na API Java

Observaes Este padro de projetos, bem como os padres Chain of Responsibility, Command e Observer realizam o desacoplamento entre objetos remetentes e destinatrios, mas com diferenas. O primeiro passa o remetente ao longo de uma cadeia de destinatrios em potencial. O segundo descreve uma conexo entre remetente e destinatrio mediante o uso de uma subclasse. E o ltimo especifica uma interface que realiza um alto desacoplamento entre vrios destinatrios, que sero notificados de alguma mudana.

Padres Relacionados Faade e Observer.

Anti-Pattern O anti-pattern para este padro de projetos trata do alto acoplamento entre classes que necessitam se relacionarem possuem entre si. A evoluo e manuteno deste tipo de cdigo trazem uma srie de dificuldades, entre elas a leitura impraticvel do cdigo para reconhecer quem se relaciona com quem; o acrscimo de uma nova classe que necessita manter uma relacionamento com outras classes que j se relacionam.

Romualdo Rubens de Freitas

21

Design Patterns

Flyweight Estrutura
Apresentao Este padro de projetos se prope s aplicaes que necessitam de grandes quantidades de dados, porm usando o compartilhamento de objetos, evitando, assim, o consumo (muitas alocaes) de memria.

Aplicabilidade Aplica-se este padro de projetos quando h a necessidade de se compartilhar um grande volume de dados. A aplicao cria os dados uma vez e os compartilha atravs de um ou mais objetos.

Estrutura

Descrio Flyweight declara uma interface comum a partir da qual classes concretas recebero e atuaro sobre estado extrnseco (aquele que dependente do contexto no qual o objeto est atuando). A classe (fbrica) FlyweightFactory cria e cuida de objetos Flyweight, que so compartilhados. Quando um ClientFlyweight requisita um objeto Flyweight, a fbrica devolve a instncia existente ou cria uma. ConcreteFlyweight implementa Flyweight para que o estado intrnseco (aquele que independente do estado no qual o objeto est atuando)

Romualdo Rubens de Freitas

22

Design Patterns

possa ser armazenado, pois este objeto deve ser compartilhado. s vezes, possvel que uma subclasse de Flyweight no precise ser compartilhada. Neste caso,

UnsharedConcreteFlyweight faz este papel e comum que esta implementao tenha objetos ConcreteFlyweight como seus filhos.

Exemplo de Cdigo

Romualdo Rubens de Freitas

23

Design Patterns

Exemplo na API Java A classe java.lang.String um exemplo da aplicao deste padro de projetos, pois a Mquina Virtual Java (JVM Java Virtual Machine) faz uso do mesmo objeto String para representar cadeias de caracteres que so compostas pela mesma seqncia de caracteres, desde que no tenham sido passadas ao construtor de java.lang.String.

Observaes Em comparao com o padro de projetos Faade, que permite que um nico objeto represente um subsistema completo, o padro de projetos Flyweight permite criar uma grande quantidade de pequenos objetos.

Padres Relacionados Composite, State e Strategy.

Anti-Pattern A cada processamento uma quantidade pequena de informaes necessria sua realizao. Se a cada realizao deste processamento novos objetos para estas informaes forem criados, a aplicao ter seu desempenho comprometido e haver uma alta redundncia de objetos contendo o mesmo estado.

Romualdo Rubens de Freitas

24

Design Patterns

Interpreter Comportamento
Apresentao Padro de projetos utilizado para modelar a gramtica para uma linguagem especfica a um domnio de problemas.

Aplicabilidade Analisadores de expresses regulares, expresses algbricas e partituras musicais (um dado som e sua durao), alm de linguagens de consulta (query language) e protocolos de comunicao so exemplos da aplicabilidade deste padro de projetos.

Estrutura

Descrio AbstractExpression declara a operao comum a todos os elementos na rvore de sintaxe abstrata, enquanto TerminalExpression implementa tal operao para um determinado elemento terminal (que no pode ser definido em termos de outros elementos). NonterminalExpression implementa a mesma operao de forma que esta possa ser chamada recursivamente para cada smbolo na gramtica e Context possui a informao que

Romualdo Rubens de Freitas

25

Design Patterns

global ao interpretador. Como exemplo, tem-se, a seguir, a gramtica que define expresses regulares:
expresso ::= literal | alternativa | seqncia | repetio | ( expresso ) alternativa ::= expresso | expresso seqncia ::= expresso & expresso repetio ::= expresso * literal ::= a | b | c | ... { a | b | c | ... }*

Exemplo de Cdigo

Romualdo Rubens de Freitas

26

Design Patterns

Exemplo na API Java

Observaes Este padro de projetos bem pouco aplicado em aplicaes de um modo geral, sendo mais utilizado em aplicaes especficas, nas quais se faz necessrio a criao de uma linguagem para um determinado domnio de aplicao.

Romualdo Rubens de Freitas

27

Design Patterns

Padres Relacionados Composite, Flyweight, Iterator e Visitor.

Anti-Pattern A definio de uma linguagem para um domnio um problema de soluo complexa. Assim, torna-se difcil o desenvolvimento de uma aplicao que no use este padro de projetos, visto que ele possui uma aplicao bem especfica.

Romualdo Rubens de Freitas

28

Design Patterns

REFERNCIAS
AntiPatterns. <http://www.antipatterns.com/> Acesso 27/04/2008. FREEMAN, Eric; FREEMAN, Elisabeth; BATES, Bert; SIERRA, Kathy. Head First Design Patterns OReilly: 2004. GAMMA, Erich; HELM, Richard; JOHNSON, Ralph; VLISSIDES, John. elements of reusable object-oriented software Addison-Wesley: 1994. Design Patterns:

HOUSTON, Vince. Design Patterns <http://www.vincehuston.org/dp/> Acesso 27/04/2008. Net Objectives The Net Objectives Pattern Repository

<http://www.netobjectivesrepository.com/> Acesso 27/04/2008. SHALLOWAY, Alan; TROTT, James R.. Design Patterns Explained: a new perspective on object-oriented design Addison-Wesley: 2004. SourceMaking. AntiPatterns <http://sourcemaking.com/antipatterns/> Acesso 27/04/2008. SourceMaking. 27/04/2008. Design Patterns <http://sourcemaking.com/design_patterns/> Acesso

Wikipedia: The Free Encyclopedia. Design pattern (computer science) <http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29> Acesso 27/04/2008. Wikipedia: The Free Encyclopedia. Acesso 27/04/2008. Anti-pattern <http://en.wikipedia.org/wiki/Anti-pattern>

Wikipedia: The Free Encyclopedia. Padres de projeto de software <http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software> Acesso 27/04/2008.

Romualdo Rubens de Freitas

29

Vous aimerez peut-être aussi