Академический Документы
Профессиональный Документы
Культура Документы
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
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
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
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
Criacional
Comportamental Estrutural
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
Adapter
13
Exemplo - Cdigo
Adapter
14
Exemplo
Adapter
3 pinos
Tomada 2 pinos
Adapter
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
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
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
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)
Composite
27
Exemplo de aplicao
Composite
28
Exemplo de aplicao
Composite
29
Exemplo de aplicao
Composite
30
Exemplo de aplicao
O
Texto
Composite
31
Composite
32
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
Composite
33
Participantes
Composio
Define comportamento para Componentes que tm filhos Armazena Componentes filhos Implementa operaes relacionadas com filhos na interface do Componente
Cliente
Composite
34
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
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)
draw_a_circle(x, y, r)
drawcircle(x, y, r)
Bridge - Exemplo
38
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
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?
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
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
46
WindowsLookAndFeel
DefaultLookAndFeel
47
Bridge
48
Aplicabilidade
O padro Bridge til quando se tem uma abstrao que tem diferentes implementaes
Concluses
49
50
Referncias
Referncias
51
52
Obrigado!