Padrões de Projeto - Adapter, Proxy, Composite, Bridge

download Padrões de Projeto - Adapter, Proxy, Composite, Bridge

of 52

description

Apresentação sobre Padrões de Projeto para desenvolvimento OO, abordando os padrões:AdapterProxyCompositeBridgeApresentado para avaliação da matéria de Engenharia de Software II da Universidade de Vila Velha.Alunos: Lorran Pegoretti e Luiz MarconTruma: CC5M

Transcript of Padrões de Projeto - Adapter, Proxy, Composite, Bridge

Padres de Projeto

Universidade Vila Velha

Lorran Pegoretti, Luiz Marcon

Trabalho realizado para avaliao na disciplina de Engenharia de Software II, do curso de Cincia da Computao, turno matutino, da Universidade de Vila Velha (UVV), ministrada pelo professor Cristiano Biancardi.2013

Padres de Projeto11Tpicos abordadosPadro de ProjetoAdapterProxyCompositeBridgeConclusesReferncias2Padro de Projeto3Padro de ProjetoUm padro um conjunto de informaes instrutivas que possui um nome e que capta a estrutura essencial e o raciocnio de uma famlia de solues comprovadamente bem sucedidas para um problema repetido que ocorre sob um determinado contexto e um conjunto de repercusses

Um Padro de Projeto de Software (Design Pattern) descreve uma soluo para um problema que ocorre com frequncia durante o desenvolvimento de software, podendo ser considerado como um par problema/soluo

UmPadro de Projeto de Softwareno um cdigo final, uma descrio ou modelo de como resolver o problema do qual trata, que pode ser usada em muitas situaes diferentes.4Padro de ProjetoUm padro de projeto defineNomeTodo padro deve ter um nome significativo. Pode ser uma nica palavra ou frase curta que se refira ao padro e ao conhecimento ou estrutura descritos por ele. Se o padro possuir mais do que um nome comumente usado ou reconhecvel na literatura, subsees Aliases ou Also know as devem ser criadas

Problema Estabelece o problema a ser resolvido pelo padro, descreve a inteno e objetivos do padro perante o contexto e foras especficas

Soluo Relacionamentos estticos e regras dinmicas descrevendo como obter o resultado desejado. Equivale a dar instrues que descrevem como o problema resolvido, podendo para isso utilizar texto, diagramas e figuras

5Padro de ProjetoUm padro de projeto defineContexto (Quando aplicar a soluo)Pr-condies dentro das quais o problema e sua soluo costumam ocorrer e para as quais a soluo desejvel, o que reflete a aplicabilidade do padro. Pode tambm ser considerado como a configurao inicial do sistema antes da aplicao do padro

ResultadoO estado ou configurao do sistema aps a aplicao do padro, ou seja, as consequncias (tanto boas quanto ruins). Descreve as ps-condies e efeitos colaterais do padro6Padro de ProjetoVisam facilitar a reutilizao de solues de desenho, isto , solues na fase de projeto do software

Estabelecem um vocabulrio comum de desenho, facilitando comunicao, documentao e aprendizado dos sistemas desoftware7Padro de ProjetoClassificaoQuanto ao EscopoClassesObjetosQuanto ao seu propsitoCriacionalComportamentalEstruturalDiz respeito a composio de objetos e classes. Exemplos:AdapterBridgeCompositeDecoratorFacadeFlyweightProxy

8Classes: Tratam do relacionamento entre classes e subclasses.Objetos: Tratam relacionamentos entre objetos e por isso podem ser alterados em tempo de execuo.Criacional: Diz respeito ao processo de criao de um objeto.Comportamental: Caracteriza o modo como classes e objetos interagem e compartilham responsabilidades.

8Adapter9AdapterA inteno do Padro Adapter converter a interface de uma classe para uma outra que os clientes esperam. O Adapter permite que classes com interfaces incompatveis passem a trabalhar em conjunto

Basicamente, isso quer dizer que precisamos de uma maneira de criar uma nova interface para um objeto que funciona, mas que possui uma interface errada

1010AdapterO padro Adapter muito utilizado quando precisamos encaixar uma nova biblioteca de classes, adquirida de um fornecedor, em um sistema de software j existente, porm essas bibliotecas de classe do novo fornecedor so diferentes das bibliotecas de classes do fornecedor antigo

A definio oficial do padro Adapter: O Padro Adapter converte uma interface de uma classe para outra interface que o cliente espera encontrar. O Adaptador permite que classes com interfaces incompatveis trabalhem juntas

O adaptador converte UMA interface para outra, porm, tambm poderamos ter um caso em que precisaramos adaptar mais de uma classe, nesse caso entra em cena outro padro de projeto, o Facade

1111Adapter

Diagrama de classe do Padro Adapter Fonte: http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/2646712No diagrama de classe acima tem-se o Client, que quem acessa a interface do Adaptador e a partir desta interface ele far uma solicitao ao adaptador. O Adaptador, por sua vez, implementa a interface alvo (Target) e comunica-se com o Adaptado (Adaptee). O Adaptado a nova biblioteca do fornecedor que est sendo inserida no sistema. No exemplo ficar mais clara a funo de cada um dos elementos explicitados no diagrama de classes acima.

12AdapterExemplo - Cdigo

1313AdapterExemplo1414AdapterComparao Adapter e FacadeFacadeAdapterComentrioAs classe j existem?SimSimJ tenho classes em ambosExiste uma interface que devemos projetar?NoSimNo facade, eu no preciso projetar uma interface como no Adapter.Um objeto precisa ter comportamento polimrfico?NoProvvelNo estou interessado no comportamento polimrfico no Facade, enquanto que em Adapter provavelmente estou. necessrio que seja uma interface simples?SimNoNo caso do padro Facade, a motivao simplificar a interface. Com o Adapter, eu estou tentando projetar uma interface existente e no posso simplificar as coisas, mesmo que seja possvel simplific-la.Tabela 1 - Comparao padro Facade com padro Adapter.1515Proxy16ProxyO objetivo principal encapsular um objeto atravs de um outro objeto que possui a mesma interface, de forma que o segundo objeto, conhecido como Proxy, controla o acesso ao primeiro, que o objeto real.

1717Proxy - VantagensPermite deixar transparente o local (endereo) do objeto real. O cliente no precisa conhecer se o objeto remoto ou no, este tipo de proxy conhecido comoRemote Proxy.

til para realizar otimizaes, como cache de objetos. Tambm pode ser implementado rotinas de logs e controle de acesso (segurana). Este tipo de proxy conhecido comoVirtual Proxy

1818Proxy - Diagrama

Diagrama de classes geral Padro de Projeto Proxy1919Proxy Exemplo de usoO framework Hibernate tambm utiliza o pattern Proxy, por exemplo ao fazer o lazy-loading, tcnica utilizado para acessar o banco de dados apenas quando for necessrio. Muitas vezes quando trabalhamos com o Hibernate, e uma busca realizada, por exemplo usando o mtodo session.load(id), um Proxy para o objeto real retornado. Neste caso o objeto ainda no est completamente preenchido,pois nenhum SQL foi realizado at este momento. Apenas quando uma propriedade deste objeto (mtodos getX) ou um relacionamento, como por exemplo empresa.getFuncionarios() forem chamados, a consulta no banco ser realizada. Tudo isto de forma transparente para o cliente.

2020Composite21CompositeA inteno do Composite compor objetos em estruturas de rvore para representar hierarquias parte-todo

O Composite permite aos clientes tratarem de maneira uniforme objetos individuais e objetos compostos

Em certas estruturas necessitamos por muitas vezes de mtodos e funes que j esto especificadasem um determinado objeto, sendo necessrio apenas a ligao entre os dois para assim poder ser reutilizado o cdigo

Tratar composies e unidades uniformemente2222CompositeExemplo de aplicaoAplicaes grficas, tais como editores de desenho permitem aos usurios construir diagramas complexos a partir de componentes simples

O usurio pode agrupar componentes para formar componentes ainda maiores, os quais, por sua vez, podem ser agrupados para formar componentes ainda maiores

Uma implementao simples poderia definir classes para primitivas grficas, como Texto e Linhas, alm de outras classes que funcionam como recipientes (conteiners) para estas primitivas2323CompositeExemplo de aplicaoGrficoLinhaRetnguloTextoContainerDiagrama de classe Composite 2424CompositeExemplo de aplicaoH um problema com esta abordagemO cdigo que usa estas classes deve tratar objetos primitivos e objetos recipientes de modo diferente, mesmo se na maior parte do tempo o usurio os trate de forma idntica

O padro Composite descreve como usar a composio de maneira recursiva tal que os clientes no tenham que fazer esta distino2525CompositeExemplo de aplicaoDiagrama de classe Composite Linha

Desenhar()RetanguloTextoFoto

Desenhar()

Add(g : Grafico)

Remover(g : Grafico)

GetFilho(c : int)Grafico

Desenhar()graficosparaTodos g em graficos g.Desenhar()add g a lista de graficosCliente

Desenhar()Desenhar()

2626CompositeExemplo de aplicao

2727CompositeExemplo de aplicao

2828CompositeExemplo de aplicao

2929CompositeExemplo de aplicaoO resultado da execuo desse programa ser

LinhaRetnguloTexto

3030CompositeEstrutura geral do padro Composite

Diagrama de classes geral Padro de Projeto Composite3131CompositeEstrutura geral do padro CompositeParticipantesComponenteDeclara a interface para objetos na composioImplementa comportamento default para interface comum a todas as classes, como apropriadoDeclara uma interface para acessar ou gerenciar seus componentes filhos

FolhaRepresenta objetos folhas na composioUmafolha no tem filhosDefine comportamento para objetos primitivos na composio

3232CompositeEstrutura geral do padro CompositeParticipantesComposioDefine comportamento para Componentesque tm filhosArmazena Componentes filhosImplementa operaes relacionadas com filhos na interface do Componente

ClienteManipula objetos na composio atravs da interface Componente3333CompositeEstrutura geral do padro CompositeConsequncias Com o uso do padro Composite podemos criar objetos com uma grande complexidade e eles serem compostos por outrosobjetos menores, alm de deixar o cdigo bem estruturado e de fcil entendimento, sendo rpida a forma de adicionar novos componentes, mtodos e funes

3434Bridge35BridgeA inteno do Padro de Projeto Bridge desacoplar uma abstrao de sua implementao, de forma que as duas possam variar independentemente

De novoA 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 abstrao3636Bridge - ExemploConsidere a construo de um mdulo para desenhar figuras Considere que h duas classes externas de desenho a serem utilizadas: DP1 e DP2Primeira verso: somente retngulos devem ser desenhadosRetngulos so definidos com dois pares de pontos

Soluo:DP1DP2Usado para desenhar retngulosdraw_a_line(x1, y1, x2, y2)drawline(x1, x2, y1, y2)Usado para desenhar crculosdraw_a_circle(x, y, r)drawcircle(x, y, r)Tabela 2 Comparao classes de desenho3737Bridge - Exemplo

Diagrama de classes soluo exemplo Padro de Projeto Bridge3838Bridge - ExemploSuponha agora, o seguintes novos requisitosAs classes externas agora desenham crculos. Portanto, nosso mdulo de desenho deve tambm ter a possibilidade de desenhar crculosAlm disso, o cliente do nosso mdulo de desenho no precisa saber a diferena entre um retngulo e um crculo.

SoluoCriamos uma classe abstrata Shape, e fazemos com que ela seja superclasse tanto de Rectangle quanto de CircleO cliente agora se comunica com objetos ShapeSendo assim, temos uma nova soluo3939Bridge - ExemploDiagrama de classes nova soluo exemplo Padro de Projeto Bridge

4040Bridge - ExemploInfelizmente, esta abordagem traz novos problemas. Observe a 3 linha do diagrama de classesAs classes da linha representam quatro tipos especficos de ShapesE se eu tiver um outro programa de desenho? Seis tipos diferentes de Shapes (duas rvores de programas)

E se eu tiver um outro tipo de Shape, outra variao de conceito?Terei nove tipos diferentes de Shapes (para os trs programas de desenho)4141Bridge - ExemploA exploso de classes surge porque, nesta soluo, a abstrao (os tipos de Shape) e a implementao (os programas de desenho) 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

4242Bridge - ExemploEsta exatamente a inteno do padro BridgeDesacoplar a abstrao de sua implementao, de modo que possam variar independentemente

Abstrao 1Abstrao 2Abstrao 3...Implementao AImplementao BImplementao C...4343Bridge - ExemploNeste projeto, Shape usa Drawing para manifestar seu comportamento, chegamos ao padro Bridge

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

Diagrama de classes estrutura bsica Padro de Projeto Bridge4545Bridge Exemplo aplicaoExemplo Look and Feel Java SwingObjetos JFrame, JButton, etc. possuem um componente interno que construdo com um look and feel particularNo entanto, clientes (programadores) somente precisam interagir com JFrame, Jbutton, etc

WindowsLookAndFeelDefaultLookAndFeel4646Bridge Exemplo aplicaoExemplo abstrao driver especfico do banco de dados

4747BridgeAplicabilidadeO padro Bridge til quando se tem uma abstrao que tem diferentes implementaesEste padro permite que a abstrao e a sua implementao variem independentementeO projeto e a implementao so mais robustos e mais flexveis s mudanas futuras quando se usa o padro4848Concluses49

Referncias50RefernciasPadres e Frameworks de Software - http://www2.icmc.usp.br/~rtvb/apostila.pdfPadro de Projeto Adapter em Java - http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467Padres de projeto proxy - http://www2.lccv.ufal.br/Members/psycho/a-day-in-life/padroes-de-projeto-proxyPadro de Projeto Composite - http://padroesdeprojetodesoftware.blogspot.com.br/2012/06/nome-e-classificacao-do-padrao.htmlPadres de Projeto - http://www.cin.ufpe.br/~if718/transparencias/pdf/05-padroesGoF.pdfPattern Proxy -http://www.devmedia.com.br/pattern-proxy/4066#ixzz2TsfmdiihPadres de Projeto - http://www.inf.ufsc.br/~bosco/extensao/NovosTalentos2012/D:/additional/addnlApps/jhtp6_appM_design_patterns.pdfMdulo III Padres GOF: Bridge (Professores: Eduardo Bezerra, Isamel H F Santos PUC-RIO) http://www.tecgraf.puc-rio.br/~ismael/Cursos/XJavaPadroes/aulas/3-PadroesGOF/JavaPadroes_3-PadroesGOF-Bridge.pdf

5151Obrigado!52