Sunteți pe pagina 1din 8

Ministerul Educaiei al Republicii Moldova Universitatea Tehnic a Moldovei Facultatea Calculatoare Informatic i Microelectronic Catedra Automatica i Tehnologii Informaionale

Disciplina: Ingineria produselor program

RAPORT Lucrare de laborator Nr.4 Tema: abloane de proiectare comportamentale

A efectuat :

studenta grupei

A verificat:

lector superior

Chiinu 2013

Sarcina lurii De studiat cinci abloane comportamentale de proiectare i de realizat un program folosind acestea.

2 Descrierea abloanelor creaionale Definiie: Fiecare ablon reprezint o regul care exprim o relaie dintre un context, o problem care apare mereu n domeniul nostru de activitate i o soluie, utilizarea creia se permite de nenumrate ori n contexte diferite ( Christopher Alexander, 1979 ). Un ablon de proiectare nu este un design finisat care poate fi transformat direct n cod. El este o descriere sau un model pentru rezolvarea unei probleme care poate fi utilizat n mai multe i diferite situaii. Elemente ce descriu un ablon: Nume: folosete pentru identificare; descrie sintetic problema rezolvat de ablon i soluia. Problema: descrie cnd se aplic ablonul; se descrie problema i contextul. Soluia: descrie elementele care intr n rezolvare, relaiile dintre ele, responsabilitile lor i colaborrile ntre ele. Consecine i compromisuri: implicaiile folosirii ablonului, costuri i beneficii. Acestea pot privi impactul asupra flexibilitii, extensibilitii sau portabilitii sistemului, dup cum pot s se refere la aspectele implementrii sau limbajului de programare utilizat. Compromisurile sunt de cele mai multe ori legate de spaiu i timp. Structura unui ablon (pattern): Nume i clasificare; Intenie; Problem Motivaie; Aplicabilitate; Structur; Participani; Colaborri; Consecine; Implementare; Cod; Exemplu. Cele mai importante abloane sunt prezentate in figura de mai jos.

Figura 1. Clasificarea abloanelor 2

Memento ablonul amintire (memento) este un ablon comportamental destinat salvrii diferitelor stri curente ale unor obiecte i revenirea la aceste stri. n acest ablon se folosete o clas de amintire (Memento) ce conine aceleai proprieti de stare ca i clasa obiectelor de salvat (Originator). Obiectele de amintire se pot gestiona eventual ntr-o colecie (Caretaker). Obiectul de salvat trebuie s conin cte o metod pentru fiecare din aceste dou aciuni: salvare (createMemento) i revenire la stare anterioar (setMemento).

Figura 1 Diagrama general a claselor ce reprezint ablonul de proiectare Memento Pentru programul nostru, diagrama ablonului Memento este modelat n figura de mai jos.
class Memento

DateNoiAngaj ati _localitate: string _nume: string _salariu: double _telefon: string -

ListaAngaj ati _localitate: string _nume: string _salariu: double _telefon: string

ProspectMemory _memento: DateNoiAngajati

+ DateNoiAngajati(string, string, string, double) property + Memento() : DateNoiAngajati property + Localitate() : string + Nume() : string + Salariu() : double + Telefon() : string

+ RestoreMemento(DateNoiAngajati) : void + SaveMemento() : DateNoiAngajati property + Localitate() : string + Nume() : string + Salariu() : double + Telefon() : string

Figura 2 Diagrama claselor corespunztoare programului elaborat conform patern-ului Memento

State Modelul State permite unui obiect sa isi schimbe comportamentul cand starea sa interna se modifica. Schimbarea are loc prin folosirea mostenirii, clasele derivatate reprezentand starile si functionalitatea. Aplicabilitate. In cazul in care avem nevoie de o clasa context care sa reprezinte o singura interfata catre exterior. Acest lucru se obtine folosind o clasa de baza abstracta State. Cand vrem sa reprezentam diferite stari sub forma unor clase derivate dintr-o clasa de baza State. Beneficii. Codul este mai curat cand fiecare stare este o clasa Folosirea claselor in loc de constante. Dezavantaje/Consecinte. Genereaza mai multe clase mici, dar simplifica si clarifica programul . Elimina necesitatea instructiunilor onditionale lungi si imprastiate prin cod.

Figura 3- Diagrama general a claselor ce reprezint ablonul de proiectare State Pentru programul nostru, diagrama ablonului State este modelat n figura de mai jos.
class State

CardSalariu + + _angajat: string _salariu: Salariu Card(double) : void CardSalariu(string) # # # # +

Salariu balanta: double card_salariu: CardSalariu limitaMaxim: double limitaMinim: double Card(double) : void

property + Balanta() : double + Salariu() : Salariu

property + Balanata() : double + CardSalariu() : CardSalariu

SalariuSuficient + + + CalculeazaStare() : void Card(double) : void Initialize() : void SalariuSuficient(Salariu) SalariuSuficient(double, CardSalariu) + + +

SalariuInsuficient CalculeazaStare() : void Card(double) : void Initialize() : void SalariuInsuficient(Salariu) SalariuInsuficient(double, CardSalariu)

Figura 4 Diagrama claselor corespunztoare aplicaiei elaborate conform ablonului State

Interpreter Sablonul interpreter descrie cum se pot interpreta expresiile ntr-un anumit limbaj. El i gsete utilitatea n aplicaiile economice n care se dorete salvarea unor formule de calcul ntr-un format accesibil utilizatorilor finali i folosirea ulterioar de ctre aplica ie a acestor formule. Conform ablonului interpreter att operanzii, ct i operatorii dintr-o expresie ar trebui s aib aceeai interfat.

Figura 5 Diagrama general a claselor ce reprezint ablonul Interpreter Pentru programul nostru, diagrama ablonului Interpreter este modelat n figura de mai jos.
class Interpreter

Numar + _input: string _output: int Numar(string) PozitieCifra + + + + + + Five() : string Four() : string Interpret(Numar) : void Multiplier() : int Nine() : string One() : string

property + Input() : string + Output() : int Program Main(string[]) : void

PozitiaMiilor + + + + + Five() : string Four() : string Multiplier() : int Nine() : string One() : string + + + + +

PozitieSutime Five() : string Four() : string Multiplier() : int Nine() : string One() : string + + + + +

PozitieZecime Five() : string Four() : string Multiplier() : int Nine() : string One() : string + + + + +

OneExpression Five() : string Four() : string Multiplier() : int Nine() : string One() : string

Figura 6 Diagrama claselor ce corespunde aplicaiei elaborate conform paternului Interpreter

Visitor Reprezint o informaie ce urmeaz a fi executat asupra unui element al unei sructuri-obiect. Visitor-ul i permite s defineti o nou operaie fr s schimbi clasele elementelor saupra crora operezi. Considernd un compilator care reprezint programele ca arbori de sintaxe abstracte. Va fi nevoie executarea de operaii asupra arborilor de sintaxe abstracte pentru analize ca verificarea dac toate variabilele sunt definite. De asemenea va fi necesar generarea de cod. Deci este posibil definirea operaiilor pentru verificarea tipurilor, optimizarea codulu, verificarea dac variabilelor le-au fost asignate valori nainte de utilizare, i aa mai departe. Mai mult dect att , putem folosi arbori de sintaxe abstracte pentru preaty-printing, restructurarea programelor, instrumentarea codurilor.

Figura 7 Diagrama general de clase ce corespunde paternului Visitor Pentru programul nostru, diagrama ablonului Visitor este modelat n figura de mai jos.
class Visitor i nterface RemunerareAngaj at + Mai n(stri ng[]) : voi d Remunerare(ResurseUmane) : voi d

Program

ListaAngaj ati + + + _l i sta_angaj ati : Li st<Angaj at> = new Li st<Angaj at>() Accept(RemunerareAngaj at) : voi d Attach(Angaj at) : voi d Detach(Angaj at) : voi d +

SalariuAngaj at Remunerare(ResurseUmane) : voi d +

ConcediuAngaj at Remunerare(ResurseUmane) : voi d

Manager + ResurseUmane + Accept(RemunerareAngajat) : voi d + + Angaj at _nume: stri ng _sal ari u: doubl e _zi l eVacanta: i nt + Accept(RemunerareAngaj at) : voi d Angaj at(stri ng, doubl e, i nt) Manager()

Functionar Functi onar()

property + Nume() : stri ng + Sal ari u() : doubl e + Zi l eVacanta() : i nt +

SefDepartament SefDepartament()

Figura 8 Diagrama claselor ce corespunde aplcaiei elaborate conform paternului Visitor 6

Iterator Reprezinta un mecanism de accesare a elementelor unui agregat de obiecte fara a expune reprezentarea interna a agregatului. Se utilizeaza cind: - s-a accesa elementele unui agregat, fara a se cunoste reprezentarea interna a acestuia; -a permite traversari multiple simultane ale aceluiasi agregat; -a crea o interfata uniforma in vederea traversarii diferitelor structuri de agregate (cu alte cuvinte, pentru a crea suportul iterarii polimorfice). Sablonul Iterator ofera posibilitatea de a modifica tipul de traversare a unui agregat. Exista agregate care pot fi traversate in mai multe feluri. De exemplu, intr-un compilator, analiza semantica si generarea de cod se fac in timpul traversarii arborelui sintactic. Acesta poate fi parcurs in inordine sau in preordine. Pentru a schimba tipul parcurgerii doar se inlocuieste iteratorul.

Figura 9 Diagrama general a claselor corespunztoare paternului Interator


class Iterator

interface Lista + CreateLista() : OrdineLista

Angaj at + _name: string Angajat(string) + +

interface ParcurgeLista First() : Angajat Next() : Angajat

property + Name() : string

property + AngajatulCurent() : Angajat + IsDone() : bool

OrdineLista ListaAngaj ati + _angajat: ArrayList = new ArrayList() CreateLista() : OrdineLista -_collection + + + _collection: ListaAngajati _current: int = 0 _step: int = 1 First() : Angajat Next() : Angajat OrdineLista(ListaAngajati)

property + Count() : int indexer + this(int) : object

property + AngajatulCurent() : Angajat + IsDone() : bool + Step() : int

Figura 10 Diagrama claselor corespunztoare aplicaiei elaborate prin intermediul paternului Interator 7

Concluzii n urma elaborrii acestei lucrri de laborator m-am familiarizat cu abloanele de proiectare creaionale. i anume am implementat patru abloane, marea majoritate n aplicaia recent realizat. abloanele alese au fost Mement, State, Iterator, Interpreter i Visitor. Bibliografie 1) Erich Gamma, Richard Helm, Ralph Johnson i John Vlissides Desingn Pattern Elements of Reusable Object-Oriented Software, Addison-Weslez, 1994; 2) Grady Booch, 19 Mai 2005, The Unified Modeling Language User Guide SECOND EDITION, ISBN: 0-321-26797-4; 3) DoFactory, 2011, Preluat pe 11/2011 Design Patterns http://www.dofactory.com/Patterns/Patterns.aspx;

S-ar putea să vă placă și