p3

4
PLATFORMA DE LABORATOR NR.3. PROIECTAREA Obiectiv: Se va continua realizarea produsului program pentru  funcţionarea bibliotecii universitare, cu activitatea de proiectare, ceea ce implică realizarea diagramelor de stare şi modelul claselor. 3.1. Diagramele de tare În funcţionarea bibliotecii universitare invocate anterior, un exemplar al unei cărţi poate trece prin două stări: disponibil şi împrumutat. Evenimentele care determină trecerea dintr-o stare în alta sunt împrumutul şi restituirea; modificarea stării este făcută prin operaţia  setlmprumutatDisp(). Fig.3.1. Diagrama de t!ri ale "biectel"r di# claa E$em%lare. Cititorii care restituie cu întâriere cărţile împrumutate sunt penaliaţi cu blocarea dreptului de împrumut pe o perioadă e!ală cu durata întârierii" #n cititor se poate afla aşadar în una din următoarele două stări: normal, când împrumutul este permis, şi  penalizat, când dreptul de împrumut este temporar blocat" $entru a putea urmări mai uşor toate detaliile, sunt preentate două variante ale dia!ramei de stare: prima, cu caracter mai sintetic %fi!ura &"'(, iar cea de a doua cu toate detaliile necesare implementării, corespunătoare deci proiectării %fi!ura &"&"(" #n cititor rămâne în starea "normal" atâta vreme cât face restituirile la termen" )a apariţia unei întârieri, va trece în starea "penalizat", care se menţine până la expirarea perioadei de  penaliare" În timp ce este penaliat, cititorul poate restitui celelalte cărţi împrumutate" *acă şi acum se înre!istreaă întârieri, se calculeaă un nou termen de penaliare, care va lua locul  precedentului"  Fig. 3.&. Diagrama de t!ri %e#tr' '# citit"r al bibli"tecii +ratarea evenimentelor "împrumut" şi "restituire", care la nivelul clasei constituie operaţii, depinde de starea obiectului în momentul respectiv %i!ura &"&(" stfel, împrumutul  poate interveni numai atunci când cititorul este în starea "normal" mai mult decât atât, traniţia este controlată de o condiţie de declanşare, care cere ca cititorul să nu depăşească numărul limită ./  împrumută restituie 0fără întâriere1 2estituie 0cu întâriere13 calcul+ermen$enaliare când penaliare expirată restituie 0fără întâriere1 restituie 0cu întâriere13 calcul+ermen$enaliare #"rmal %e#ali(at

description

fbdrf

Transcript of p3

PLATFORMA DE LABORATOR

PLATFORMA DE LABORATOR

NR.3.

PROIECTAREAObiectiv:

Se va continua realizarea produsului program pentru funcionarea bibliotecii universitare, cu activitatea de proiectare, ceea ce implic realizarea diagramelor de stare i modelul claselor. 3.1. Diagramele de stare

n funcionarea bibliotecii universitare invocate anterior, un exemplar al unei cri poate trece prin dou stri: disponibil i mprumutat. Evenimentele care determin trecerea dintr-o stare n alta sunt mprumutul i restituirea; modificarea strii este fcut prin operaia setlmprumutatDisp().

Fig.3.1. Diagrama de stri ale obiectelor din clasa Exemplare.Cititorii care restituie cu ntrziere crile mprumutate sunt penalizai cu blocarea dreptului de mprumut pe o perioad egal cu durata ntrzierii. Un cititor se poate afla aadar n una din urmtoarele dou stri: normal, cnd mprumutul este permis, i penalizat, cnd dreptul de mprumut este temporar blocat. Pentru a putea urmri mai uor toate detaliile, sunt prezentate dou variante ale diagramei de stare: prima, cu caracter mai sintetic (figura 3.2), iar cea de a doua cu toate detaliile necesare implementrii, corespunztoare deci proiectrii (figura 3.3.). Un cititor rmne n starea "normal" atta vreme ct face restituirile la termen. La apariia unei ntrzieri, va trece n starea "penalizat", care se menine pn la expirarea perioadei de penalizare. n timp ce este penalizat, cititorul poate restitui celelalte cri mprumutate. Dac i acum se nregistreaz ntrzieri, se calculeaz un nou termen de penalizare, care va lua locul precedentului.

Fig. 3.2. Diagrama de stri pentru un cititor al biblioteciiTratarea evenimentelor "mprumut" i "restituire", care la nivelul clasei constituie operaii, depinde de starea obiectului n momentul respectiv (Figura 3.3). Astfel, mprumutul poate interveni numai atunci cnd cititorul este n starea "normal"; mai mult dect att, tranziia este controlat de o condiie de declanare, care cere ca cititorul s nu depeasc numrul limit de cri pe care are dreptul s le dein la un moment dat (Limit > 0). Aciunea efectuat la realizarea tranziiei const n diminuarea limitei de mprumut (Limit = Limit - 1). Tratarea restituirii este mai nuanat. n cazul n care aceasta se face cu ntrziere, specificarea evenimentului este urmtoarea: restituie (datalmprumut) [datalmprumut + 20 < dataCrt]/termenPenalizare = dataCrt + (dataCrt - datalmprumut - 20); Limita = Limita + 1Semntura evenimentului cuprinde un singur parametru: data mprumutului Durata unui mprumut este de 20 de zile. Condiia de declanare verific dac aceasta a fost depit (datalmprumut + 20 < dataCrt) i calculeaz data ce reprezint termenul de penalizare: termenPenalizare = dataCrt + (dataCrt datalmprumut 20) ncetarea penalizrii este un eveniment determinat de scurgerea intervalului de timp corespunztor, notaia sa putnd avea forma: after(termenPenalizare) I termenPenalizare = NullRestituirea se poate face n ambele stri. Restituirea cu ntrziere n starea "normal" determin trecerea n starea "penalizri". Restituirea cu ntrziere n starea "penalizare va menine aceast stare dar va fixa un nou termen de penalizare, cu condiia ca acesta s fie ulterior penalizrii existente n momentul respectiv: penalizare(trmNou)[trmNou > termenPenalizare]I termenPenalizare trmNou.

Fig.3.3. Diagrama de stri pentru clasa de obiecte Cititor

Exerciii propuse:

Realizai diagramele de stri pentru celelalte clase de obiecte din diagrama de obiecte.

3.2. Modelul claselorEfortul de dezvoltare al proiectului a evideniat o serie de interpretri incorecte din faza de analiz, cu repercusiuni asupra modelului claselor. Astfel, ceea ce biblioteca evideniaz n calitate de lucrare este o anume apariie editorial, pentru care trebuie precizat, n plus, editura, anul apariiei i numrul de ISBN. Acestea se adaug la atributele deja definite pentru clasa intrare.

mprumutul i restituirea ntrunesc toate caracteristicile unor clase de control; responsabilitile lor ar trebui atribuite claselor domeniului. n consecin, faza de proiectare aduce o alt schimbare, care const n eliminarea clasei mprumut i transferarea atributelor i operaiilor acesteia asupra clasei Exemplar. Pentru a putea evidenia mprumutul, exemplarul primete dou atribute noi: obiectul cititor' care mprumut i data mprumutului. La restituire, coninutul acestor dou atribute va fi ters. Starea exemplarului se stabilete acum examinnd coninutul atributului ImprumutatDe. dac acesta este nul, exemplarul este disponibil. Prin urmare, atributul Stare devine inutil i va fi eliminat. Noua diagram a claselor, construit conform acestor modificri, este prezentat n figura 3.4.

Fig.3.4. Varianta de proiectare a diagramei claselor pentru mprumutul irestituirea crilorReprezentarea asocierilorReprezentarea asocierilor aduce, la rndul su, modificri n diagrama de clase. Se poate opta i pentru o tratare a lor implicit, considernd c elementele de limbaj sunt suficiente i urmeaz a fi aplicate la implementare, fr alte meniuni suplimentare. Exist totui cel puin dou motive ntemeiate de inserare explicit a claselor corespunztoare; pentru a permite o mai bun trasabilitate, asigurnd corespondena direct diagram - program surs i, cel mai important, pentru a putea plasa operaiile de parcurgere i gestionare a legturilor specifice problemei.Aa cum s-a menionat, asocierile de tipul 1-n solicit inserarea de clase distincte pentru colecia prin care se realizeaz efectiv legtura. Diagrama claselor din figura 3.5 cuprinde aceste noi clase, pentru care s-a introdus stereotipul colecie. Au fost de asemenea adugate operaiile necesare parcurgerii acestor asocieri.Asocierea exist este unidirecional. n consecin, clasa Lucrare conine, n variabila cu acelai nume, colecia ale crei elemente stocheaz exemplarele existente. Asocierea dintre cititor i exemplarele mprumutate este bidirecional. Din acest motiv, alturi de atributul mprumutatDe, care stocheaz referina la cititorul la care se afl exemplarul la momentul respectiv, clasa Cititor cuprinde, la rndul su, colecia de exemplare mprumutate.

Fig.3.5. O vedere parial a diagramei claselor, n care sunt figurate numai detaliile de reprezentare a asocierilor

Asigurarea persistenei

Asigurarea persistenei este sursa unui alt grup de extensii. n acest studiu de caz, s-a optat pentru soluia cea mai simpl - atribuirea responsabilitilor legate de persisten direct obiectelor de gestiune.Operaiile folosite n acest scop se pot rezuma la ncarc, memoreaz, terge (bineneles, fr ca acestea s fie limitative).

ncarc asigur reconstituirea obiectului respectiv prin cutarea valorilor atributelor acestuia n baza de date. Operaia caut este, prin urmare, cea care conine expresia SQL adecvat i, fiind activabil numai de ctre ncarc, este o operaie privat.

Operaia ncarc a fiei Exemplarelmprumutate are menirea de a reconstitui, pornind de la baza de date, colecia de exemplare aflate n momentul respectiv la cititorul indicat prin argumentul IdOCititor. Aceast operaie va cere, la rndul su, fiecrui exemplar mprumutat s se ncarce, iar n momentul n care acesta devine disponibil, este adugat h. colecie.Operaia memoreazlmprumut are rolul de a asigura conservarea mprumuturilor efectuate n baza de date n vederea obinerii de rapoarte statistice. Prezena sa este necesar deoarece, prin soluia aleas, la restituirea unui exemplar datele privitoare la mprumutul su sunt anulate, att la nivelul exemplarului ct i al cititorului (cu excepia penalizrii, care risc i ea s fie tears ulterior).O eventual decizie ulterioar de transferare a responsabilitilor legate de persisten asupra unor clase distincte va avea minime implicaii, solicitnd doar modificarea implementa, ii operaiilor de tipul ncarc, memoreaz, terge i eliminarea operaiei private caut.

Exerciii propuse:

Proiectai diagramele celorlalte clase, reprezentnd i asocierile.

mprumut

restituie [fr ntrziere]

Restituie [cu ntrziere]/

calculTermenPenalizare

cnd penalizare expirat

restituie [fr ntrziere]

restituie [cu ntrziere]/

calculTermenPenalizare

normal

penalizat

Penalizat?()

limitaAtins?()

penalizeaz(ntrziere)

mprumut (exemplar)

restituie (exemplar)

Cititor

Nume

Prenume

Categorie

Numr critic

Valabilitate

Termen penalizare

Limit

Cititor

0..1 mprumuturi

mprumutatDe

*

exDisponibil?()

mprumut (cititor)

restituire (nrExemplar)

nreg.mprumut()

Exemplar

Nr.inventar

Data mprumut: dat

titluDisp? (titlu)

Lucrare

Titlu

Autori

Data apariiei

Editura

ISBN

exist

1 1..*

PAGE 10