Pades - Memento e Flyweight

  • Published on
    08-Jul-2015

  • View
    130

  • Download
    0

Transcript

UNIVERSIDADE ESTADUAL DE MONTES CLAROS Centro de Cincias Exatas e Tecnolgicas Curso de Sistemas de Informao

Rafael Chagas Barbosa Rhayane Stphane Silva Andrade Rozileni Vieira

PADRES DE PROJETO: Memento e Flyweight

Montes Claros MG Junho/20111

Rafael Chagas Barbosa Rhayane Stphane Silva Andrade Rozileni Vieira

PADRES DE PROJETO:

Memento e Flyweight

Trabalho apresentado ao curso de Sistemas de Informao como requisito parcial da avaliao da disciplina Anlise e Projeto de Sistemas IV sob orientao do professor Heveraldo Oliveira.

Montes Claros MG Junho/20112

Sumrio

1. Introduo .................................................................................................... 4 2. Memento ...................................................................................................... 4 3 Flyweight ..................................................................................................... 6 3.1 3.2 4 Aplicabilidade ........................................................................................ 9 Consequncias ....................................................................................... 9

Concluso .................................................................................................. 10

3

1. Introduo

A percepo em torno dos padres de projeto em softwares teve base nos estudos do arquiteto Christopher Alexander que comeou a questionar a possibilidade de se criar padres para sabermos se um projeto arquitetnico era bom ou no, independente do gosto das pessoas. Em meados da dcada de 90 esta idia foi concretizada com o livro Padres de Projeto, Solues Reutilizveis de Software Orientado a Objetos escrito por Gamma, Helm, Johnson e Vlissides que ficaram conhecidos como Gangue dos quatro. Eles perceberam que o pensamento do Alexander poderia ser perfeitamente aplicado no desenvolvimento de softwares. Nesse livro foram aplicadas as idias de padres de projeto a projetos de software, apresentando uma estrutura para catalogar e descrever padres de projeto e traadas estratgias orientadas a objetos baseados nesses padres. Existem 23 padres de projeto de softwares que so e classificados quanto finalidade em criao, estrutural e comportamental, mas, no presente artigo focamos nossos estudos em dois padres de projeto especficos: Memento e Flyweight. O padro de projeto Flyweight um padro estrutural que tem por alvo usar de compartilhamento de objetos semelhantes e o padro Memento que um repositrio para guardar o estado dos objetos. A seguir ser feito um detalhamento a respeito dos dois padres citados.

2. Memento

Segundo Rocha (2003): O padro Memento captura e externaliza o estado interno de um objeto, sem violar o encapsulamento, para que o objeto possa ter esse estado restaurado posteriormente. O encapsulamento protege o acesso direto (referncia) aos atributos de uma instncia fora da classe onde estes foram declarados. O padro Memento um repositrio para guardar o estado dos objetos. Pode ser usado outro objeto, uma string ou um arquivo. utilizado quando necessrio saber o estado anterior de um objeto, para se desfazer uma operao, mas as informaes no podem ser visveis a todos os objetos envolvidos. Assim, para que seja implementado, o padro Memento utiliza trs objetos:4

y y

Ori i at r (Aut

-

j t

uj

t

j

turar;

modificador de acesso pri ado, cujo estado do objeto originator ser armazenado; y CareTaker (Responsvel) - Este objeto cuidar do gerenciamento dos Mement s o (memria do estado atual). Essa classe captura, armazena e restaura o estado do objeto Originator. O diagrama abai o representa o padro Memento e suas classes envolvidas:

Dessa forma, para uma mel or compreenso do Memento o diagrama de sequncia abai o, demonstra um exemplo de aplicao desse padro no jogo Braid(jogo eletrnico de plataforma/puzzle produzido por Jonat an Blow) efetuando o Replay. As atividades envolvidas so: 1. O objeto responsvel Replay, requisita um Memento ao objeto Tim (personagem do game Braid). 2. O objeto Tim cria um Memento. importante destacar que somente o prprio objeto capaz de criar o seu Memento. 3. O objeto Tim armazena no Memento o seu estado atual. Por exemplo, energia, posio, itens, etc. Em seguida, devolve o Memento ao responsvel. 4. Em determinado momento do jogo, o responsvel pode setar o Memento no objeto Tim, fazendo com que ele recupere o estado que possua a anteriormente.

Di

de Cl

M

t

es Mement . Fonte: Blog Abrindo o Jogo

(Lembrana) - o objeto definido dentro da classe Originat r, com

5

Di grama de Sequncia Braid. Fonte: Blog Abrindo o Jogo

O objeto memento no permite o acesso de qualque classe alm da classe r originator. Assim, tal padro mostra-se til por no violar o conceito de encapsulamento. Outro bom exemplo de aplicao do padro Memento seria num pro grama de customizao de carros, onde o usurio selecionaria os itens como: cor, rodas e outros equipamentos. Assim, seria necessrio armazenar determinada configurao, para quesempre que as alteraes futuras forem desfeitas, o sistema exibiria o carro com os atributos salvos anteriormente. Portanto, o Memento uma alternativa para sistemas onde os usurios fazem muitas simulaes e so necessrios salvar ou desfazer essas configuraes em tempo de execuo.

3 Fl weight

A finalidade do padro de projeto Fl weight utilizar o compartilhamento de objetos de granularidade fina, isto , objetos que so iguais exceto detalhes pequenos. Este padro procura fatorar as informaes comuns a diversos objetos em um nico componente.

6

Os demais dados, que tornam tais objetos nicos, passam a ser utilizados como parmetros de mtodos. (PEREIRA, 2004, p. 25 apud FREITAS, PARIS e SOUZA, 2007).

Estrutura do padro Fly eight . Fonte: Rocha, 2003 apud FREITAS, PARIS e SOUZA, 2007

Com a utilizao deste padro possvel reduzir consideravelmente o nmero de objetos em uma aplicao devido ao fato de que objetos com as mesmas caractersticas so unificados em apenas um proporcionando assim uma reduo considervel da quantidade de memria utilizada por uma aplicao que contenha muitos objetos semelhantes e que possam ser compartilhados e no dependem desta quantidade de objetos. Estes objetos possuem dois estados que devem ser levados em conta na adoo do padro flyweight, os estados intrnseco e extrnseco.y O estado intrnseco: O estado intrnseco diz respeito parte do objeto que

ser imutvel independente do cliente. Ele estar armazenado no objeto Flyweight e o estado que ser compartilhado.y O estado extrnseco: O estado extrnseco diz respeito a parte do objeto que

ser mutvel e estar armazenado no cliente.

7

Um fl wei ht um objeto que pode ser usado em vrios contextos em simultneo e seu comportamento depende do contexto em que se encontra, no se distinguindo de um objecto no partilhado. Isto conseguido separando o estado intrnseco do estado extrnseco do objeto. O cliente responsvel por fornecer o estado extrnseco quando um fl wei ht necessita dele porm no obrigatrio que todos os fl wei ht sejam partilhados.

Modelo de partilha de um objeto Fly eight Dados intrinseco. , Fonte: Costa 2007 apud FREITAS, PARIS e SOUZA, 2007

A figura ilustrada acima mostra os objetos podem ser utilizados em diversas situaes e simultaneamente, sempre de forma independente.

Modelo de partilha de um objeto Fly eight Dados extrinseco. , Fonte: Costa 2007 apud FREITAS, PARIS e SOUZA, 2007

8

O emprego de objetos flyweights depende muito da possibilidade de esses objetos assumirem um estado extrnseco, ou seja, da probabilidade de mutao que esse objeto pode assumir dependendo do contexto. Estado extrnseco que dizer as partes do objeto que no so dependentes desse. Por exemplo, um carter tem como estado extrnseco o estilo e o posicionamento, e como estado somente intrnseco o seu cdigo. Quando o estado intrnseco do objeto depende de muitos fatores ento torna se difcil o compartilhamento desse. A principal conseqncia do utilizao do padro Flyweight a economia de memria devido reduo do nmero de instncias e quantidades de estado intrnseco. Segundo Costa (2007), Podem ser introduzidos custos em termos de eficincia devido transferncia, procura e/ou computao do estado extrnseco [...], devido a isso antes de se adotar esse padro de projeto importante analisar se a quantidade de memria economizada compensa realmente a possvel perda de eficincia.

3.1 Aplicabilidade aconselhvel a utilizao do padro Flyweight para se desenvolver aplicaes que tem as seguintes caractersticas: 1. 2. 3. 4. 5. Aplicaes que usem um grande nmero de objetos Custos de armazenamento crticos Objetos cuja maior parte do estado do objeto possa ser tornado extrnseco Grandes grupos de objetos podem ser substitudos por poucos objetos A aplicao no depende da identidade dos objetos.

partilhados depois de se separar o estado extrnseco do intrnseco

3.2 Consequncias1. Podem ser introduzidos custos em termos de eficincia devido transferncia, procura e/ou computao do estado extrnseco, compensados pela economia de memria. 2. A economia de memria resulta de vrios factores: a. reduo do nmero de instncias; b. quantidade de estado intrnseco c. se o estado extrnseco calculado ou armazenado9

4 Concluso

A tecnologia vem cada vez mais exercendo um papel de fundamental importncia para o homem, o auxiliando em suas atividades seja no trabalho, em casa ou simplesmente para diverso. O crescimento e avano de equipamentos que proporcionam esta maior facilidade vem exigindo um crescimento dos softwares que os satisfaam, garantindo um crescimento proporcional ao dos equipamentos pois, precisam acompanhar os hardwares de alta tecnologia porm, isso faz o trabalho do programador tornar se cada vez mais complexo e carente de conhecimento. Diante deste fato, os padres de projeto tem importncia considervel para o processo de otimizao de um software. Segundo Alexander apud Shalloway, 2004 Cada padro descreve um problema que ocorre repetidamente no nosso ambiente e, portanto, descreve o cerne da soluo desse problema, de tal forma que voc pode utilizar essa soluo um milho de vezes repetidas, sem nunca faz la duas vezes do mesmo modo. Os padres Memento e Flyweight mostraram se de grande importncia para tornar eficiente a utilizao de objetos onde o Memento mostrou se til para guardar o estado anterior do objeto para tornar possvel o retorno ao seu estado anterior depois de alguma alterao e o Flyweight que permite o compartilhamento de objetos de maneira eficiente garantindo um melhor funcionamento da aplicao resultando em menor consumo de memria. Em fim, Os padres citados neste artigo podem proporcionar mais eficincia, otimizao e diminuio da complexidade no desenvolvimento, atuando no mbito comportamental, estrutural e de criao do software.

10

REFERNCIAS

Braid. Disponvel em: < pt.wikipedia.org/wiki/Braid>. Acesso em: 03 jun. 2011 Padro de projetos em Games Memento. Disponvel em: http://abrindoojogo.com.br/padroes de projeto memento>. Acesso em: 03 jun. 2011 Padres de Projeto Faade, Fly eight e Visitor. Disponvel em: www.gfsolucoes.net/trabalhos/padroes_de_projetos.pdf >. Acesso em: 03 jun. 2011 . Acesso em: 03 jun. 2011 . Acesso em: 18 jun. 2011.

11