29.04.2013 Views

Tehnici de proiectare software - Tipografia

Tehnici de proiectare software - Tipografia

Tehnici de proiectare software - Tipografia

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Este asemănător cu mersul la un parc naŃional un<strong>de</strong> se protejează elanul.<br />

Obiectul ale cărui date sunt salvate este elanul. Xu este permisă luarea acasă a<br />

elanului, dar ve<strong>de</strong>ri şi tricouri cu elanul sunt disponibile la magazinul <strong>de</strong> suveniruri al<br />

parcului.<br />

O mai bună abordare este folosirea unui obiect care să conŃină datele ce<br />

trebuie salvate. Se trimite acest obiect care poate fi folosit pentru recrearea<br />

originalului, în loc <strong>de</strong> a trimite datele neprelucrate. Alte obiecte nu ar putea citi sau<br />

modifica datele <strong>de</strong>oarece acestea ar fi încapsulate. Acesta este şablonul Memento,<br />

un<strong>de</strong> un obiect este folosit ca un suvenir cu ajutorul căruia se poate restabili starea<br />

originală a obiectului iniŃial.<br />

• Utilizare<br />

Şablonul Memento se foloseşte când:<br />

- este nevoie reŃinerea unui instantaneu al stării obiectului<br />

- acest instantaneu e utilizat pentru recrearea stării originale a obiectului<br />

- o interfaŃă directă către obiect încalcă încapsularea<br />

• Descriere<br />

Dacă încapsularea a fost implementată corect, atunci toate obiectele au stări<br />

private şi vor permite acces la atribute doar prin meto<strong>de</strong>. Dar poate fi necesară<br />

trimiterea stării curente către un alt obiect, <strong>de</strong> exemplu, în ve<strong>de</strong>rea restaurării stării<br />

iniŃiale într-un moment ulterior. O posibilitate <strong>de</strong> a face asta este <strong>de</strong> a trimite starea<br />

direct către obiectul interesat. Apar însă inconveniente, cum ar fi expunerea structurii<br />

interne a obiectului sau posibilitatea modificării stării obiectului <strong>de</strong> către un altul.<br />

SoluŃia este învăluirea stării care se doreşte păstrată într-un alt obiect folosind<br />

şablonul Memento. Memento este un obiect care conŃine starea internă curentă a<br />

obiectului original <strong>de</strong> tip Originator. doar acesta din urma putând accesa şi retrage<br />

informaŃii din Memento. Pentru restul lumii, Memento reprezintă doar un obiect<br />

arbitrar.<br />

■ Implementare<br />

Diagrama <strong>de</strong> clase a şablonului Memento este următoarea:<br />

Originator<br />

-State state<br />

+void setMemento(Memento m)<br />

+Object getMemento()<br />

1 creează<br />

t<br />

Memento<br />

StateHol<strong>de</strong>r<br />

-State state Memento este o clasa statica<br />

interna a Originator-ului<br />

+State getState() +void<br />

setState(State s)<br />

39

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!