Вы находитесь на странице: 1из 52

1

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

Tpicos abordados

Padro de Projeto Adapter Proxy Composite Bridge Concluses

Referncias

Padro de Projeto

Padro de Projeto

Um 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 Um Padro de Projeto de Software no um cdigo final, uma descrio ou modelo de como resolver o problema do qual trata, que pode ser usada em muitas situaes diferentes.

Padro de Projeto

Um padro de projeto define

Nome

Todo 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

Padro de Projeto

Um padro de projeto define

Contexto (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

Resultado

O 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 padro

Padro de Projeto

Visam 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 de software

Padro de Projeto

Classificao

Quanto ao Escopo

Classes Objetos

Quanto ao seu propsito


Criacional
Comportamental Estrutural

Diz respeito a composio de objetos e classes. Exemplos:


Adapter Bridge Composite Decorator Facade

Flyweight
Proxy

Adapter

Adapter

10

A 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

Adapter

11

O 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

Adapter

12

Diagrama de classe do Padro Adapter Fonte: http://www.devmedia.com.br/padrao-de-projeto-adapter-em-java/26467

Adapter

13

Exemplo - Cdigo

Adapter

14

Exemplo

Adapter

3 pinos

Tomada 2 pinos

Adapter

Comparao Adapter e Facade


Facade Adapter Comentrio
J tenho classes em ambos No facade, eu no preciso projetar uma interface como no Adapter.

As classe j existem? Existe uma interface que devemos projetar?

Sim No

Sim Sim

Um objeto precisa ter comportamento polimrfico? necessrio que seja uma interface simples?

No

Provvel

No estou interessado no comportamento polimrfico no Facade, enquanto que em Adapter provavelmente estou. No 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.

Sim

No

Tabela 1 - Comparao padro Facade com padro Adapter.

15

16

Proxy

Proxy

17

O 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.

Proxy - Vantagens

18

Permite deixar transparente o local (endereo) do objeto real. O cliente no precisa conhecer se o objeto remoto ou no, este tipo de proxy conhecido como Remote 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 como Virtual Proxy

Proxy - Diagrama

19

Diagrama de classes geral Padro de Projeto Proxy

Proxy Exemplo de uso

20

O 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.

21

Composite

Composite

22

A 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 especificadas em um determinado objeto, sendo necessrio apenas a ligao entre os dois para assim poder ser reutilizado o cdigo
Tratar composies e unidades uniformemente

Composite

23

Exemplo de aplicao

Aplicaes grficas, tais como editores de desenho permitem aos usurios construir diagramas complexos a partir de componentes simples

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 primitivas

Composite

24

Exemplo de aplicao

Container

Grfico

Linha
Diagrama de classe Composite

Retngulo

Texto

Composite

25

Exemplo de aplicao

H um problema com esta abordagem

O 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 distino

Composite

26

Exemplo de aplicao
Grafico
Desenhar()

Cliente

graficos Linha
Desenhar()

Retangulo
Desenhar()

Texto
Desenhar()

Foto
Desenhar() Add(g : Grafico) Remover(g : Grafico) GetFilho(c : int)

paraTodos g em graficos g.Desenhar() add g a lista de graficos

Diagrama de classe Composite

Composite

27

Exemplo de aplicao

Composite

28

Exemplo de aplicao

Composite

29

Exemplo de aplicao

Composite

30

Exemplo de aplicao
O

resultado da execuo desse programa ser


Linha Retngulo

Texto

Composite

31

Estrutura geral do padro Composite

Diagrama de classes geral Padro de Projeto Composite

Composite

32

Estrutura geral do padro Composite

Participantes
Componente

Declara a interface para objetos na composio Implementa comportamento default para interface comum a todas as classes, como apropriado Declara uma interface para acessar ou gerenciar seus componentes filhos

Folha

Representa objetos folhas na composio

Uma folha no tem filhos


Define comportamento para objetos primitivos na composio

Composite

33

Estrutura geral do padro Composite

Participantes
Composio

Define comportamento para Componentes que tm filhos Armazena Componentes filhos Implementa operaes relacionadas com filhos na interface do Componente

Cliente

Manipula objetos na composio atravs da interface Componente

Composite

34

Estrutura geral do padro Composite

Consequncias

Com o uso do padro Composite podemos criar objetos com uma grande complexidade e eles serem compostos por outros objetos menores, alm de deixar o cdigo bem estruturado e de fcil entendimento, sendo rpida a forma de adicionar novos componentes, mtodos e funes

35

Bridge

Bridge

36

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

Bridge - Exemplo

37

Considere a construo de um mdulo para desenhar figuras Considere que h duas classes externas de desenho a serem utilizadas: DP1 e DP2 Primeira verso: somente retngulos devem ser desenhados Retngulos so definidos com dois pares de pontos

Soluo:

DP1
Usado para desenhar retngulos draw_a_line(x1, y1, x2, y2)

DP2
drawline(x1, x2, y1, y2)

Usado para desenhar crculos

draw_a_circle(x, y, r)

drawcircle(x, y, r)

Tabela 2 Comparao classes de desenho

Bridge - Exemplo

38

Diagrama de classes soluo exemplo Padro de Projeto Bridge

Bridge - Exemplo

39

Suponha agora, o seguintes novos requisitos As classes externas agora desenham crculos. Portanto, nosso mdulo de desenho deve tambm ter a possibilidade de desenhar crculos Alm disso, o cliente do nosso mdulo de desenho no precisa saber a diferena entre um retngulo e um crculo.

Soluo
Criamos uma classe abstrata Shape, e fazemos com que ela seja superclasse tanto de Rectangle quanto de Circle O cliente agora se comunica com objetos Shape Sendo assim, temos uma nova soluo

Bridge - Exemplo

40

Diagrama de classes nova soluo exemplo Padro de Projeto Bridge

Bridge - Exemplo

41

Infelizmente, esta abordagem traz novos problemas. Observe a 3 linha do diagrama de classes

As classes da linha representam quatro tipos especficos de Shapes E 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)

Bridge - Exemplo

42

A 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

Bridge - Exemplo

43

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

44

Neste projeto, Shape usa Drawing para manifestar seu comportamento, chegamos ao padro Bridge

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

Bridge

45

Estrutura bsica

Diagrama de classes estrutura bsica Padro de Projeto Bridge

Bridge Exemplo aplicao

46

Exemplo Look and Feel Java Swing

Objetos JFrame, JButton, etc. possuem um componente interno

que construdo com um look and feel particular

No entanto, clientes (programadores) somente precisam interagir

com JFrame, Jbutton, etc

WindowsLookAndFeel

DefaultLookAndFeel

Bridge Exemplo aplicao

47

Exemplo abstrao driver especfico do banco de dados

Bridge

48

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

Concluses

49

50

Referncias

Referncias

51

Padres e Frameworks de Software - http://www2.icmc.usp.br/~rtvb/apostila.pdf


Padro de Projeto Adapter em Java - http://www.devmedia.com.br/padrao-deprojeto-adapter-em-java/26467 Padres de projeto proxy - http://www2.lccv.ufal.br/Members/psycho/a-day-inlife/padroes-de-projeto-proxy Padro de Projeto Composite http://padroesdeprojetodesoftware.blogspot.com.br/2012/06/nome-e-classificacaodo-padrao.html Padres de Projeto - http://www.cin.ufpe.br/~if718/transparencias/pdf/05padroesGoF.pdf Pattern Proxy - http://www.devmedia.com.br/pattern-proxy/4066#ixzz2Tsfmdiih Padres de Projeto http://www.inf.ufsc.br/~bosco/extensao/NovosTalentos2012/D:/additional/addnlApps /jhtp6_appM_design_patterns.pdf Mdulo III Padres GOF: Bridge (Professores: Eduardo Bezerra, Isamel H F Santos PUC-RIO) http://www.tecgraf.puc-rio.br/~ismael/Cursos/XJavaPadroes/aulas/3PadroesGOF/JavaPadroes_3-PadroesGOF-Bridge.pdf

52

Obrigado!