p3
description
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