Sunteți pe pagina 1din 111

1.

INTRODUCERE In sistemele de gestiune a bibliotecilor


Evidenierea extraordinarelor schimbri introduse de tehnicile de informare n biblioteci i centrele de documentare, ncepnd cu anii 1960, este fr ndoial un loc comun. Toi aceti ani de adaptare, de experimentare, de utilizare a unor noi tehnici, noi echipamente sau noi documente au modificat considerabil, profund i iremediabil nu numai peisajul instituiilor, ci n egal msur deprinderile de lucru ale profesiei. Semnificativ e c s-a simit nevoia unei noi terminologii pentru desemnarea unor biblioteci" ale cror colecii nu mai erau alctuite doar din cri. In plus, o bibliotec din zilele noastre, loc de cultur deschis asupra lumii nconjurtoare, nu poate ignora mutaia de fond la care asistm n prezent. Introducerea de noi documente e nsoit de aceea de noi echipamente, a cror form elementar poate fi un simplu aparat de lectur, dar cea mai elaborat, calculatorul, aduce o total revoluionare a organizrii interne a instituiei. n afara aspectului uman, fr de care nu exist bibliotecar, nici utilizator, rapidele progrese tehnice ale informaticii n lumea informrii documentare, dezvoltarea reelelor, apariia inovatoare a unor noi suporturi de informaie, nevoia de a lucra n colaborare sau ntrirea schimburilor bibliografice implic, n general, necesitatea unei informatizri a bibliotecii ori a centrului de documentare.

1.1.Istoricul i evoluia programelor de gestionare a bibliotecilor Informatica a devenit att de important n zilele noastre deoarece ea este, de departe, cel mai puternic instrument de prelucrare a informaiei conceput vreodat de om. Ea i arat pe deplin msura ca instrument privilegiat de prelucrare n sistemele de informare, mai ales n domeniul documentrii ce manipuleaz astzi cantiti uriae de date a cror valoare economic este, i ea uriaa. Moore a fcut o previziune a semiconductorilor pe 19 aprilie 1965, cnd a spus ca numrul de tranzistori dintr-un chip se va dubla la fiecare 2 ani favoriznd rspndirea computerelor peste tot in lume, si de asemenea, costurile de producie vor scade din ce in ce mai mult. Previziunea lui Moore s-a dovedit perfect adevrata, un Quad Core Extreme Edition pe 1

45nm avnd in prezent peste 820 de milioane de tranzistori. De asemenea, raportndu-ne la costurile de fabricaie, un tranzistor dintr-un procesor Intel actual costa de un milion de ori mai puin dect unul inclus intr-un chip construit in 1971.Daca mainile ar fi evoluat la fel, acum am fi putut cumpra un autovehicul cu...un cent. Jaloane istorice In secolul al IX-lea, Al-Khowarisni, matematician din Bagdad, scrie un manual de aritmetic bazat pe numerotarea poziiei. De la numele su provine termenul algoritm". Secolul al XVII-lea este deosebit de fertil n invenii: n 1623, germanul Schickard realizeaz o main de calcul; n 1648, Pascal inventeaz i el o main de calculat, iar Leibniz creeaz n 1673 o main de nmulit. Vaucanson, mai cunoscut pentru calitatea i finisajul automatelor sale, se va afla, n anii 1750, la originea unui prim rzboi de esut automat, perfecionat de Jacquard ctre sfritul secolului al XVIII-lea, devenind astfel, poate, prima main funcionnd cu ajutorul cartelelor perforate. In secolul al XlX-lea, Babbage lucreaz la realizarea unor maini care s funcioneze pe principiile calculatoarelor. Boole i public analiza matematic a logicii n 1847, n timp ce Cebev inventeaz n 1881 o main capabil s efectueze adunri i nmuliri. In 1880, n Statele Unite, Hollerith inventeaz" cartela perforat i concepe dou procedee pentru a o citi: unul, mecanic, inspirat de rzboaiele de esut ale lui Jacquard, folosete dou tije metalice care strbat fiele prin gurile perforate, altul, electric, n care vidul lsat de perforaii stabilete trecerea unui curent. Hollerith i va completa progresiv sistemul cu o main de perforat, o main de triat capabil s citeasc cartelele i s le dirijeze spre compartimentele de clasare i, n fine, o main tabulatoare capabil s citeasc i s socoteasc. Inveniile lui Hollerith nu vor avea nici un succes pn la crearea lui Tabulating Machine Corporation ce va deveni mai trziu International Business Machine, cunoscut azi sub denumirea de IBM. In 1900, Torres Quevedo realizeaz o main n stare s rezolve ecuaii folosind reprezentri ale numerelor prin virgul flotant. n 1930, Louis Couffignal descrie o nou main de calculat i subliniaz, ntr-o comunicare la Academia de tiine, din 1936, importana folosirii reprezentrii binare n funcionarea mainilor. Abia n 1940 se face cu adevrat intrarea n era informatic, atunci cnd IBM depune brevetul unui totalizator electronic, n conceperea cruia n-au mai intrat dispozitive mecanice. 2

1.2.Istoria informatizrii bibliotecilor Utilizarea calculatorului Istoria" Informatizrii bibliotecilor ncepe cu adevrat in mijlocul anilor 1950 cnd primele calculatoare si-au fcut apariia In mediile universitare din Statele Unite. Pe atunci era vorba de calculatoarele din "prima generaie" de o concepie identica cu aceea a posturilor de radio cu lmpi", pe baza de tuburi electronice legate intre ele prin fire cablate manual si folosind cartele perforate , apoi benzi magnetice. Mrimea lor o depea cu mult pe aceea a fiierelor manuale ale unei biblioteci mijlocii, necesitau prezena constant a unei echipe de informaticieni, iar capacitile lor n materie de prelucrare documentar erau mai mult dect limitate, cci tehnologia n evoluie nu le permitea s ndeplineasc dect prelucrri ulterioare; aceste maini costisitoare, complexe, lente i greu de manevrat, erau mai mult calculatoare dect maini capabile s prelucreze un text. Anii 1960 In istoria informaticii, aceasta e perioada marilor descoperiri, fie c e vorba de progresele dobndite cu ajutorul diferitelor echipamente, fie de apariia reetelor i a serverelor de date. Apariia formatului MARC Dup experimentarea sa ntre 1966 i 1968 de ctre Biblioteca Congresului i de alte aisprezece biblioteci din Statele Unite, inovaia s-a rspndit foarte repede pe tot teritoriul Statelor Unite, lundu-se n considerare o situaie la scar naional cu totul specific i necunoscut n Frana : bibliotecile nord-americane, fie ele publice, universitare sau de cercetare, obinuiau deja s-i procure fiele noilor achiziii de la Biblioteca Congresului, reducnd astfel considerabil timpul consacrat catalogrii locale : ntr-adevr, aceste fie cuprindeau nu numai o descriere bibliografic standardizat, ci i n afara cotei Bibliotecii Congresului, o indexare pe materii conform Library of Congress Subject Headings (LCSH) i un indice Dewey. Din 1967, Biblioteca Congresului a publicat o a doua versiune a formatului su, botezat MARC II, ulterior denumit USMARC, conceput n mod mai specific pentru facilitarea schimbului de notie bibliografice, Trecerea la o nou structurare a datelor nu a declanat fenomenul de respingere i

formatul MARC a devenit curnd un standard naional care permitea fiecrei biblioteci s primeasc o band magnetic sptmnal. Atenia s-a ndreptat rapid ctre reelele specializate n transportul datelor n pachete ce ofereau pentru prima oar posibilitatea de tranzacii interactive ; astfel ncepea era lucrului online". Ca un amnunt, ARPANET (Advanced Research Projects Agency Network) a fost, n 1969, prima reea de transmitere n pachete ntre principalele organisme de cercetare militar din Statele Unite ; devenit civil, dup numeroase dezvoltri tehnice i o spectaculoas criz de gigantism, azi e cunoscut sub numele de Internet. Anii 1970 Dintr-un punct de vedere general, am putea aprecia foarte schematic anii 1970 drept o perioad a timpului partajat".Atunci se produce marele val seismic ce atinge Frana din plin. Comercializarea mainilor de a patra generaie" ncepe o data cu apariia primului microcalculator construit n jurul microprocesorului inventat n 1970 dar care nu va ajunge n lumea bibliotecilor dect zece ani mai trziu. Totui performanele acestui tip de aparat sunt practic echivalente cu cele ale mainilor din prima generaie. Pe de alt parte, preurile snt n cdere liber costul unul tranzistor a fost mprit la 20.000 ntre 1960-1976... Dar va trebui ateptat anul 1980 pentru a se saluta apariia primului microcalculator portabil. Anii 1980 Sunt marcai de contientizarea comunitii bibliotecarilor francezi n privina standardizrii i a folosirii de instrumente comune. Catalogul colectiv naional al publicaiilor seriale apare n 1983 din fuziunea dintre IPPEC (Inventarul permanent al periodicelor n curs), AGAPE (Aplicarea gestiunii automatizate la periodice), CPI (Catalog de periodice interregional) i CIEPS (Centrul internaional de nregistrare a publicaiilor seriale). In plus, apare o preocupare fa de conceptul de catalog colectiv de lucrri (CCO); aceast idee este aplicat azi de o manier mai extins n Catalogul colectiv al Franei. Apariia microcalculatorului n bibliotec Deceniul 1980 a vzut introducerea primelor microcalculatoare n bibliotecile publice, cel mai adesea fiindc era instrumentul necesar pentru asigurarea regsirii notielor bibliografice pe un compact disc optic, dar deseori era un echipament dedicat, puin sau deloc legat la sistemul 4

informatic al bibliotecii; n paralel, microcalculatoarele au fost utilizate pentru lucrri de birou, cel mai adesea total independente de sistemul de gestionare a bibliotecii. La sfritul deceniului '80 au aprut softurile de gestionare a bibliotecii, deseori destinate unor mici instituii. In fine, a fost, din pcate, utilizat pentru meterirea", ca n anii 1970, a sistemelor locale" ; aceste sisteme, construite cu softuri de aplicaii birotice (Word,- Excel etc.) sau de sisteme de gestionare a bazelor de date (Dbase, Acces, Paradox etc.) nu sunt, din nefericire, viabile n contextul actual: n unele cazuri, se poate c ofer, posibilitatea regsirii unor date bibliografice, ceea ce ar rspunde unei nevoi precise, dar procesul lor de elaborare dovedete c analiza e pe Termen foarte scurt, ceea ce ar avea, cu certitudine, grave consecine economice pentru instituie. Dezvoltarea microinformaticii n anii 1980 a avut i o alt consecin: vechea discuie ce opune lumea bibliotecilor celei a centrelor de documentare a prilejuit evoluia unor aplicaii separate : - Pe de o parte, pachetele de programe zise documentare", ignornd adesea formatele MARC i fiierele de autoritate, dar care aveau importante funcii de indexare pe subiecte, ba chiar de interogare n text; n pofida tuturor calitilor de putere de cutare, aceste produse devin, in general, total proprietare", deci incompatibile ntre ele. - Pe de alt parte, pachetele de programe zise de bibliotec", cu o structura mai rigid", tiind n mod normal s administreze la intrare i n ieire datele structurate n format MARC i avnd funci speciale cu, de pild, un modul de mprumut. Anii 1990 Dup perioada timpului partajat i a anilor micro, iat-ne n era lui multimedia, a interactivitii, a reelelor interconectate i a informaticii de comunicaii", graie unei dezvoltri rapide a reelelor. In 3 ianuarie 1994, din fuziunea dintre Biblioteca Naional i Biblioteca Franei ia natere Biblioteca Naional a Franei, care trece la realizarea unui sistem de informare (SI) foarte ambiios, total integrat, sprijinit pe conceptele tehnice cele mai moderne i care va trebui s devin centrul unei vaste reele naionale. Pe un plan mai general, primii ani ai deceniului '90 arat o tendin de reunificare a activitii bibliotecilor universitare i de cercetare i a bibliotecilor publice : bibliotecile universitare adopt sistemele integrate, folosind astfel aceleai pachete de programe ca bibliotecile publice ; n plus, apare o nou pia : localitile mici i informatizeaz bibliotecile. Supremaia furnizorilor francezi demonstreaz o tendin spre uzur n faa produselor anglosaxone, formatul MARC i sistemul de operare UNIX pe minicalculator se impun, dar ambele cu 5

grade foarte diverse de standardizare. De altfel, pachetele de programe documentare" i cele de bibliotec" arat o tendin evolund spre un tip de pachete de programe unic integrnd gestionarea documentului. In zilele noastre, se afirm tendinele tehnice; sunt de remarcat mai multe mutaii importante n curs de desfurare : o net schimbare de destinaie a sistemelor specifice nspre aplicaii portabile, o tendin de standardizare a sistemelor de gestionare a bazelor de date (SGBD), o remarcabil deschidere ctre sistemele integrate de pe piaa, dezvoltarea rapid a reelelor locale datorat, n parte, unei creteri importante a performanelor modemelor, o tendin nc modest de standardizare a limbajelor de cutare, apariia de baze de date distribuite, programarea orientat pe obiect, utilizarea n cretere, a sistemelor de gestionare a bazelor de date relaionale (SGBDR), indexarea n text integral sau interogarea bazelor de date n limbaj natural. ns, cea mai important tendin i ale crei consecine vor fi foarte puternice n lumea informaticii nu i-a ncheiat nc evoluia : este vorba de modelul client/server.

2.Activitile de proiectare a bazei de date

Activitile de proiectare a bazei de date, constituie obiect de studiu pentru doua domenii ale sistemelor informaionale. Este vorba, pe de o parte, de dezvoltarea de aplicaii software, iar pe cealalt parte de un domeniu mai larg care intete mai mult dect la realizarea de aplicaii. Este vorba de analiza si proiectarea sistemelor informaionale. Analiza si proiectarea se ocup, printre altele si cu investigarea tuturor proceselor, operaiunilor si tranzaciilor dintr-o firma sau instituie, cerinele utilizatorilor si perspectivelor organizaionale, astfel incit toate aceste aspecte sa fie luate in calcul in realizarea unui sistem informaional coerent, aliniat misiunii, obiectivelor si politicilor firmei. Cu alte cuvinte analiza si proiectarea pornesc mai din amonte , de la utilizatori, procese, tranzacii economice, ncercnd sa modeleze realitatea sub forma unei largi game de diagrame , scheme, specificaii pe care le vor nainta realizatorilor modulelor de interferenta, prelucrri si date. Una dintre cele mai cunoscute scheme de Planificarea aplicaiilor de lucru cu baze de date realizare a BD sau schema de principiu a ciclului de viaa al aplicaiilor cu BD este cea din ediiile lucrrii lui Thomas Connoly si Carolyn Begg1, prezentata in figura 1.1. Amploarea activitilor din ciclul de viaa a unei BD depinde de anvergura aplicaiei. Cnd sistemul dezvoltat vizeaza un numr redus de utilizatori si se refera la un ansamblu de funcii nu din cale-afara de complex, multe etape sunt srite sau parcurse sumar. Planificarea BD
cerinelor Colectarea si analiza Definirea sistemului

presupune, ealonarea pailor ciclului de viaa pentru atingerea unui maxim de eficacitate. Ca si in cazul planificrii software-ului, planificarea BD presupune identificarea si evaluarea activitilor ce trebuie derulate, resurselor necesare derulri activitilor, fondului de timp, specialitilor si banilor disponibili. Planificarea BD trebuie integrata in strategia de ansamblu a Proiectarea conceptuala firmei, unul dintre obiectivele eseniale fiind catalizarea activitilor, politicilor si a strategiei .
SGBD Proiectarea BD Proiectarea logica Selectarea aplicaiei Proiectarea

Proiectarea fizica

Definirea sistemului Presupune specificarea domeniului si granielor aplicaiei ce lucreaz cu baza de date,
Prototipizarea Implementarea

utilizatorilor, aplicabilitii sale, precum si a celorlalte componente ale sistemului informaional la care se va conecta noul subsistem.
ncrcarea si conversia datelor
1

. Connolly, T., Begg, C.E., Strachan, A.D., Database Systems. A practical Approach to Design, Implementation and
Testarea

Management, Addison-Wesley, Harlow, 1996

7
ntreinerea operaionala

Fig. 1.1 Ciclul de viaa al aplicaiilor ce folosesc baze de date Colectarea si analiza cerinelor Aceasta etapa implica adunarea si analiza cerinelor aplicaiilor din partea utilizatorilor. Cerina reprezint o opiune, un element ce trebuie inclus, tratat in noul sistem . Proiectarea BD se bazeaz pe informaii despre organizaii, informaii ce trebuie preluate si gestionate de baza. Acestea pot fi culese in diferite moduri: 8

intervievarea personalului din firme, cu precdere a celor mai apropiai, prin

specificul activitii lor, de profilul aplicaiei, avndu-se in vedere acordarea unei atenii mrite experilor in compartimentele funcionale considerate; utilizatori; Utilizarea experienei acumulate la proiectarea unor sisteme similare. Informaia culeasa trebuie sa includ: principalele domenii si grupuri de utilizatori; documentaia utilizata sau generata de si despre aceste domenii de utilizatori; detaliile tranzaciilor reclamate de fiecare domeniu in parte; o lista de cerine, pe prioriti, a fiecrui domeniu . Rezultatul acestei activiti l reprezint specificaiile cerinelor organizaionale, prezentate de obicei , sub forma unui set de documente in care sunt descrise , din diferite unghiuri, operaiile firmei. Proiectarea bazei de date Aceasta include proiectarea logic i fizic a BD. n urma acestei etape va fi elaborat modelul BD care va constitui suportul obiectivelor i operaiunilor organizaiei. Principalele obiective ale proiectrii BD sunt:
-

Observarea modului de derulare a operaiilor in cadrul firmei; Examinarea documentelor, in principal a celor purttoare de informaii; Folosirea chestionarelor pentru preluarea de informaiilor de la un numr mare de

reprezentarea datelor i a relaiilor dintre date, formulare pe diferitele zone ale furnizarea unui model al datelor care s permit orice tranzacie autorizat asupra construirea unui proiect care va atinge cerinele de performan ale sistemului,

aplicaiei i ale grupurilor de utilizatori;


-

acestora;
-

cum ar fi: securitatea, timpul de rspuns etc. Deseori ns, realizarea unui obiectiv se face n detrimentul altuia. Spre exemplu, un nivel ridicat de securitate atrage dup sine scderea vitezei de rspuns. Dup Connoly i Begg2, exist dou abordri majore ale proiectrii BD. Abordarea bottom-up pornete de la nivelul elementar, cel al atributelor, care sunt grupate n clase de entiti i asociaii. Normalizarea este un exemplu tipic de demers bottom-up, care d rezultate
2

. Connolly, T., Begg, C.E., Database Systems. A practical Approach to Design, Implementation and Management, editia a III-a

Addison-Wesley, Harlow, 2002

bune atunci cnd numrul atributelor nu este prea mare. Cnd numrul de atribute este ridicat, mai nimerit este abordarea top-down care dezvolta mai nti un model sintetic, simplificat al datelor. Cele cteva entiti sunt descompuse ulterior In mai multe etape, pn la identificarea atributelor si entitilor elementare. Modelarea folosind diagrame E-R are la baz abordarea topdown. Selectarea sistemului de gestiune a bazei de date Considerat un pas opional, selectarea SGBD presupune alegerea celui mai adecvat SGBD pentru realizarea si exploatarea aplicaiei. Nu toate SGBD-urile satisfac cerinele aplicaiei, iar pe de alt parte, cele mai performante sunt i cele mai scumpe. Cerinele de funcionalitate trebuie coroborate cu resursele disponibile, n vederea identificrii celui mai adecvat SGBD comercial pentru realizarea si exploatarea aplicaiei. Proiectarea aplicaiei Proiectarea aplicaiei se refer la conceperea secvenelor de cod (instruciuni n limbaje de programare) ce vor lucra cu baza. Din fig.1.1 se observa ca proiectarea BD si proiectarea aplicaiei sunt activiti distincte, paralele ale ciclului de via al aplicaiilor cu BD. n cea mai mare parte a cazurilor, proiectarea aplicaiei nu poate fi finalizat nainte de proiectarea bazei. Pe de alt parte, informaiile proiectrii vor fi transmise proiectrii BD. n aceast etap trebuie verificat dac toate funciile specificate n cerinele utilizatorului se regsesc n proiectul aplicaiei. Proiectarea aplicaiei include i activitatea de proiectare a tranzaciilor. De asemenea, tot acum se elaboreaz i modelul interfeei cu utilizatorul a aplicaiei. Prototipizarea Dei opional, prototipizarea se poate dovedi deosebit de util prin construirea unui model de lucru iniial simplificat, model ce permite dezvoltatorilor i utilizatorilor s testeze i s amelioreze incremental noua aplicaie. Un mare avantaj al prototipizrii este gradul mult mai mare de acceptare a noului sistem la final, acesta fiind dezvoltat mpreun eu utilizatorii ce pot s-i exprime pe parcurs doleanele. Etapele prototipizrii sunt descrise n fig. 1.23
3

Connolly, T., Begg, C.E., Strachan, A.D., Database Systems. A practical Approach to Design, Implementation and

Management, Addison-Wesley, Harlow, 1996

10

Dezvoltarea modelului de lucru

Abandonarea aplicaiei Implementarea aplicaiei Decizie Redezvoltarea aplicaiei Demararea unui nou prototip

Construirea prototipului

Utilizarea si testarea prototipului

Revizuirea prototipului

Fig. 1.2 Schema de principiu a prototipizrii Implementarea Presupune crearea definiiilor BD la nivelurile conceptual, extern si intern, precum si punerea in lucru a aplicaiei, fiind realizata utiliznd limbajul de definire a datelor (DDL) pus la dispoziie de SGBD-ul selectat. Implementarea aplicaiei se realizeaz intr-un mediu de programare utiliznd un limbaj de tip 3GL sau 4GL. 4GL - fourth-generation programming language - este un limbaj de programare sau mediu de programare proiectat cu un anumit scop, cum ar fi dezvoltarea de software comercial de afaceri. Toate 4GLs sunt concepute pentru a reduce efortul de programare, timpul necesar pentru a dezvolta software-ul, precum i costurile de dezvoltare software4. Conversia i ncrcarea datelor Acest pas este necesar atunci cnd aplicaia dezvoltat nlocuiete o alta. Datele trebuie transferate din vechea aplicaie n cea nou, operaie ce implic de multe ori schimbarea structurii fiierelor, a formatului, logic i fizic, al datelor, n concordan cu cerinele noii aplicaii, dar i ale noului SGBD. Uneori sunt necesare (i posibile) i conversii ale unor programe din vechiul n noul sistem. Majoritatea SGBD-urilor actuale au module de importexport din/n alte SGBD-uri. Conversia aplicaiilor este, n general, mult mai complex atunci cnd se schimb limbajul/mediul de programare.
4

http://en.wikipedia.org/wiki/4GL

11

Testarea Testarea este operaiunea sistematic de verificare a funcionalitii sistemului, a gradului de adecvare la cerinele utilizatorilor. Prin testare, aplicaia este lansat n execuie, urmrindu-se depistarea eventualelor erori i ameliorarea unor parametri precum viteza, securitatea etc. Urmnd o metodologie riguroas, msurtorile din cadrul testrii dau posibilitatea evalurii calitii i fiabilitii software-ului. Este de preferat ca utilizatorii aplicaiei s fie pe deplin implicai n procesul testrii, iar aplicaia testat s fie instalat pe un alt sistem dect cel pe care a fost conceput; n orice caz, trebuie avut n vedere i un mecanism de recuperare a datelor corupte n caz de avarie. Exist mai multe strategii de testare a corectitudinii i funcionalitii unei aplicaii de lucru cu BD ce pot fi aplicate individual sau combinate n cadrul aceluiai sistem:
-

top-down; bottom-up; fire de execuie; test de stres.

Testarea top-down ncepe de la nivelul superior al funciilor majore ale aplicaiei. Este util n verificarea arhitecturii sistemului, reproiectrile majore fiind semnalate din primele momente ale testrii. Testarea bottom-up ncepe cu modulele elementare i continu pe vertical cu modulele compozite pn la nivelul general al aplicaiei. Testarea firelor de execuie este foarte important n sistemele de prelucrare n timp real, n care sunt rulate simultan o serie de procese ce coopereaz. Acest tip de testare este mult mai complex, fiind legat de detaliile tehnice ale sistemului de operare. Fiecrui proces i se aloc un fir de execuie (thread) care este urmrit de la declanarea sa, acordndu-se o mare importan punctelor de ntlnire cu celelalte fire executate pe sistem. Testul de stres presupune suprasolicitarea bazei i aplicaiilor. Astfel, BD se ncarc automat cu un numr extrem de mare de nregistrri, iar la aplicaie se conecteaz ct mai muli utilizatori. Astfel se depisteaz pn la ce limite rezist aplicaia. ntreinerea operaional Aceast activitate se deruleaz pe toat durata de utilizare a aplicaiei. n afar de monitorizarea BD, a programelor, de curarea" periodic i repararea eventualelor erori 12

hard/soft, tot n aceast activitate sunt ncorporate operaiunile de actualizare a datelor i programelor (ca urmare a unor noi oportuniti tehnologice), modificarea unor parametri (procente TVA, impozite etc.). Monitorizarea performanei sistemului se realizeaz prin raportarea la un nivel prestabilit de acceptare. Dac este cazul, o situare a performanei generale sub acest punct critic poate antrena reorganizarea BD. Altminteri, chiar i n cazul funcionrii n parametri normali, BD trebuie optimizat, avnd n vedere i facilitile oferite de SGBD. ntreinerea i actualizarea aplicaiei sunt necesare n mai mare sau mai mic msur. Spre exemplu, ntr-un mediu economic i legislativ dinamic, cum este cel din ara noastr, deseori este necesar modificarea unor pri importante ale aplicaiei. Uneori, modificarea presupune reluarea unora sau tuturor pailor din ciclul de via al aplicaiei de lucru cu BD.

3. Studiu asupra proiectrii si normalizrii unei baze de date


Descrierea unui model de date se bazeaz, n principal, pe trei elemente: structura - modul n care sunt organizate efectiv datele n baz, integritatea - mecanismul de asigurare a corectitudinii datelor, manipularea - n sensul modificrii i extragerii informaiilor din baz.

Pentru proiectarea bazei de date, ne intereseaz primele dou aspecte, dei, vrndnevrnd, atunci cnd ne vom pune problema implementrii tuturor restriciilor bazei n oricare dintre SGBD-uri, vom recurge copios la opiunile manipulative ale modelului. Modelul relaional s-a conturat n dou articole publicate n 1969 i 1970 de ctre E.F. Codd, matematician la centrul de cercetri din San Jose California, al firmei IBM. In acel moment, tehnologia bazelor de date era centrat pe modelele ierarhic i reea, modele ce depind ntr-o mai mare msur de organizarea intern a datelor pe suportul de stocare. Codd a propus o structur de date tabelar, independent de tipul de echipamente i de software-ul de sistem pe 13

care este implementat,o structur nzestrat" cu o serie de operatori pentru extragerea datelor. Fa de modelele ierarhic i reea, modelul relaional prezint cteva avantaje: su. propune structuri de date uor de utilizat; amelioreaz independena logic i fizic; pune la dispoziia utilizatorilor limbaje neprocedurale; optimizeaz accesul la date; mbuntete integritatea i confidenialitatea datelor; ia in calcul o larg varietate de aplicaii; abordeaz metodologic definirea structurii bazei de date.

Exist o larg tipologie a SGBDR-urilor, aa nct orice categorisire i are riscul Cele mai accesibile i, implicit, cele mai utilizate sunt SGBDR-urile dedicate iniial uzului individual: Access, Paradox, Visual FoxPro. Astzi, multe dintre acestea au caracteristici profesionale i pot fi folosite simultan la dezvoltarea aplicaiilor pentru zeci de utilizatori. Pentru aplicaiile complexe din bnci, corporaii, organizaii i instituii de mari dimensiuni s-au impus SGBDR-urile de categoria grea" : Oracle, DB2 (IBM), Informix (IBM), Sybase (Sybase), SQL Server (Microsoft). Acestea sunt mult mai robuste, mult mai fiabile, dar i costisitoare. n ultimul timp i-au fcut apariia, ca alternative la sus-amintiii coloi, aa-zisele SGBD-uri (aproape) gratuite, precum PostgreSQL, MySQL, mSQL, Firebird etc. Acestea ruleaz, de obicei, pe sisteme de operare de tip Linux (foarte ieftine) i se ntrevd ca adversari serioi ai marilor productori.

3.1 Relaii/tabele, domenii, atribute, valori nule.


O baz de date relaional (BDR) poate fi definit ca un ansamblu de relaii (tabele); fiecare tabel, alctuit din linii (tupluri), are un nume unic i este stocat pe suport extern (de obicei disc). La intersecia unei linii cu o coloan se gsete o valoare atomic. O relaie conine informaii omogene legate de anumite entiti, procese, fenomene: CRI, ELEVI, LOCALITI, PERSONAL, FACTURI etc. Spre exemplu, n fig. 4.1este reprezentat tabela STUDENTI ce stocheaz informaii privitoare la studenii nscrii la cursurile unei faculti. relaie/tabela atribute/coloane 14

tuplu Fig. 3.1 Relaia STUDENTI

domenii

n teoria relaional se folosete termenul relaie. Practica ns a consacrat termenul tabel (engl. table). Un tuplu sau o linie este o succesiune de valori de diferite tipuri. n general, o linie grupeaz informaii referitoare la un obiect, eveniment etc., altfel spus, informaii referitoare la o entitate: o carte, un/o student(), o localitate, un angajat al firmei, o factur emis etc. n figur 3.1 este pus n eviden al saselea tuplu din tabela STUDENTI, tuplu referitor la studentul Ionescu Gh Vasile. Linia respectiv este alctuit din opt valori ce desemneaz: Numrul matricol al studentului; numele, iniiala tatlui si prenumele; codul numeric personal; adresa; anul de studiu; serie; grupa; tipul de bursa de care beneficiaz. Teoretic, orice tuplu reprezint o relaie ntre clase de valori (n cazul nostru, ntre opt clase de valori); de aici provine sintagma baze de date relaionale, n sensul matematic al relaiei, de asociere a dou sau mai multe elemente. Firete, toate tuplurile relaiei au acelai format. Ordinea tuplurilor nu prezint importan din punctul de vedere al coninutului informaional al tabelei. Fiecare atribut este caracterizat printr-un nume i un domeniu de valori pe care le poate lua. Domeniul poate fi definit ca ansamblul valorilor acceptate pentru un element component al relaiei5:
-

ntr-o tabel destinat datelor generale ale angajailor, pentru atributul Sex, domeniul este alctuit din dou valori: femeiesc i brbtesc; domeniul atributului jude este alctuit din numele fiecrui jude (plus Bucureti);

Marin Fotache Proiectarea bazelor de date . Normalizarea si postnormalizare. Implementari SQL si Oracle Ed. Polirom 2005

15

domeniul unui atribut precum Pre_unitar, care se refer la preul la care a fost vndut un produs/serviciu, este cu mult mai larg, fiind alctuit din orice valoare cuprins ntre 1 i 99999999999 lei (avnd n vedere rata inflaiei).

Reinem corespondena noiunilor relaie-tabel, tuplu-linie i atribul-coloan. Numrul de tabele pe cate le conine o baz de date, atributele adunate" n fiecare tabel, domeniul fiecruia dintre atribute prezint diferene majore de la o baz la alta, chiar dac uneori reflect acelai tip de procese. Intrm astfel n sfera proiectrii bazelor de date, a dependenelor i normalizrii. Principalele caracteristici ale unei relaii sunt: -

n cadrul unei baze de date, o relaie prezint un nume distinct de al celorlalte relaii; valoarea unui atribut ntr-un tuplu oarecare conine a singur valoare (o valoare atomic) fiecare atribut are un nume distinct; orice valoare a unui atribut face parte din domeniul pe care a fost definit acesta; ordinea dispunerii atributelor n relaie nu prezint importan; flecare tuplu este distinct, adic nu pot exista dou tupluri identice; ordinea tuplurilor nu influeneaz coninutul informaional al relaiei.

3.2. Restricii ale bazei de date.


Principalele restricii definibile n modelul relaional sunt: de domeniu, de nenulitate, de atomicitate, de unicitate, referenial i cele definite de utilizator. Restricia de domeniu. Dup cum am vzut n paragraful anterior, un atribut este definit printr-un nume i un domeniu. Orice valoare a atributului trebuie s se ncadreze n domeniul definit. Exist mai multe moduri de percepie a acestei restricii. O parte din informaticieni substituie domeniul tipului atributului: numeric, ir de caractere, dat calendaristic, logic (boolean) etc, i, eventual, lungimii (numrul maxim de poziii/ caractere pe care se poate ntinde" un atribut). Dup cum 16

se observ, este luat n calcul numai aspectul sintactic al domeniului. Faptul ca anul de studiu al unei clase poate fii una dintre valorile 9, 10, 11, 12 reprezint o restricie de comportament sau mai simplu o restricie definita de utilizator. Cea de-a doua categorie privete deopotriv domeniile sintactic i semantic. Astfel, domeniul sintactic al atributului LitClasa (litera) dintr-o relaie precum ELEVI_LICEU este un caracter, obligatoriu liter, i chiar mai restrictiv, litera e obligatoriu majuscul. Din punct de vedere semantic, LitClasa poate lua una dintre valorile: A, B, C,..., n funcie de numrul de clase dintr-un an de studiu (cinci clase de a IX-a, patru de a X-a etc.). Nenulitatea. Dei inventat de nsui E.F. Codd, valoarea nul este vehement contestat de cea mai mare parte a liniei purist-relaionale (Date, Darwen6, Pascal). Nu discutm legitimitatea unei asemenea meta-valori, ci doar amintim c, ntr-o baz de date, unora dintre atribute li se poate interzice valoarea NULL. Atomicitate. Conform teoriei bazelor de date relaionale, orice atribut al unei tabele oarecare trebuie s fie atomic, n sensul imposibilitii descompunerii sale n alte atribute. n aceste condiii, se spune c baza de date se afl n prima form normal sau prima form normalizat (1NF). n tabela STUDENI un atribut cu valori neatomice poate fi considerat, pentru majoritatea situaiilor, Adresa, ntruct valorile sale ngrmdesc elemente ce pot fi i individualizate: strada, numr, bloc, scara, etaj, apartament, localitate i jude. Unicitate. ntr-o relaie nu pot exista dou linii identice (dou linii care prezint aceleai valori pentru toate atributele). Mai mult, majoritatea relaiilor prezint un atribut sau o combinaie de atribute care difereniaz cu siguran un tuplu de toate celelalte tupluri ale relaiei. Cheia primar a unei relaii (tabele) este un atribut sau un grup de atribute care identific fr ambiguitate fiecare tuplu (linie) al relaiei (tabelei). Exist trei restricii pe care trebuie s le verifice cheia primar : 6

unicitate: o cheie identific un singur tuplu (linie) al relaiei;

Date, C.J., Darwen, H.,Foundation for Database Systems. The Third Manifesto, editia a II-a, Addison-Wesley, Reading,

Massachusetts, 2000

17

compoziie minimala: atunci cnd cheia primar este compus, nici un atribut din cheie nu poate fi eliminat fr distrugerea unicitii tuplului n cadrul relaiei; n cazuri limit, o cheie poate fi alctuit din toate atributele relaiei;

valori nenule : valorile atributului (sau ale ansamblului de atribute) ce desemneaz cheia primar sunt ntotdeauna specificate, deci nenule; mai mult, nici un atribut din compoziia cheii primare nu poate avea valori nule. Cea dea treia condiie se mai numete i restricie a entitii.

Domeniul unui atribut care este cheie primar ntr-o relaie este denumit domeniu primar. Dac ntr-o relaie exist mai multe combinaii de atribute care confer unicitate tuplului, acestea sunt denumite chei candidate. O cheie candidat care nu este identificator primar este referit ca cheie alternativ. n tabela STUDENI exist dou chei candidate, Matricol i CNP. Am ales Matricol drept cheie primar, CNP-ul devenind cheie alternativ. Dac cheia primar a tabelei STUDENI este una simpl, exist ns suficiente cazuri n care cheia primar este compus din dou, trei sau, la extrem, toate atributele relaiei. S lum spre analiz o relaie PERSONAL care conine date generale despre angajaii firmei. Fiecare tuplu al relaiei se refer la un angajat, atributele fiind : Nume, Prenume, DataNaterii, Vechime, SalariuTarifar. Atributul Nume nu poate fi cheie, deoarece chiar i ntr-o ntreprindere de talie mijlocie este posibil s existe doi angajai cu acelai nume. Dac apariia a dou persoane cu nume identice este posibil, atunci apariia a dou persoane cu acelai Prenume este probabil. Nici unul dintre atributele Data Naterii, Vechime i Salariu Tarifar nu poate fi nzestrat" cu funcia de identificator. In acest caz, se ncearc gruparea a dou, trei, patru atribute, pn cnd se obine combinaia care va permite diferenierea clar a oricrei linii de toate celelalte. Combinaia Nume+Adres pare, la prima vedere, a ndeplini cerinele" de identificator. Ar fi totui o problem: dac n aceeai firm (organizaie) lucreaz mpreun soul i soia? Ambii au, de obicei, acelai nume de familie i, tot de obicei, acelai domiciliu. Este adevrat, cazul ales nu este prea fericit. Dar este suficient pentru compromiterea combinaiei. Urmtoarea tentativ este grupul Nume + Prenume + Adres, combinaie neoperant dac n organizaie lucreaz tatl i un fiu (sau mama i o fiic), avnd aceleai nume i prenume i domiciliul comun. 18

Ar rmne de ales una dintre soluiile (Nume + Prenume +Adres+Vechime) sau (Nume + Prenume + Adresa + DataNasterii). Oricare dintre cele dou combinaii prezint riscul violrii restriciei de entitate, deoarece este posibil ca, la preluarea unui angajat n baz, s nu i se cunoasc adresa sau data naterii, caz n care atributul respectiv ar avea valoarea NULL. Dificultile de identificare fr ambiguitate a angajailor au determinat firmele ca, la angajare, s aloce fiecrei persoane un numr unic, numr denumit Marca. Prin adugarea acestui atribut la cele existente, pentru relaia PERSONAL, problema cheii primare este rezolvat mult mai simplu. Actualmente, sarcina este simplificat i prin utilizarea codului numeric personal (CNP), combinaie de 13 cifre care prezint avantajul c rmne neschimbat pe tot parcursul vieii persoanei.

Restricia referenial O baz de date relaional este alctuit din relaii (tabele) aflate n legtur. Stabilirea legturii se bazeaz pe mecanismul cheii strine i, implicit, al restriciei refereniale. De exemplu, avem o relaie n care sunt implicate tabelele TIP_BURSE (Tip_bursa, Den_bursa, Cuantum_bursa) i STUDENI ( Matricol, Nume_pren, CNP, Adresa, An_studiu, Seriem Grupa, Tip_bursa ). Atributul Tip_Bursa joac un rol de agent de legtur" ntre cele dou relaii. Pentru tabela TIP_BURSE, atributul Tip_bursa este cheie primar, n timp ce n tabela STUDENI, Tip_bursa reprezint o coloan de referin sau cheie strin (extern), deoarece numai pe baza valorilor sale se poate face legtura cu relaia-printe TIP_BURSE. Cheile strine sau coloanele de referin sunt deci atribute sau combinaii de atribute care pun n legtur linii (tupluri) din relaii diferite. Tabela n care atributul de legtur este primar se numete tabelprinte (n cazul nostru, TIP_BURSE), iar cealalt, tabel-copil. Legat de noiunea de cheie strin apare conceptul de restricie referenial. O restricie de integritate referenial apare atunci cnd o relaie face referin la o alt relaie. Cnd dou tabele (relaii), T1 i T2, prezint atributul sau grupul de atribute notat
CH,

care pentru T1 este


CH

cheie primar, iar pentru T2, cheie strin, daca n T2 se interzice apariia de valori nenule ale referenial.

care nu exist n nici un tuplu din TI, se spune ca ntre T2 i TI s-a instituit o restricie Instituirea restriciei refereniale ntre tabelele TIP_BURSE (printe) i STUDENI (copil) permite cunoaterea, pentru fiecare student, a denumirii bursei i a cuantumului lunar. 19

Restricii-utilizator. Restriciile-utilizator mai sunt denumite i restricii de comportament sau restricii ale organizaiei. De obicei, aceste restricii iau forma unor reguli de validare la nivel de atribut, la nivel de linie sau de tabel sau a unor reguli implementate prin declanatoare(triggers). Spre exemplu, se poate institui o regul care interzice emiterea unei noi facturi (o nou vnzare) dac datoriile firmei client sunt mai mari de 2.000.000.000 lei, iar directorul acesteia nu este membru n partidul/partidele de guvernmnt.

3.3. Normalizarea
Proiectarea bazelor de date relaionale (BDR) presupune definirea atributelor, gruparea lor n tabele, stabilirea legturilor dintre ele, a mecanismelor de integritate i securitate, fiind un proces dificil n care cunotinele teoretice, experiena, inteligena, intuiia i creativitatea proiectanilor se mbin ntr-un mod mai mult sau mai puin armonios. Structura final a BD trebuie s asigure un echilibru ntre, obinerea unui volum maxim de informaii ntr-un interval de timp ct mai scurt i, eliminarea anomaliilor de stocare i actualizare, toate n condiiile unui grad apreciabil de securitate i integritate. Elaborarea schemei unei BD poate ncepe cu gruparea tuturor atributelor bazei de date ntr-o singur tabel (relaie universal). Dincolo de avantajul compactitii, lucrul cu o singur relaie atotcuprinztoare ridic serioase probleme privind redundana datelor i genereaz anomalii importante la adugarea, modificarea sau tergerea unor linii (tupluri). Ca o consecin direct, este necesar spargerea bazei n mai multe tabele care s fie legate prin restricii de integritate referenial. Este tocmai obiectivul central al normalizrii. Spargerea relaiei nu trebuie fcut oricum, deoarece apare riscul pierderilor de informaii. De asemenea, un numr prea mare de tabele necesit un efort sporit pentru controlul bazei i respectarea restriciilor. In plus, trebuie s inem seama de faptul c obinerea multor informaii dintr-o baz de date fragmentat este posibil prin operaiunea de jonciune, mare consumatoare de resurse. 20

Principalele obiective ale normalizrii sunt : -

minimizarea spaialului necesar stocrii datelor; minimizarea riscului apariiei de date inconsistente n cadrul BD; minimizarea anomaliilor ce pot aprea la actualizare (inserarea datelor, dar mai ales modificri i tergeri); ameliorarea structurii bazei, reprezentarea diverselor conexiuni dintre atributele bazei; diminuarea nevoii de reorganizare periodic a modelului.

Codd, printele modelului relaional, a definit iniial trei forme normale, notate prin 1NF, 2NF i 3NF. ntruct, ntr-o prim formulare, definiia 3NF ridica ceva probleme, Codd i Boyce au elaborat o nou variant, cunoscut sub numele Boyce-Codd Normal Form (BCNF). Dei este vorba, n principiu, despre o formulare mai riguroas a aceleiai 3FN, BCNF este prezentat separat n majoritatea lucrrilor. Formele 4 i 5, legate de numele lui Ronald Fagin, sunt tratate mai cu reinere, n literatura consacrat analizei i proiectrii bazelor de date. Ba chiar unele lucrri cu tent mai pragmatic se opresc declarat la 3FN, pe care o consider suficient n elaborarea BDR. Etapele normalizrii Fundamentul normalizrii BDR l constituie dependenele dintre atribute. Primele trei forme normale pot fi determinate pe baza dependenelor funcionale elementare (totale) i tranzitive. Forma a patra (4FN) se bazeaz pe dependenele multivaloare, n timp ce a cincea form normal (5FN) - pe dependenele de jonciune. Problema este c dependenele multivaloare i mai ales cele de jonciune sunt dificil de identificat i rar ntlnite n practic. Normalizarea BDR poate fi imaginat ca un proces prin care, pornindu-se de la relaia iniial R (universal), se realizeaz descompunerea succesiv a acesteia n subrelaii, dup succesiunea din Fig 4.27. Relaia R poate fi ulterior reconstruit din cele n relaii obinute n urma normalizrii, prin operaii de jonciune aplicate asupra acestora. Normalizarea reflect relaii care se manifest ntre atribute ale bazei. Este imposibil de normalizat o relaie fr a cunoate fenomenul, procesul pe care l reflect.

Oprea, D., Analiza sistemelor informationale, Editura Polirom, Iasi, 1999

21

Descompunere fr pierdere de informaii Prin normalizare se ncearc a se elimina redundane i anomalii manifestate la actualizare. Eliminarea se realizeaz prin sfrmarea" relaiei n dou sau mai multe relaii legate" prin restricii de integritate referenial. Ulterior, prin operaiuni de jonciune, tabela nceput iniial poate fi recompus, ori de cte ori va fi cazul.universala - R Relaie Cu ct desfacem" relaia iniial (universal) n mai multe tabele, cu att redundana
Exista evocate. Exist ns o limit, deoarece la datelor este mai redus si implicit, anomaliile grupuri repetitive ? Atomizarea atributelor descompunere trebuie avut n vedere pstrarea unor structuri care s permit, ulterior, obinerea

informaiilor necesare prin operaiuni de jonciune (apare noiunea de jonciune conservativ).


Relaia R are cheie primara? Descompunere in relaii ce au cheie primara

NU
1FN Exista DF pariale ?

DA

NU
2FN

DA

Aducerea relaiilor in 2FN

Exista DF tranzitive ?

NU

DA

Aducerea relaiilor in 3FN

3FN

NU
Aducerea relaiilor in BCFN

Toi determinanii sunt chei candidate ?

DA

BCNF

NU

Exista DF multivaloare?

DA
Aducerea relaiilor in 4FN

4FN Exista dependene de jonciune?

NU

DA
Aducerea relaiilor in 5FN

22

5FN Sfrit

NU

DA

Fig. 3.2 Etapele clasice ale normalizrii bazelor de date relaionale Relaia universal Prima etap a normalizrii const n identificarea informaiilor ce trebuie stocate i gestionate cu ajutorul bazei de date. Noiunea de relaie universal este unul dintre destulele ingrediente ale modelului relaional. Noi o s considerm relaia universal drept relaia alctuit din toate atributele identificate ca fiind relevante pentru aplicaie i toate tuplurile posibile cu valorile acestor atribute. Prin urmare, schema relaiei universale trebuie sa conin toate atributele bazei de date.

3.4. Prima form normalizat 1NF


Prima form normalizat (1NF) este, n general, tratat cu superficialitate de majoritatea practicienilor n materie de proiectare a bazelor de date. Aceasta deoarece principala cerin atomicitatea valorilor - este un deziderat uor de ndeplinit, cel puin la prima vedere. Cele mai sensibile chestiuni n aducerea relaiilor n INF sunt legate de atomicitate, eliminarea grupurilor repetitive, precum i de stabilirea cheii primare, care devine o problem delicat atunci cnd se pornete de la o relaie cu zeci sau sute de atribute. Definiii ale primei forme normalizate Dup Codd, o relaie este n prima form normal dac [...] nici unul dintre domeniile sale nu conine elemente care sunt, la rndul lor, seturi (ansambluri)8.Se cuvine de adugat

Codd,E.F.Further Normalization of the Database Relational Model, Database Systems, Courant Computer Science Symposia

Series, vol.6, Englewood Cliffs, N.J., Prentice Hall, 1972.

23

remarca lui Date care crede c ar fi fost mai nimerit ca, n locul termenului domenii, Codd s-1 fi folosit pe cel de atribute. Unele lucrri definesc o relaie aflat n 1NF ca acea relaie n care fiecare atribut prezint numai valori atomice, adic toate atributele sunt nedecompozabile; dup R. Riordan, o relaie este n INF dac domeniile pe care sunt definite atributele relaiei sunt scalare9. n ediia a treia a crii dedicate sistemelor de baze de date, Connoly i Begg sunt mai tranani: o relaie n 1NF este o relaie n care intersecia oricrei linii cu oricare coloan conine o valoare si numai una.10 Astfel, 1NF respinge ideea de set de valori, tuplu de valori sau combinaia acestora ca valoare a unui singur atribut pe un oricare tuplu (linie) a relaiei. Formularea care a generat cele mai multe confuzii este legat de noiunea de grupuri repetitive: o relaie n 1NF nu trebuie s conin grupuri repetitive. De obicei, noiunea de grup repetitiv este raportat direct la cea de atomicitate. O relaie este n 1 NF dac domeniile pe care sunt definite atributele relaiei sunt constituite numai din valori atomice (elementare), n plus, un tuplu nu trebuie s conin atribute sau grupuri de atribute repetitive
Definiia lui Toby Teorey, spune ca o relaie este n 1NF dac i numai dac toate

coloanele conin numai valori atomice; aceasta nseamn c nu exist grupuri (coloane) repetitive n cadrul vreunei linii a tabelei. Imediat autoarea precizeaz c un grup repetitiv apare ntr-o tabel atunci cnd unui atribut multi-valoare i sunt permise dou sau mai multe valori reprezentate n cadrul unei aceleiai linii.11 Aducerea unei relaii n INF presupune discutarea urmtoarelor elemente: raportul atribut simplu/atribut compus; grupuri repetitive de atribute (pe orizontal); grupuri repetitive de valori n cadrul fiecrei celule a tabelei.

Atribute simple i atribute compuse Primele vizate de stigmatul" neatomicitii sunt atributele compuse.Un exemplu celebru privind atribute compuse (non-atomice) este Adresa. Fiind alctuit din Strad, Numr, Bloc,
9

Riordan, R., Designing Relational Database Systems, Microsoft Press, 1999 Connolly, T., Begg, C.E., Database Systems. A practical Approach to Design, Implementation and Management, editia a III-a

10

Addison-Wesley, Harlow, 2002


11

Teorey, T.J., Database Modeling & Design, Morgan Kaufman, San Francisco, 1999

24

Scar, Etaj, Apartament, plus CodPotal (dup noul sistem de codificare), discuia despre atomicitatea adresei pare de prisos, iar descompunerea sa imperativ. Din nou ns trebuie s ne raportm la obiectivele bazei. Fr ndoial c, pentru BD a unei filiale CONEL sau ROMTELECOM, sau pentru Poliie, preluarea separat a fiecrui element constituent al adresei este vital. Intereseaz, spre exemplu, ce abonai sunt pe strada Tranziiei sau cte cereri sunt depuse de cetenii de pe strzile Lascr Catargi, Titu Maiorescu si Marina Scupra. Alte exemple de atribute ce pot fi considerate, n funcie de circumstane, simple sau compuse: trei litere). Despre grupuri repetitive i urmrile lor O relaie (tabel) n 1NF nu trebuie s conin atribute care se repet ca grupuri. Intr-o alt formulare, toate liniile unei tabele trebuie s conin acelai numr de atribute. Fiecare celul a tabelei, altfel spus, valoarea unui atribut pe o linie, trebuie sa fie atomic. Un grup repetitiv este un atribut sau grup de atribute dintr-o tabel care apare cu valori multiple pentru o singur apariie a cheii primare a tabelei nenormalizate. S lum exemplul tabelei BIBLIOTEC_1 din Fig.3.3. Tabela gestioneaz informaii despre crile existente n depozitul bibliotecii UTM Pitesti. De remarcat c n bibliotec exist dou exemplare ale crii cu ISBN-ul 973-683-709-2 i trei exemplare de cea dedicat Visual FoxPro. Prima carte a fost scris de patru autori i ei i sunt asociate opt cuvinte-cheie, iar a doua are un singur autor. Relaia nenormalizat conine trei grupuri repetitive: Cote, Autori i CuvinteCheie.
BIBLIOTECA ISBN
973-683-889-7 973-683-709-2

DataOperaiuniiBancare

(Data+Ora),

BuletiIldentitate

(Seria+Numr),

NrnmatriculareAuto (privit global, sau pe cele trei componente : jude, numr i combinaia de

Titlu
Visual Fox Pro. Ghidul dezvoltarii aplicatiilor profesionale SQL. Dialecte DB2, Oraclesi Visual FoxPro

Cota
III-13421, III-13422, III-13423 III- 10678, III-10679

Autori
Marin Fotache, Ioan Brava, Catalin Strambei,Liviu Cretu Marin Fotache

Editura
Polirom Polirom

LocSediuEd
Iasi Iasi

AnAparitie
2002 2001

CuvinteCheie
baze de date,SQL, proceduri stocate, Fox Pro, formulare, orientare pe obiect , client-server, Web baze de date, algebra relationala, SQL

Fig. 3.3. Relatia Biblioteca_1 25

Una dintre cele mai nerecomandate soluii pentru eliminarea grupurilor repetitive ine de extinderea pe orizontal a tabelelor, prin duplicarea forat a unor atribute. Pentru a nltura grupurile repetitive de pe primele dou linii, putem fi tentai s modificm structura tabelei, ca in urmatoarea structura : Biblioteca_2 ( ISBN, Titlu, Cota1, Cota2, Cota3, Autor1, Autor2, Autor3, Autor4, Editura, LocSediuEd, AnAparitie, CuvantCheie1, CuvantCheie2, CuvantCheie3, CuvantCheie4, CuvantCheie5, CuvantCheie6, CuvantCheie7) Dei tabela se afl n prima form normal, structura acesteia este hilar. Ar trebui s rezervm" cteva zeci de atribute pentru cotele crilor, alt serie de atribute pentru autori, ca s nu mai vorbim de cuvintele-cheie. Dei hilar, schema de mai sus nu violeaz conceptul de atomicitate, oricare ar fi formularea acestuia. Eliminarea grupurilor repetitive prin adugarea de tupluri A doua variant pstreaz structura relaiei, n sensul c nu se modific numrul de atribute, adugndu-se tupluri (linii) suplimentare astfel nct orice valoare a celor trei atribute de tipul grupuri repetitive" s devin atomic. Apare ns problema: cum anume completm tuplurile pentru ca s fie preluate toate informaiile, iar, pe de alt parte, eventualele actualizri s nu antreneze pierderi sau alterri de informaii. n acest sens, am putea lua n discuie trei soluii, dup cum urmeaz: Numr minim de linii - o singur valoare atomic pentru flecare atribut compozit. Avem trei atribute non-atomice (multivaloare), pentru fiecare carte, numrul de linii din tabel va fi maximul dintre numrul cotelor, numrul autorilor i numrul cuvintelor-cheie. Astfel, pentru Visual FoxPro sunt trei cote, patru autori i opt cuvinte-cheie; aadar, vom avea opt linii. Valorile cotelor n liniile 4-8 vor fi NULL; la fel i valorile atribului Autor pentru liniile 5-8. Deoarece o cot nu poate identifica dect o singur carte, cheia primar a noii relaii este alctuit din trei atribute (Cot. Autor, Cuvntcheie). Redundana datelor este evident. Dac pentru cartea de Visual FoxPro am dori s mai introducem un nou cuvnt-cheie, ar trebui inserat o linie nou n tabel, n care valorile atributelor Autor i Cot s fie NULL. Aceasta nu este ns singura problem. S presupunem c sintagma proceduri stocate este greit asociat crii de Visual FoxPro. n mod normal, corectarea acestei greeli presupune tergerea celui de-al treilea tuplu: 26

DELETE FROM BIBLIOTEC_2 WHERE ISBN - '97 3-683-8 8 9-7' AND cuvntcheie = 'proceduri stocate') Necazul e c tergerea liniei se face cu dou pierderi de informaii. Prima pierdere ine de calitatea de coautor ai acestei cri a lui Ctlin Strmbei, iar a doua este legat de exemplarul crii ce are cota III-13423. Aceasta deoarece tuplul ters era singurul care se referea la autorul i la cota cu pricina. Am putea ncerca un artificiu, i anume ca tergerea unui cuvnt-cheie, a unui autor ori a unei cote s nu se fac prin tergerea liniei respective, ci prin setarea pe NULL a valorii de pe linia incriminat: UPDATE BIBLIOTEC _2 SET cuvntcheie = NULL WHERE ISBN = '97 3-68 3-8 8 9-7' AND cuvntcheie = ('proceduri stocate') Nici aceast idee nu e din cale-afar de inteligent. Dac am dori eliminarea sintagmei Web pentru aceeai carte: UPDATE BIBLIOTEC_2 SET cuvntcheie = NULL WHERE ISBN - '97 3-683-68 9-7' AND cuvntcheie = 'Web') atunci linia modificat devine cu totul de prisos n tabel, toate cele trei atribute, cota, Autor i cuvntcheie, avnd valori NULL. Cu alte cuvinte, dup modificare, tuplul nu spune nimic, nu are valoare informaional. Practic, dup fiecare NULL-izare pe o linie a unuia dintre cele trei atribute, trebuie verificat dac pe linia respectiv celelalte dou atribute au valori NULL, caz n care linia se poate terge. Mai exist o problem i din punct de vedere al coninutului informaional. S presupunem c ne intereseaz s aflm care sunt autorii ce au scris despre SQL. innd seama de stuctura relaiei de mai sus, am fi tentai s folosim o selecie dup cuvntul-cheie SQL, urmat de o proiecie a valorilor atributului Autor : SELECT autor FROM BIBLIOTEC_2 WHERE cuvntcheie = ( 'SQL')

27

Rezultatul furnizat este alctuit din dou linii, una ce conine valoarea Ioan Brava, iar cealalt valoarea NULL. Lipsesc deci ceilali trei autori ai crii despre Visual FoxPro, dintre care unul a scris chiar o carte despre SQL. Interogarea ce furnizeaz rspunsul corect trebuie s foloseasc o jonciune sau corelare dup atributul ISBN. Prin urmare, este necesar de tiut c structura informaional pe care o reprezint tabela de mai sus are o serie de neajunsuri. Cel mai bine ntemeiat motiv de renunare la aceast variant este prezena valorilor nule n componena atributelor chei primare. Numr de linii egal cu suma valorilor elementare ale atributelor de tip grup repetitiv. A doua soluie de completare are n vedere eliminarea problemei care apare la tergerea unei linii n cazul soluiei precedente, i anume: pe oricare linie, o valoare nenul a unuia dintre cele trei atribute atrage dup sine nulitatea celorlalte dou. Spre exemplu, prima carte are 3 cote, 4 autori i 8 cuvinte-cheie; prin urmare, vor fi necesare 3 + 4 + 8 = 15 linii. Aceast secund soluie, dei presupune un numr mai mare de linii, elimin necazul pierderii involuntare de informaii. Astfel, tergerea unui cuvnt-cheie nu va afecta, cu siguran, nici un autor sau exemplar al crii respective. Ca i n cazul soluiei anterioare, indezirabilitatea variantei este legat de prezena valorilor nule n componena atributelor chei primare. Numr maxim de linii, egal cu produsul valorilor elementare ale atributelor de tip grup repetitiv. De data aceasta, tiem valorile nule de la rdcin, introducnd n relaie toate combinaiile Autor-Cota-CuvntCheie. Cum prima carte are 3 cote, 4 autori i 8 cuvinte-cheie, n relaia BIBLIOTEC_3 vor exista 3 * 4 * 8 = 96 de tupluri referitoare la aceasta. Aducerea relaiei n 1NF eliminnd grupurile repetitive prin adugarea de noi tupluri de aceast manier se dovedete mai mult dect costisitoare. Aceasta nu numai din punctul de vedere al spaiului excesiv consumat din pricina redundanei masive, dar i dac ne gndim la anomaliile de actualizare. Spre exemplu, pentru a nu pierde informaii, atunci cnd adugm un cuvnt-cheie nou pentru cartea luat spre analiz, e nevoie s inserm n tabel nu mai puin de 3 (cote) * 4 (autori) = 12 Unii. Dezvoltnd aceast idee optimist, imaginai-v cum stau lucrurile

28

pentru o lucrare monumental cu 10 autori i 78 de cuvinte-cheie din care n bibliotec exist 40 de exemplare !?!?!

Eliminarea grupurilor repetitive prin construirea de noi relaii. Consta n ruperea" din relaia universal a grupurilor i constituirea de relaii noi. Spre exemplu, pentru aducerea unei relaii n 1NF parcurgem patru pai: n relaia universal, n locul atributelor compuse se trec componentele acestora, ca atribute simple; se constituie cate o relaie pentru fiecare grup repetitiv; in schema fiecrei noi relaii obinute la pasul doi se introduce si cheia primara a relaiei nenormalizate; cheia primara a fiecrei noi relaii va fii compusa din atributele/atributele chei ale relaiei plus unul sau mai multe atribute proprii. Aplicand acest algoritm la relatia Biblioteca_1 , obtinem patru tabele : Cote ( ISBN, Cota), Autori_Carti (ISBN, Autor) , Carti_Cuvcheie (ISBN, Cuvantcheie) , Carti(ISBN, Titlu, Editura, LocSediuEd, AnAparitie). Structura obinut se detaeaz prin cel mai mic volum de redundan de pn acum, ceea ce antreneaz i economii de stocare, i reducerea sensibil a anomaliilor de actualizare. Personal ns, reproez acestui stil de normalizare bazat pe eliminarea grupurilor repetitive caracterul prea ochiometric". Observarea grupurilor repetitive depinde decisiv de ordinea n care sunt dispuse atributele n relaie (teoria relaional prevede clar c nici ordinea coloanelor, nici cea a liniilor nu influeneaz coninutul informaional al unei tabele). S discutm relaia BIBLIOTEC_4, ce are aceeai structur ca BIBLIOTEC_1, dar ordinea atributelor este schimbat - vezi figura 3.4. Tabela BIBLIOTEC_4 este mai aproape de realitate dect BIBLIOTEC_1. n depozit sunt trei exemplare ale crii dedicate Visual FoxPro, acestora corespunznd cu trei tupluri n
BIBLIOTECA_4 Cota III-13421 III-13422

ISBN 973-683-889-7 973-683-889-7

Titlu Visual Fox Pro. Ghidul dezvoltarii aplicatiilor profesionale Visual Fox Pro. Ghidul dezvoltarii aplicatiilor profesionale

Autori Marin Fotache, Ioan Brava, Catalin Strambei,Liviu Cretu Marin Fotache, Ioan Brava, Catalin Strambei,Liviu Cretu

29

III-13423 III- 10678 III-10679 Editura Polirom Polirom Polirom Polirom Polirom

973-683-889-7 973-683-709-2 973-683-709-2 LocSediuEd Iasi Iasi Iasi Iasi Iasi

Visual Fox Pro. Ghidul dezvoltarii aplicatiilor profesionale SQL. Dialecte DB2, Oraclesi Visual FoxPro SQL. Dialecte DB2, Oraclesi Visual FoxPro AnAparitie 2002 2002 2002 2001 2001

Marin Fotache, Ioan Brava, Catalin Strambei,Liviu Cretu Marin Fotache Marin Fotache

CuvinteCheie baze de date,SQL, proceduri stocate, Fox Pro, formulare, orientare pe obiect , client-server, Web baze de date,SQL, proceduri stocate, Fox Pro, formulare, orientare pe obiect , client-server, Web baze de date,SQL, proceduri stocate, Fox Pro, formulare, orientare pe obiect , client-server, Web baze de date, algebra relationala, SQL baze de date, algebra relationala, SQL

Fig. 3.4. Relaia Biblioteca_4 noua relaie. Cheia primar este Cot (observai c ISBN se repet pe primele trei linii i pe ultimele dou). Dup calapodul aplicat ceva mai sus, exist dou grupuri repetitive, Autori i Cuvintecheie. Drept care ne grbim s descompunem relaia universal in trei relaii aflate in 1NF, dupa cum urmeaza:
-

Cote_Autori (Cota, Autori ), Cote_Cuvcheie (Cota, Cuvantcheie), Carti (Cota, ISBN, Titlu, Editura, LocSediuEd, AnAparitie).

Aceasta reprezentand prima forma normalizata a relatiei Biblioteca_4. Pentru remedierea problemelor cauzate de caracterul arbitrar al dispunerii atributelor n relaie, am putea institui o regul: se ncepe cu atributele cele mai generale (non-repetitive") i se continu apoi ctre cele mai repetitive". n cazul relaiei BIBLIOTEC, s-ar putea ncepe cu, ISBN-ul continund cu Titlu, Editur, LocSediuEd, AnApariie, apoi Autori i CuvinteCheie. Prima form normal i problema cheii primare a relaiei universale. De cele mai multe ori, constituirea unei relaii universale atotcuprinztoare se lovete de o problem major - cea a cheii primare. Modelul relaional prezint dou restricii eseniale vizavi de cheia primar: unicitate i valori nenule pentru atributele din alctuirea cheii (restricia de entitate). 30

Dac dorim s identificm fiecare linie a relaiei, trebuie s definim, n cele mai multe situaii, o cheie primar cu mai multe atribute, care ns n anumite tupluri ar avea valori nule. Pe de alt parte, dac nu vrem s fie violat restricia de entitate, trebuie s renunm la a prelua n relaia universal linii vitale din punctul de vedere al coninutului informaional al bazei de date. Sa luam exemplu relaia Biblioteca_4. Sa studiem toate atributele si sa vedem care ar putea sa fie cheie primara pentru aceasta relaie. CuvinteCheie nu ar putea sa fie cheie primara deoarece nu ndeplinete conditia de unicitate a cheii, se tot repeta pentru carti care studiaza aceleasi probleme ( VisualFoxPro. Ghidul dezvoltarii aplicatiilor profesionale si SQL. Dialecte DB2, Oracle si Vizual FoxPro au cuvinte cheie care se repeta : baze de date, SQL). Deci nu ne defineste tuplul ca fiind unic. AnAparitie, in nici un caz nu poate sa indeplineasca conditiile , pentru ca intr-un an se scot foarte multe cari pe piaa. In aceiai situaie se afla si LocSediuEd, Editura. Autorii , pot scoate pe piaa mai multe cri, atributul Autori , nu ndeplinete condiia de unicitate. Titlu, ar putea sa fie cheie candidata pentru o carte , dar sa nu uitam ca intr-o biblioteca nu se gsesc numai cate un exemplar dintr-un anumit titlu de carte si mai sunt si reeditrile, care la rndul lor se pot suprapune peste prima ediie apruta pe pia. ISBN, este intr-adevr o cheie candidata la cheia primara, nu poate avea valori nule, este unic pentru un anumit titlu de carte, scos intr-o ediie dar se tipresc mai multe exemplare din acelai titlu. Deci, nici atributul ISBN nu poate fii cheie primara in aceasta relaie. Cota, un ansamblu de semne, simboluri , cifre, litere care indic locul unor cri, al unor documente ntr-o bibliotec, ntr-un inventar12. Acest atribut ndeplinete condiia de unicitate a cheii si nu poate lua valori nenule. Ea definete un singur tuplu din tabelul nostru. Este cheie primara , unica.

3.5. A doua forma normalizata 2NF


Cea de-a doua form normal (2NF) se bazeaz pe dependenele funcionale totale sau elementare. Dependente funcionale Problema stabilirii dependenelor dintre atribute este fundamental n procesul elaborrii bazelor de date relaionale. Aducerea structurii bazei ntr-o variant care minimizeaz
12

http://www.webdex.ro/online/dictionar/cot%C4%83

31

redundanele i anomaliile manifestate la adugarea/modificarea/tergerea unor linii din tabele presupune parcurgerea unui proces de normalizare a relaiilor, normalizare care este centrat tocmai pe conceptul de dependen ntre atributele bazei. Definiie Dependena funcional reprezint o generalizare a conceptului de cheie primar. Desemnm prin Data2 un atribut sau o combinaie de atribute dintr-o relaie oarecare i prin Data1 un alt atribut sau grup de atribute din aceeai relaie. Se spune c Data2 este n dependen funcional (sau depinde funcional) de Data1 atunci cnd cunoaterea unei valori pentru Data1 permite determinarea (cunoaterea) a maximum o valoare pentru Data2. Data1 se numete sursa sau determinantul dependenei funcionale, iar Data2 reprezint destinaia (scopul sau determinatul) dependenei funcionale. Formal, dac notm relaia R {A1 A2,, An} - unde R este numele relaiei i Ai sunt atributele relaiei R - i prin X i Y dou subansambluri din {A1 A2,...,An}, se spune c exist o dependen funcional ntre X i Y (simbolizat X->Y) dac i numai dac: fiecare apariie (valoare) a lui X poate fi asociat unei singure apariii a lui Y ; dou apariii identice ale lui X nu pot fi asociate dect aceleiai apariii a lui Y. Dependenele funcionale reprezint legturi semantice ntre atribute ale bazei de date. Dependene funcionale cu sursa compus Exist dependene funcionale care prezint n partea stng (sursa dependenei funcionale sau determinantul) dou sau mai multe atribute. Acestea sunt dependenele funcionale cu sursa compus. Relaia BIBLIOTEC_3 (ISBN, Titlu, Cota, Autor, Editura, LocSediuEd, AnAparitie, CuvantCheie), aflat n prima form normal, prezint ca cheie primar combinaia (Cota, Autor, CuvntCheie). De aceea, se pot inventaria urmtoarele cinci dependene funcionale, n care destinaii sunt atributele necheie: (l)(Cota, Autor, CuvntCheie) -> ISBN (2)(Cota, Autor, CuvntCheie) -> Titlu (3)(Cota, Autor, CuvntCheie) -> Editura (4) (Cota, Autor, CuvntCheie) ->LocSediuEd (5)(Cota, Autor, CuvntCheie) -> AnApariie 32

Alte elemente luate n discuie pentru stabilirea DF: - o carte poate fi scris de mai muli autori: ISBN/-> Autor ; - un autor scrie mai multe cri: Autor /-> ISBN i - despre mai multe subiecte: Autor /-> CuvntCheie ; - ntr-o carte sunt tratate mai multe subiecte: ISBN /-> CuvntCheie ; - pentru o carte sunt n depozit mai multe exemplare: ISBN /-> Cota. Cota este codul care identific n mod unic o carte aflat n depozit, aadar: (6)Cota -> ISBN (7)Cota -> Titlu (8)Cota -> Editura (9) Cota -> LocSediuEd (10) Cota -> AnApariie Fiecare titlu de carte este identificat fr ambiguitate de ISBN: (11) ISBN -> Titlu (12) ISBN -> Editura (13) ISBN -> LocSediuEd (14) ISBN -> AnApariie O editur are un singur sediu central: (15)Editura -> LocSediuEd Prin urmare, dintre cele 15 DF inventariate, primele cinci au sursa compus, celelalte, sursa simpl. Chiar pentru cazuri simple, ansamblul tuturor DF ntr-o baz de date poate s devin extrem de stufos. De aceea, n procesul normalizrii trebuie avut n vedere un echilibru ntre: identificarea tuturor DF ce reflect restricii, reguli ale fenomenului/procesului modelat, includerea n setul DF numai a celor relevante, adic a unui ansamblu minimal din care, prin reguli de genul celor de mai sus, se pot obine toate celelalte DF. In teorie, dat fiind un set de DF notat S, ansamblul tuturor DF determinate pe baza acestuia se numete nchidere a lui S i se noteaz S+.

33

Mult mai important este determinarea acoperirii minimale, adic a setului minim de DF prin care pot fi determinate toate celelalte dependene din relaie. Dup Chris Date, un set S de dependee funcionale este ireductibil dac i numai dac satisface urmtoarele trei proprieti13: 1. Partea dreapt (destinaia) a fiecrei dependene din S implic un singur atribut. 2. Sursa fiecrei DF este ireductibil, adic nici un atribut nu poate fi eliminat fr distrugerea dependenei; se spune c DF este ireductibil la stnga. 3. Nici o DF din S nu poate fi eliminat fr afectarea nchiderii S +, altfel spus, fr pierderea unei serii de informaii. Din pcate, dei elegant postulat, acoperirea minimal ridic probleme majore chiar i la un numr mediu de atribute, ca s nu vorbim ct de alunecoas este proprietatea a treia formulat de Date. n plus, de multe ori, pentru o baz de date exist mai multe acoperiri minimale. Lucrurile pot fi ns simplificate parial eliminnd din discuie dependenele simetrice i redundante. Dependene funcionale simetrice i redundante Deseori, o baz de date sau relaie prezint mai multe chei candidate. Alegerea dintre acestea a cheii primare are n vedere, pe lng unicitate, compoziia minimal i valorile nenule ale oricrui atribut component, precum i elemente ce in de facilitatea utilizrii: uurina reinerii (de ctre utilizator), lungime ct mai mic, constan n timp etc. n procesul normalizrii, problemele ridicate de aceste dependene reciproce dintre cheile candidate trebuie tratate cu pruden. De cele mai multe ori, este recomandat ca dintre dependenele unei relaii s fie eliminate toate cele n care sursa este o cheie candidat i pstrarea numai a celor n care determinantul este atributul cheie primar.

Reprezentri ale dependenelor funcionale Elaborarea structurii bazelor de date prin tehnica normalizrii necesit o gestiune riguroas a tuturor dependenelor funcionale. n practic, parcurgerea tuturor relaiilor dintre atributele unei baze de date se poate solda cu identificarea a zeci sau chiar sute de dependene. Conectarea lor, determinarea redundanelor, incluziunilor, tranzitivitilor ridic astfel uneori

13

Date, C.J., Darwen, H.,Foundation for Database Systems. The Third Manifesto, editia a II-a, Addison-Wesley, Reading,

Massachusetts, 2000

34

probleme apstoare. Drept pentru care au fost elaborate diverse instrumente menite a simplifica vizualizarea i lucrul cu DF: a) diagrame, b) grafuri i c) matrice ale dependenelor funcionale. a) Diagrame ale DF Diagramele DF au o utilizare limitat, deoarece la un numr mare de atribute reprezentarea dependenelor este foarte anevoioas. O dependen dintre dou atributeeste indicat printr-o linie (sau un numr de segmente) ce pornete din surs i se termin printr-o sgeat nfipt" n destinaie (determinant). Cnd sursele sau destinaiile sunt compuse, atunci, mai nti, se unesc atributele din grupul determinant/destinaie, iar terminaiile dependenelor vizeaz segmentele de grup. Relaia BIBLIOTEC_3 (ISBN, Titlu, Cota, Autor, Editura, LocSediuEd, AnAparitie, CuvantCheie). Diagrama dependenelor acestei relaii, este prezentat n figura de mai jos.

ISBN

Titlu

Cota

Autor

Editura

LocSediuEd AnAparitie CuvantCheie

Figura 3.5. Diagrama DF a relaiei BIBLIOTEC_3 b) Graful dependenelor funcionale Intr-un graf al dependenelor funcionale, acestea sunt reprezentate prin sgei ce leag sursa i destinaia. La dependenele funcionale simple, sgeata unete cele dou atribute. Cnd sursa este compus, se folosete un conector care leag, n prim instan, atributele determinant, iar sgeata unete acest conector cu atributul destinaie. Ct privete dependenele relaiei BIBLIOTEC_3 corespunztor diagramei din figura 3.5 este graful din figura urmtoare, n ciuda densitii de sgei, se remarc un plus de claritate i folosirea mai judicioas a spaiului. Cota Autor CuvantCheie

35

ISBN

AnAparitie

Titlu

Editura

LocSediuEd

Fig. 3.6. Reprezentarea sub forma de graf a diagramei din fig.3.5. c) Matricea dependenelor funcionale Construirea matricei dependenelor funcionale demareaz prin crearea unui tabel n care fiecrui atribut i se va asocia o linie i o coloan. Dup includerea tuturor atributelor, se adaug toate grupurile de atribute care constituie surse de dependene funcionale. Apoi se parcurg, pe rnd, coloanele, n fiecare celul scriindu-se 1 atunci cnd atributul de pe coloan este surs a unei DF n care destinaia este atributul/ grupul de pe linie. Sursa de DF 1 2 6 9 1 2 3 4 5 6 7 8 9 Cota ISBN Autor CuvantCheie Titlu Editura LocSediuEd AnAparitie (Cota, Autor,CuvantCheie) 1 1

1 1 1 1

1 1 1 1

1 1 1 1

Fig. 4.7. Matricea corespunztoare diagramei din fig 4.5. si a grafului din fig. 4.6.

Dependene funcionale totale Noiunea de dependen funcional total a fost introdus de Melkanoff, O dependen funcional Data1 -> Data2 este total dac nu exist nici un atribut/combinaie de atribute Dat3 ca subansamblu al Data1 care s verifice dependena funcional Dat3 -> Dat2. 36

Formal, dac x = {Ai, Aj, Ak} reprezint un grup de atribute ale relaiei R, iar Am un atribut al aceleiai relaii, unde AmX, se spune c exist o dependen funcional total ntre X i Am dac: 1. X >Am si 2. nu exist nici un subansamblu S de atribute, S X, pentru care S-> Am Se noteaz: Xtotal> Am Dependena funcional total mai este denumit i elementar, plin, deplin sau complet. Implicit, toate dependenele in care sursa este simpl (alctuit dintr-un singur atribut) sunt dependene funcionale complete. In relaia BIBLIOTEC_3, primele cinci dependene funcionale: (1) (Cota, Autor, CuvntCheie) -> ISBN (2) (Cota, Autor, CuvntCheie) -> Titlu (3) (Cota, Autor, CuvntCheie) -> Editura (4) (Cota, Autor, CuvntCheie) -> LocSediuEd (5) (Cota, Autor, CuvntCheie) ->AnApariie sunt pariale, deoarece: (6) Cota -> ISBN (7) Cota -> Titlu (8) Cota -> Editura (9) Cota -> LocSediuEd (10) Cota -> AnApariie Cu alte cuvinte, un atribut component al determinatului dependenelor (l)-(5) este, el singur, surs ntr-o serie de DF n care destinaiile sunt identice. Trecerea relaiilor n a doua form normal (2NF) ncepnd cu a doua form normal, relaiile pot fi decupate n subrelaii, n scopul diminurii problemelor legate de stocare i actualizare. n general, atunci cnd ntr-o relaie R exist o DF de tip x -> y i x nu este cheie candidat, atunci R conine o anumit doz de redundan. O relaie se afl n 2NF dac: 1. Se afl n 1NF. 2. Toate DF ce leag cheia primar la celelalte atribute sunt DF elementare (totale). 37

O baz de date este n 2NF cnd toate relaiile care o alctuiesc sunt n 2NF. Problema trecerii unei relaii din prima n a doua form normal se pune numai cnd cheia primar a relaiei este compus din mai multe atribute. ntr-o formulare mai lejer, se poate spune c o relaie n 2NF nu conine DF pariale ntre atributele cheie i celelalte atribute. In general, trecerea de la 1NF la 2NF se poate realiza dup urmtoarea succesiune de 6 pai: 1. Se identific posibila cheie primar a relaiei universale, care confer unicitate oricrui tuplu din relaie, chiar n condiiile violrii restriciei de entitate. 2. Se inventariaz toate dependenele dintre atributele relaiei (nchiderea DF), cu excepia celor n care destinaia este un atribut component al cheii primare. 3. Se trec n revist toate dependenele care au ca surs (determinant) un atribut sau subansamblu de atribute din cheia primar. 4. Pentru fiecare atribut (sau subansamblu) al cheii de la pasul 3 se creeaz o relaie care va avea drept identificator primar atributul (subansamblul) respectiv, iar celelalte atribute vor fi cele care apar ca destinaii n dependenele de la pasul 3. 5. Din relaia iniial sunt eliminate toate atributele destinaie (non-cheie) din relaiile proaspt" obinute, pstrndu-se numai atributele cheie ale noilor relaii (se asigur, astfel, cheile strine care vor face legturile ctre noile relaii). 6. In rmiele" relaiei universale (iniiale), se verific dac cheia primar iniial respect restricia de entitate, iar dac nu, se mai elimin dintre atribute, la limit, chiar toat relaia-rmie". La limit, prin descompuneri, din relaia universal (iniial) este posibil s nu rmn dect atributele cheie. Acum, ns, orice pericol privind nulitatea vreunui atribut cheie va atrage dup sine eliminarea atributului respectiv sau, la limit, a relaiei respective. Relaia BIBLIOTEC_3 prezint, dependene pariale i, astfel, constituie un bun obiect" de normalizare n 2NF. De altminteri, relaia abund n redundane i anomalii de genul: a) nregistrarea recepiei unui titlu, introducerea datelor despre o carte (titlu) sunt imposibile pn n momentul n care mcar o carte primete cot; b) dac un titlu a fost introdus iniial eronat, corecia trebuie operat pe destule linii ale tabelei; c) la fiecare achiziie ulterioar a aceleiai cri (ISBN) trebuie introduse din nou ISBN-ul, titlul, editura etc. 38

Parcurgem cei 6 pai, dup cum urmeaz : 1. Cheia primar a relaie iniiale este: (Cota, Autor, CuvantCheie). 2. Ansamblul DF: (1)-(15) 3. n dependenele (6)-(10), atributul Cota, component al cheii relaiei, este surs simpl. 4. Se constituie o relaie n care cota este cheie primar, iar celelalte atribute sunt destinaiile dependenelor (6), (7), (8). (9) i (10). 5. Din relaia iniial se elimin toate atributele destinaie preluate n proaspta tabel, rmnnd doar atributele cheie : (Cota, Autor, CuvntCheie); 6. Nici unul dintre cele trei atribute de la punctul 5 nu pericliteaz restricia de entitate, aa nct relaia - rmi" se pstreaz n aceast form. Prin urmare, n a doua form normalizat, relaia iniial (universal) s-ar putea descompune n: CRI (Cota. ISBN,Titlu,Editura, LocSediuEd, AnApariie) si TITLURI_AUTORI_CUVINTECHEIE (Cota. Autor. CuvntCheie) Coninutul acestor dou noi relaii este prezentat n figura de mai jos.

CRI
Cot ISBN Titlu Visual FoxPro. Ghidul dezvoltrii aplicaiilor profesionale Visual FoxPro. Ghidul dezvoltrii aplicaiilor profesionale Visual FoxPro. Ghidul dezvoltrii aplicaiilor profesionale SQL. Dialecte DB2, Oracle i Visual FoxPro SQL. Dialecte DB2, Oracle i Visual FoxPro (fragment) CuvntCheie baze de date SQL proceduri stocate FoxPro Formulare orientare pe obiect client-server Web Editura Polirom Polirom Polirom Polirom Polirom LocSediuEd lai lai lai lai lai III-13421 973-683-8897 III-13422 973-683-8897 III-13423 973-683-8897 III-10678 973-683-7092 III-10679 973-683-7092 AnApariie 2002 2002 2002 2001 2001

TITLURI_AUTORI_CUVINTECHEIE Cota Autor III -13421 Marin Fotache III -13421 Marin Fotache III -13421 Marin Fotache III -13421 Marin Fotache III -13421 Marin Fotache III -13421 Marin Fotache III -13421 Marin Fotache III -13421 Marin Fotache .

Figura 3.8. Relaia BIBLIOTECA_3 n 2NF

39

3.6. A treia form normalizat -3NF i forma normal Boyce-Codd - BCNF


A treia form normalizat (3NF) este considerat de muli specialiti drept un minimum acceptabil pentru structura unei baze de date relaionale. Bazat pe a doua form normal i pe dependenele funcionale tranzitive (de fapt, pe eliminarea lor), 3NF a cunoscut dou definiii majore, una original", formulat de Codd nsui i a doua ce acoper cteva lipsuri ale primei, numit, dup autorii si, Boyce-Codd Normai Form, n traducere oarecum liber forma normal Boyce-Codd, mai pe romnete, BCNF. Dependene funcionale directe/tranzitive O dependen funcional Datl -> Dat2 este direct atunci cnd nu exist o Dat3 care angajeaz o dependen funcional tranzitiv de genul: Datl -> Dat3 -> Dat2. Formal, dac Ai > Aj i Aj-> Ak, atunci Ai> Ak i se noteaz: Ai > Aj > Ak Pentru relaia BIBLIOTEC_TUPLURI_NOI_SOLUIA_2 dependenele (7), (8), (9) i (10) din paragraful 4.5.1.1. sunt tranzitive, deoarece: Cota -> ISBN -> Titlu Cota -> ISBN -> Editura Cota -> ISBN -> LocSediuEd Cota -> ISBN -> AnApariie In plus, i DF (13) este tranzitiv, ntruct: ISBN -> Editura -> LocSediuEd Pe baza noiunilor prezentate, se poate defini nchiderea tranzitiv a unui ansamblu de dependene funcionale. nchiderea tranzitiv reprezint ansamblul dependenelor totale directe + dependenele totale tranzitive. Acoperirea minimal, definit n capitolul anterior, este subansamblul minimal de dependene funcionale elementare care permit determinarea tuturor celorlalte dependene funcionale. Cu alte cuvinte: (1) nici o dependen funcional nu este redundant i (2) orice dependen funcional total face parte din nchiderea tranzitiv. Spre deosebire de ceea ce am discutat n capitolul anterior, acum suntem n msur s eliminm din ansamblul DF i pe cele tranzitive. Astfel, pentru relaia BIBLIOTEC_3, acoperirea minimal este alctuit din cinci DF: 40

- Cota -> ISBN - ISBN -> Titlu - ISBN -> Editura - ISBN -> AnApariie - Editura -> LocSediuEd iar nchiderea tranzitiv este urmtorul ansamblu de dependene: - Cota -> ISBN - Cota -> Titlu - Cota -> Editura - Cota -> LocSediuEd - Cota -> AnApariie - ISBN -> Titlu - ISBN -> Editura - ISBN -> LocSediuEd - ISBN -> AnApariie - Editura -> LocSediuEd Acoperirea minimal poate fi uor reprezentat prin graful DF. Dependenele tranzitive sunt foarte uor de identificat i eliminat. Spre exemplu, dac din figura 3.6. eliminm sgeile ce reprezint drumul direct dintre dou atribute/grupuri i un atribut destinaie, att timp ct ntre respectivele atribute/conectori exist un traseu ocolitor", se obine graful acoperirii minimale vezi figura 3.9. Cota Autor CuvantCheie

ISBN

Editura

Titlu

AnApariie

LocSediuEd

Figura 3.9. Graful DF de acoperire minimal pentru relaia BIBLIOTEC_3 41

Atributele Autor i CuvantCheie atrn inutil n figur, stricnd imaginea grafului. Le-am pstrat ns pentru a nu omite nici un atribut din relaia universal i a indica cheia primar a relaiei.

Aducerea relaiilor n a treia form normal Prima definiie a celei de-a treia forme normale a unei relaii poate fi formulat relativ simplu i incremental, prin raportare la 2NF. O relaie se afl n 3NF dac: 1. Se gsete n 2NF. 2. Toate atributele care nu aparin cheii primare nu depind funcional de un alt atribut (ansamblu de atribute) care nu face parte din cheie. A doua condiie poate fi exprimat si n maniera: toate dependenele funcionale care leag cheia primara de celelalte atribute sunt directe (netranzitive). Trecerea din 2NF n 3NF presupune eliminarea DF tranzitive i se poate face, pentru o relaie, n urmtoarea manier: a) Se identific toate atributele ce nu fac parte din cheie i sunt surse ale unor dependene funcionale. b) Pentru toate atributele identificate la punctul a se constituie cate o relaie in care cheie primara va fii atributul respectiv, iar celelalte atribute, destinaiile din dependentele considerate. Operaiile a si b se repeta pentru relaiile nou obinute prin decompoziie. De fiecare data din relaiile supuse descompunerii se elimina atributele destinaie ale surselor non-cheie, pstrndu-se atributele sursa , in vederea stabilirii legturilor intre tabele si , implicit declarrii restriciilor refereniale. Relaia BIBLIOTEC_3 a fost adus n 2NF n fig.3.8 prin ruperea sa n CRI (Cota. ISBN,Titlu,Editura, LocSediuEd, AnApariie) si TITLURI_AUTORI_CUVINTECHEIE (Cota. Autor. CuvntCheie) Cea de-a doua este alctuit exclusiv din atribute cheie, deci nu se pune n discuie 3NF (adic relaia este deja n 3NF). Altfel stau lucrurile n CRI. Relaia este n 2NF i conine dependene tranzitive. Exist dou atribute din afara cheii primare, ISBN i Editura, care sunt

42

surse de DF, astfel nct dependenele (7), (8), (9), (10) i (13) sunt tranzitive. Trecerea n 3NF se realizeaz prin constituirea a dou relaii pe care o s le numim EDITURI i TITLURI: EDITURI (Editura, LocSediuEd) si TITLURI (ISBN. Titlu, Editura, AnApariie) iar din CRI rmne: EXEMPLARE (Cota. ISBN) n concluzie, n 3NF, baza de date BIBLIOTEC este alctuit din patru tabele: EDITURI (Editura. LocSediuEd) TITLURI (ISBN. Titlu, Editura, AnApariie) EXEMPLARE (Cota, ISBN) TITLURI_AUTORI_CUVINTECHEIE (Autor, CuvntCheie ) Din pcate, ne rmne pe contiin ultima tabel, TITLURI_AUTORI_CUVINTECHEIE, care conine un grad ridicat de redundan a datelor, problem rezolvat pe baza unui alt tip de dependente - muli valoare. Forma normal Boyce-Codd Definirea celei de-a treia forme normale, aa cum a fost formulat iniial de Codd, ridica o serie de probleme n anumite circumstane, probleme pe care formularea din acest paragraf le rezolv. Chris Date este de prere c situaiile n care definiia original a 3NF este insuficient se traduc prin trei condiii simultane: relaia are mai multe chei candidate; o parte dintre cheile candidate sunt compuse; cheile compuse au atribute n comun. ntruct ndeplinirea simultan a celor trei condiii se ntlnete destul de rar n practic, a treia form normal, aa cum a fost formulat n paragraful precedent, este suficient. Se spune despre o relaie c este n forma normal Boyce-Codd (BCNF) dac: 1. se afl deja n 3NF; 2. nu exist nici o DF a crei surs s fie un atribut necomponent al cheii, iar destinaia, un atribut din cheie. Intr-o alt formulare, o relaie R este n BCNF dac i numai dac orice determinant (surs de dependen funcional sau supercheie) este o cheie candidat. Aceast exprimare are i avantajul de a nu lega BCNF de 3NF, unii autori prefernd s discute problema normalizrii direct n termenii BCNF, fr a trece prin formele intermediare. 43

In cazul relatiei BIBLIOTEC_TUPLURI_ NOI_SOLUTA_2 combinaia care difereniaz orice linie de toate celelalte este(Cota, Autor, Cuvntcheie). Intuim ns un aspect pe care dependenele i, implicit, normalizarea il scap, i anume c autorii i cuvintele-cheie se refer la o carte (adic ISBN), i nu la un exemplar fizic din depozit (Cota). Atunci, in schema bazei de date n 3NF se schimb ultima tabel, TITLURI_AUTORI_CUVINTECHEIE2 (ISBN, Autor, Cuvntcheie). Se observ cu ochiul liber o diminuare a volumului ultimei tabele. Rmne, n schimb, un grad de redundant chiar i n forma comprimat a tabelei. Putem ncerca s adugm n BIBLIOTEC_3 cteva atribute care s atrag n dependene atributele Autor i CuvntCheie. Astfel, pornim de la faptul c, pe coperta unei cri, autorii sunt trecui ntr-o anumit ordine, deloc ntmpltoare, iar la extragerea informaiilor despre cri aceast ordine trebuie respectat. Prin urmare, folosim atributul OrdineCopert, iar DF este: (ISBN, OrdineCopert) -> Autor De asemenea, pentru a putea extrage crile legate de unul sau mai multe cuvinte-cheie n ordinea relevanei, introducem atributul Relevan, ce indic nivelul la care este tratat ntr-o carte o anumit noiune/sintagm (cuvnt-cheie): (ISBN, CuvntCheie) -> Relevan Pe baza acestor dou noi dependene, relaiile construite sunt aproape impecabile: EDITURI (Editura, LocSediuEd) CRI (ISBN, Titlu, AnApariie, Editur) AUTORI_CARTI (ISBN, OrdineCoperta, Autor); CARTI_CUVINTE CHEIE (ISBN, CuvinteCheie, Relevanta); EXEMPLARE_CARTI (Cota, ISBN).

3.7.A patra form normal - 4NF


Cu toate c BCNF elimin toate anomaliile datorate dependenelor funcionale, mai exist un tip de dependen, numit dependen multivaloric, ce poate cauza probleme de redundan a datelor. Posibila existen a dependenelor multivalorice n cadrul unei relaii se datoreaz primei forme normale 1NF care nu permite unui atribut dintr-un rnd s aib o mulime de valori. De 44

exemplu, dac ntr-o relaie exist dou atribute multivalorice, trebuie s repetm fiecare valoare a unuia din atribute mpreun cu fiecare valoare a celuilalt, dar efectul este apariia redundanei datelor. O relaie este n 4NF dac i numai dac: 1. este n BCNF; 2. toate dependenele care se manifest n cadrul su sunt dependene funcionale, altfel spus, eventualele dependene multivaloare coninute sunt, de fapt, dependene funcionale. Este o form mai strict dect BCNF pentru c mpiedic relaiile s conin dependene multivalorice, prevenind astfel redundana datelor. Relaia BIBLIOTEC_3, dup cum am vzut in paragraful precedent, conine o dependent multivaloare prin eliminarea creia vom aduce relaia n 4NF. Se va constitui cte o relaie pentru fiecare surs de dependen funcional (Cota, ISBN i Editura). La aceste relaii se va aduga cte o relaie pentru fiecare destinaie de dependen multivaloare (Autor i CuvntCheie). Schema final a bazei de date, precum i coninutul relaiilor sunt ilustrate mai jos.

EDITURI EDITURA Polirom TITLURI ISBN

LocSediu Iasi

973-683-889-7 973-683-709-2 EXEMPLARE Cota III-13421 III-13422 III-13423 III-10678

Titlu Visual FoxPro. Ghidul dezvoltarii aplicatilor profesionale SQL. DialecteDB2, Oracle si Visual FoxPro

Editura AnAparitie Polirom Polirom 2002 2001

ISBN

973-683-889-7 973-683-889-7 973-683-889-7 973-683-709-2

TITLURI_AUTORI ISBN Autor 973-683-8897 Marin Fotache 973-683-8897 Ioan Brava 973-683-8897 Catalin Strambei 973-683-8897 Liviu Cretu 45

III10679

973-683-709-2

973-683-7092

Marin Fotache

TITLURI_CUVINTECHEIE ISBN CuvantCheie 973-683-889-7 baze de date 973-683-889-7 SQL 973-683-889-7 proceduri stocate 973-683-889-7 FoxPro 973-683-889-7 formulare 973-683-889-7 orientare pe obiect 973-683-889-7 client_server 973-683-889-7 web 973-683-709-2 baze de date 973-683-709-2 algebra relationala 973-683-709-2 SQL Fig.34.10. Relatia BIBLIOTECA forma finala

3.8. A cincea form normal 5NF


Cea de-a cincea form normal - denumit i forma normal proiecie-jonciune ProjectJoin Normal Form) - are la baz dependena de jonciune i a fost definit de Ronald Fagin: o relaie R este n 5NF dac i numai dac toate dependenele de jonciune sunt consecine ale cheilor candidate ale lui R. De remarcat c 5NF, 4NF i BCNF corespund definiiei unice: orice determinant al unei dependene este o cheie; ceea ce difer ine de faptul c pentru BCNF este vorba de dependen funcional, pentru 4NF - dependen multivaloare, iar pentru 5NF - dependen de jonciune. 5NF este o generalizare a 4NF, care este o generalizare a BCNF. Pn la 5NF, o relaie era descompus prin proiecie n dou relaii ce puteau, prin jonciune naturala, s refac" in orice moment relaia iniial. Cu dependena de jonciune, aceast descompunere fr pierderi poate fi generalizat nu la dou, ci la mai multe relaii. n fapt, dependena de jonciune corespunde existenei mai multor legturi care sunt independente n cadrul relaiei i care vor fi izolate prin descompunerea n 5NF. 46

4. Crearea bazei de date cu ajutorul limbajului SQL


4.1. Fundamente limbaj SQL Limbajul SQL (Structured Query Language) este limbajul utilizat de majoritatea sistemelor de baze de date relaionale (SGBDR) pentru definirea i manipularea datelor. Majoritatea limbajelor posed un set de instruciuni comun unanim acceptat de toate marile companii productoare de soft, precum MICROSOFT sau ORACLE. Termenii utilizai de limbajul SQL sunt: -

tabel (Table) utilizat pentru a desemna o relaie; linie (row) utilizat pentru a desemna un tuplu; coloan (column) utilizat pentru a desemna un atribut. componenta de descriere a datelor relaionale (limbajul de descriere a datelor - LDD), componenta de manipulare a datelor relaionale (limbajul de manipulare a datelor LMD), ambele fiind absolut necesare n gestiunea BD.

Componentele pe care le cuprinde limbajul SQL sunt urmtoarele:

47

Pe lng aceste componente principale, standardul SQL2 mai prevede i alte componente ale limbajului:
-

controlul tranzaciilor; controlul securitii i refacerea datelor.

Controlul tranzaciilor conine comenzi pentru specificarea tranzaciilor. Unele implementri adaug comenzilor prevzute n standard i alte comenzi suplimentare de control al concurenei i refacerea datelor. Controlul securitii i refacerea datelor conine comenzi de administrare a bazei de date pentru definirea utilizatorilor i a drepturilor acestora de acces la tabele. Aceast component este dependent de SGBD, iar pentru sisteme performante, administratorul BD este obiectul activitii unei categorii speciale de utilizatori ai BD administratori ai BD. Structura lexical a limbajului SQL Elementele unei instruciuni (statement) sunt:
-

cuvintele cheie (key words), dintre care fac parte comenzile (SELECT, UPDATE, INSERT etc), operatorii (AND, OR, NOT, LIKE), clauzele (WHERE, SET, VALUES etc);

identificatorii (identifier) sunt elementele care denumesc tabela, atributul sau alt obiect BD; SQL face diferena ntre literele mari i mici, deci este case-sensitive; identificatorul care conine ghilimele se numete identificator delimitat;

constantele (literal) reprezint iruri de caractere ( ), numere ntregi, numere reale (ex. 3.5; 4. ; .001; 5e2), constanta NULL care simbolizeaz lipsa de informare, constante de tip logic (1 pentru TRUE i 0 pentru FALSE);

caracterele speciale, cum ar fi ; care semnific terminarea comenzilor, . care semnific virgula zecimal, sau * care simbolizeaz operatorul de nmulire.

Operatori SQL SQL are urmtorii operatori:


-

operatori aritmetici binari: + (sum), - (diferen), * (produs), / (mprire), % (modulo), & (AND orientat pe bii), | (OR orientat pe bii), # (XOR orientat pe bii), << (deplasare la stnga), >> (deplasare la dreapta).

operatori binari de comparaie: < (mai mic), > (mai mare), <= (mai mic sau egal), >= (mai mare sau egal), = (egal), <> (diferit) sau != (diferit). 48

operatori de comparaie: x BETWEEN min AND max verific dac min x max), x IN (v1,...,vn) compar x cu o list de valori, x IS NULL, x IS NOT NULL, x LIKE model_ir.

operatori logici. Operatorii logici sunt legai prin cuvintele cheie AND, OR, NOT i ei returneaz una dintre valorile logice TRUE, FALSE sau NULL. operatori relaionali: UNION (reuniune), INTERSECT (intersecie), MINUS (diferen).

Funcii definite n SQL Funcii agregat Funciile agregat calculeaz un rezultat din mai multe tupluri ale unui tabel (funcii de totalizare): COUNT - furnizeaz numrul de tupluri ale unui rezultat; SUM - execut suma tuturor valorilor dintr-un cmp; MAX - returneaz valoarea cea mai mare dintr-un cmp; MIN - returneaz valoarea cea mai mic dintr-un cmp; AVG - calculeaz media valorilor dintr-un cmp. Aceste funcii vor fi folosite n instruciunea SELECT. Funcii scalare Funciile scalare primesc unul sau mai multe argumente i returneaz valoarea calculat sau NULL n caz de eroare. Argumentele funciilor pot fi constante sau valori ale atributelor specificate prin numele atributelor corespunztoare. Dintre funciile scalare amintim: funcii numerice de calcul trigonometric: sin, cos, tan, cot etc. de calcul al logaritmului: ln, log, lg de calcul al puterilor: pow valoarea absolut: abs de rotunjire: floor, ceil etc. funcii pentru manipularea irurilor de caractere funcii pentru data calendaristic funcii de conversie

49

Tipuri de date n limbajul SQL sunt definite mai multe tipuri de date: numeric, ir de caractere, ir de bii, data (calendaristic), timp. Denumirile tipurilor de date precum i limitele acestora difer de la un SGBD la altul, dar n general, sunt destul de asemntoare. Tipul numeric include numere ntregi: INTEGER sau INT reprezentat pe 4 octei; SMALLINT reprezentat pe 2 octei; numere reale reprezentate n virgul flotant, cu diferite precizii: FLOAT reprezentat pe 4 octei; REAL reprezentat pe 8 octei; DOUBLE [PRECISION] reprezentat pe 8 octei; numere zecimale reprezentate cu precizia dorit: tipul NUMERIC sau DECIMAL, cu forma numeric[(p,s)], unde p este numrul total de cifre afiate, iar s este numrul de cifre dup punctul zecimal. Tipul ir de caractere CHARACTER (n) sau CHAR (n) definesc iruri de caractere cu lungimea fix. CHARACTER VARYING sau VARCHAR (n) definete irul de caractere cu lungimea variabil. Asemnarea dintre cele dou tipuri prezentate mai sus este aceea c ambele reprezint iruri de maxim n caractere, iar deosebirea este aceea c pentru iruri cu numr de caractere mai mic ca n, CHAR (n) completeaz irul cu spaii albe pn la n caractere, iar VARCHAR (n) memoreaz numai attea caractere cte are irul dat. Tipul iruri de bii BIT (n) definete secvene de cifre binare (care pot lua valoarea 0 sau 1) de lungime finit n; BIT VARYING (n) definete secvene de lungime variabil, cu limita maxim n.

Tipuri pentru data calendaristic i timp DATE permite memorarea datelor calendaristice n formatul yyyy-mm-dd; 50

TIME permite memorarea timpului, folosind trei cmpuri hh:mm:ss; TIMESTAMP(p) permite memorarea combinat a datei calendaristice i a timpului, cu precizia p pentru cmpul SECOND (al secundelor); valoarea implicit a lui p este 6; INTERVAL este utilizat pentru memorarea intervalelor de timp. Tipurile de date sunt case-insensitive, deci nu in cont de caracterele mari sau mici. Limbaje relaionale de definire a datelor (LDD) Limbajul de definire a datelor (a schemei unei BD) include instruciuni ce permit:
-

crearea schemei bazei de date; adugarea relaiilor la schema bazei; tergerea unor relaii existente; adugarea de noi atribute relaiilor existente; optimizarea bazei de date (index, grup, declanator); definirea structurii fizice i logice a unei BD; restricii cu privire la utilizarea structurii de mai sus.

Comenzi pentru crearea unei baze de date Comanda pentru crearea unei baze de date este CREATE DATABASE nume_baza; S se creeze baza de date BIBLIOTECA CREATE DATABASE BIBLIOTECA; Aceast comand creeaz o BD cu numele nume_baza. Nu toate SGBDR suport noiunea explicit de BD, dei utilizarea unei asemenea noiuni poate facilita controlul drepturilor de acces la relaiile BD. Utilizatorul care a creat baza de date devine automat administratorul BD. Comenzi pentru suprimarea unei baze de date Comanda pentru suprimarea unei baze de date este DROP DATABASE nume_baza; Aceast comand distruge BD cu numele nume_baza.

51

Comenzi pentru crearea relaiilor de baz n cadrul acestor comenzi se precizeaz numele relaiei precum i numele i tipul atributelor. n SQL, cele mai frecvente tipuri de date sunt: CHAR - pentru ir de caractere de lungime fix; VARCHAR2 - pentru ir de caractere de lungime variabil; NUMBER - pentru numere ntregi sau reale de lungime variabil; DATE - pentru date calendaristice; LONG - pentru texte de lungime variabil; RAW - pentru informaie binar de lungime variabil. Comanda de creare a unei relaii este CERATE TABLE nume_tabela (atribute); Crearea unei relaii indicnd cheia la nivel de atribut S se creeze relaia EDITURI (simbol_jude, nume_jude). CREATE TABLE EDITURI (ID_edituraNUMERIC(8) PRIMARY KEY, Nume_editura VARCHAR(30)); Crearea unei relaii indicnd cheile la nivel de tabel S se creeze relaia TITLURI (ISBN, ID_editura, Titlu). CREATE TABLE TITLURI (ISBN NUMERIC (20) ID_editura NUMERIC(8), Titlu VARCHAR (30), PRIMARY KEY (ISBN, ID_editura), FOREIGN KEY (ID_editura) REFERENCES EDITURI(ID_editura)); Comenzi pentru suprimarea unei relaii de baz Comanda de suprimarea unei relaii este DROP TABLE nume_tabela; Comanda SQL distruge relaia nume_tabela. 52

Comenzi pentru schimbarea numelui unei relaii Comanda SQL pentru schimbarea numelui unei relaii este RENAME TABLE nume_tabela TO nume_tabela_nou; S se modifice numele relaiei TITLURI_CUV_CHEIE n TITLURI_CUVCHEIE apoi s se suprime relaia TITLURI_CUVCHEIE RENAME TABLE TITLURI_CUV_CHEIE TO TITLURI_CUVCHEIE; DROP TABLE TITLURI_CUVCHEIE; Comenzi pentru declararea restriciilor de integritate (a constrngerilor) Constrngere este un mecanism care asigur c valorile unui atribut sau a unei mulimi de atribute satisfac o condiie declarat. Unei constrngeri i se poate da un nume unic. Dac nu se specific un nume explicit atunci sistemul automat i atribuie un nume de forma SYS_Cn, unde n reprezint numrul constrngerii. Constrngerile pot fi terse, pot fi adugate, pot fi activate sau dezactivate, dar nu pot fi modificate. Prin comanda CREATE TABLE pot fi specificate anumite restricii (constrngeri) prin care se exprim o condiie care trebuie respectat de toate tuplurile uneia sau mai multor relaii. Acestea pot fi definite cu ajutorul comenzii: ALTER TABLE Constrngerile declarative pot fi:
-

constrngeri de domeniu, care definesc valorile luate de un atribut: DEFAULT, NOT NULL, UNIQUE, CHECK; constrngeri de integritate a entitii care precizeaz cheia primar: constrngeri de integritate referenial care asigur corespondena ntre cheile primare i cheile externe corespunztoare: FOREIGN KEY.

PRIMARY KEY;

Fiecrei restricii i se poate da un nume, lucru util atunci cnd, la un moment dat (salvri, restaurri, ncrcarea BD) se dorete dezactivarea uneia sau mai multora dintre acestea. Astfel se prefigureaz numele fiecrei restricii cu tipul su: pk_(PRIMARY KEY) pentru cheile primare un_(UNIQUE) pentru cheile alternative nn_(NOT NULL) pentru atributele obligatorii 53

ck_(CHECK) pentru reguli de validare la nivel de atribut fk_(FOREIGN KEY) pentru cheile strine. S se realizeze constrngerea de cheie primar, de cheie extern i constrngerea de domeniu pentru relaia DESCRIERE_IMOBIL. CREATE TABLE DESCRIERE_IMOBIL (id_co SMALLINT (7) NOT NULL, CONSTRAINT FOREIGN KEY fk_co(id_co) REFERENCES CERERI_OFERTE(id_co), CONSTRAINT pk_co PRIMARY KEY (id_co), tip_imobil VARCHAR(10), etaj VARCHAR(10), nr_camere SMALLINT (6), suprafata DECIMAL (12,4), garaj TINYINT (4), centrala_termica TINYINT (4), termopane TINYINT (4)); Comenzi pentru modificarea structurii unei relaii Prin modificarea structurii unei relaii se nelege: extinderea schemei relaiei prin adugarea de noi atribute; restrngerea schemei unei relaii prin suprimarea unor atribute; modificarea numelui i/sau tipului unui atribut din cadrul relaiei.

Unele limbaje relaionale (QBE) admit toate aceste tipuri de modificri n schema unei relaii, iar altele (SQL sau QUEL) numai o parte. Comanda de modificare a unei relaii este ALTER TABLE nume_tabel ... Adugarea unui atribut cu ajutorul opiunii ADD S se adauge atributul regiunea n relaia LOCALITATI. (Valorile acestui atribut vor fi: Transilvania, Banat, Oltenia, Muntenia, Moldova, Dobrogea.) ALTER TABLE LOCALITATI ADD (regiunea VARCHAR(10)); 54

Adugarea unei constrngeri cu ajutorul opiunii ADD Comanda pentru adugarea unei restricii este ALTER TABLE nume_tabela ADD CONSTRAINT ...; Exemplu: S se adauge restricia de cheie primar nr_factura pentru relaia FACTURI. ALTER TABLE FACTURI ADD CONSTRAINT pk_nr_factura PRIMARY KEY (nr_factura); Comenzi pentru acordarea drepturilor de acces la baza de date La nivel logic, limbajele relaionale ofer comenzi pentru acordarea drepturilor de acces la baza de date. Accesul unor persoane la BD se poate realiza doar n condiiile recunoaterii acestora de ctre sistem drept utilizatori autorizai. Creatorul unei relaii primete n mod automat toate privilegiile de operare asupra acestei relaii: cutri de date n relaie actualizri ale datelor n relaie actualizri ale schemei relaiei ataarea unor restricii de integritate suprimarea relaiei. S se ofere utilizatorului cu numele Zita i cu parola BDZ dreptul de conectare la BD, precum i unele drepturi de acces la una dintre tabelele bazei de date. GRANT SELECT, UPDATE ON DESCRIERE_IMOBIL TO Zita IDENTIFIED BY 'BDZ'; Comenzi pentru retragerea drepturilor de acces la baza de date Comanda SQL pentru retragerea drepturilor de acces la BD este REVOKE UPDATE ON nume_tabela FROM nume_utilizator; S se retrag drepturile utilizatorului Zita de actualizare a datelor. REVOKE UPDATE ON DESCRIERE_IMOBIL FROM Zita; Limbaje relaionale de manipulare a datelor (LMD) Limbajele de manipulare a datelor trebuie s ofere o serie de faciliti pentru prelucrarea datelor din relaiile bazei de date i anume: 55

GRANT SELECT, UPDATE ,... ON nume_tabela TO nume_utilizator;

interogri inserri modificri tergeri.

Interogarea datelor Interogarea bazei de date reprezint principala funcie a unui limbaj relaional de manipulare a datelor. Comanda fundamental a standardului SQL este SELECT, aceasta permind interogarea unei baze de date. Interogarea reprezint o ntrebare care i extrage rspunsul din baza de date. Componentele interogrii se numesc clause. Sintaxa general a comenzii SELECT este urmtoarea: SELECT [ALL/DISTINCT/UNIQUE] list de selecie FROM list de relaii (tabele) WHERE condiie de cutare asupra tuplurilor GROUP BY list de atribute pentru partiionarea HAVING condiie asupra partiiilor ORDER BY list de atribute; Clauzele SELECT i FROM sunt obligatorii. SELECT specific datele care se selecteaz, iar clauza FROM specific relaiile din care se selecteaz. Restul clauzelor sunt opionale. S se selecteze toate persoanele mpreun cu toate datele personale ale acestora existente n baza de date. SELECT * FROM DATE_PERSOANA; Interogarea datelor folosind operatorii IS i IS NOT S se selecteze numele tuturor persoanelor care nu au completat adresa de email, apoi s se afieze numele tuturor persoanelor care au numrul de telefon completat. SELECT numele FROM DATE_PERSOANA WHERE email IS NULL; SELECT numele FROM DATE_PERSOANA WHERE nr_telefon IS NOT NULL; 56

Interogarea datelor folosind operatorii logici AND, OR, NOT Sintaxa pentru interogarea care utilizeaz un operator logic este condiie 1 AND condiie 2; condiie1 OR condiie 2; NOT condiie; S se determine numrul facturii i codul numeric personal pentru ofertele soluionate dup date de 2006-05-01 i cu un pre final mai mare sau egal ca 100.000. SELECT cnp,nr_factura FROM FACTURI WHERE data_factura=2006-08-01 AND total>=100000; Interogarea datelor folosind operatorul LIKE Se cunosc mai multe modaliti de utilizare a expresiei LIKE, i anume: pentru o expresie care ncepe cu o anumit liter, de exemplu litera A: LIKE A%; pentru o expresie care se termin cu o anumit liter, de exemplu litera A: LIKE %A; pentru o expresie care include o anumit liter, de exemplu litera A: LIKE %A%; S se selecteze numele, adresa i emailul tuturor persoanelor feminine care au adres de email pe yahoo sau personal. SELECT numele, adresa, email FROM DATE_PERSOANA WHERE adresa LIKE %BAIA MARE% AND (email LIKE %yahoo% OR email LIKE %personal%); Interogarea datelor folosind operatorul BETWEEN Operatorul se utilizeaz n combinaie cu dou valori ntre care se afl valoarea la care se refer operatorul. Sintaxa este val BETWEEN minim AND maxim; sau val>=min AND val<=max; Cele trei expresii val, min, max pot fi de tip numeric (numeric, decimal, int, smalint etc.), de tip dat calendaristic sau de tip caracter.

57

S se selecteze codurile tuturor cererilor/ofertelor nregistrate n perioada 1 ianuarie 2006 i 1 mai 20006. SELECT id_co FROM CERERI_OFERTE WHERE data_inreg BETWEEN 2006-01-01 AND 2006-05-01; Interogarea datelor folosind funciile calendaristice YEAR, DAY, MONTH Funciile YEAR, DAY, MONTH rein dintr-un cmp de tip dat calendaristic anul, ziua, respectiv luna. S se vizualizeze codurile tuturor cererilor/ofertelor nregistrate n luna mai. SELECT id_co FROM CERERI_OFERTE WHERE MONTH(data_inreg)=05; Interogarea datelor folosind ordonarea Datele se pot ordona dup orice cmp. Ordonarea se poate face att cresctor ct i descresctor. Sintaxa pentru interogarea ordonat cresctor este : ORDER BY nume_cmp (ASC); ordonat descresctor este ORDER BY nume_cmp (DESC); Dac ORDER BY nu este urmat de ASC sau DESC, ordonarea se face implicit cresctor. S se vizualizeze lista persoanelor n ordine alfabetic. SELECT numele FROM DATE_PERSOANA ORDER BY numele; Interogarea datelor din mai multe relaii Interogarea datelor din mai multe relaii este strns legat de noiunea de cheie primar, cheie secundar, restricii de integritate, asocieri ntre relaii. S se afieze ofertele i denumirile oraelor corespunztoare ofertelor. SELECT id_co, nume_loc FROM CERERI_OFERTE, LOCALITATI WHERE CERERI_OFERTE.tipul=oferta AND CERERI_OFERTE.cod_loc=LOCALITATI.cod_loc;

58

Clauza WHERE include condiii care exprim o egalitate ntre valorile identificatorului nume_cmp a relaiei nume_tabel i a celei ale referinei la acest identificator n tabela referit. Atunci cnd n clauza FROM a unei comenzi SELECT apar mai multe tabele se realizeaz produsul cartezian al acestora. De aceea numrul de tupluri rezultat crete considerabil, fiind necesar restricionarea acestora cu o clauza WHERE. Atunci cnd este necesar obinerea de informaii din mai multe tabele se utilizeaz condiii de jonciune. n acest fel tuplurile dintr-un tabel pot fi puse n legtura cu cele din alt tabel conform valorilor comune ale unor atribute. Condiiile de corelare utilizeaz de obicei atributele cheie primar i cheie extern.

4.2. Crearea bazei de date BIBLIOTECA


Am analizat in capitolul anterior o baza de date Biblioteca. Am ajuns la concluzia ca pentru a functiona nu are nevoie decat de cinci tabele (EDITURI, TITLURI, TITLURI_AUTORI, TITLURI_CUVINTECHEIE, EXEMPLARE). Dar aceasta este o baza de date care se poate folosi numai pentru catalogarea si evidenta unor carti. Pentru un program mai amplu de evident a crilor dintr-o biblioteca de coala sau la o biblioteca municipala mai avem nevoie de cteva tabele. Tabele care sa ne tina evidenta cititorilor, ce cri au mprumutat, ntrzieri in returnarea crilor, o carte de cate ori a fost mprumutata de pe raft , .. Pentru aceasta am adugat tabelele AUTORI, CUVINTE_CHEIE, IMPRUMUT , CITITORI si ADMINISTRARE. Intre tabelele AUTORI si TITLURI se produce o asociere de tip muli la muli deoarece, un autor poate scrie mai multe carti, iar o carte , poate avea mai muli autori. Metoda clasica de rezolvare a acestui tip de conflict este construirea unei entitati intermediare care sa fac legtura intre cele doua tabele. Intre tabelele TITLURI si CUVINTE_CHEIE , se produce aceiai asociere de tip muli la muli deoarece un titlu se poate caracteriza prin mai multe cuvinte cheie , iar un cuvnt cheie 59

caracterizeaz mai multe titluri. Aceiai rezolvare ca mai sus , se interpune o entitate cu numele TITLURI_CUVINTE_CHEIE intre cele doua tabele. Pentru a gestiona cititorii care folosesc , mprumuta cartile din biblioteca noastre am introdus tabela CITITORI. In aceasta tabela am introdus atribute , care sa defineasc foarte bine un anumit cititor . CNP , Nr. permis, nume, prenume, locul naterii, data naterii sunt numai cteva din aceste atribute. In tabela IMPRUMUT gsim data de mprumut si data restituirii unei anumite carti, daca respectivul cititor a ntrziat cu restituirea cartii si perioada care a ntrziat. Tabela ADMINISTRARE conine atributele pentru autentificarea fiecrui utilizator ce acceseaz programul nostru.Diagrama E-R (entitate - relaie) se poate vedea foarte bine in ANEXA 1. Se pot urmrii legturile dintre tabele , cheile primare , cheile strine, indexurile. Comenzile SQL pentru crearea bazei de date BIBLIOTECA se pot vedea in ANEXA 2.

5. Interfeele grafice in Java


Java este un limbaj de programare orientat obiect consacrat. Cele mai multe aplicaii distribuite sunt scrise n Java, iar noile evoluii tehnologice permit utilizarea sa i pe dispozitive mobile gen telefon, agend electronic, palmtop etc. In felul acesta se creeaz o platform unic, la nivelul programatorului, deasupra unui mediu eterogen extrem de diversificat. Avantajele sunt evidente, att pentru proiectani, care scriu o dat i execut pe orice main virtual Java JVM), ct i pentru utilizatori, care vor beneficia de un spectru mbogit de servicii. De aceea se poate afirma cu ncredere c Java este un ctigtor, n lumea volatil a tehnologiilor de calcul. Istoricul i caracteristicile limbajului Java Java este un limbaj de programare orientat obiect, destinat n principal programrii internet. nceputul limbajului Java este In toamna anului 1991, cnd firma Sun Microsystems a finanat un proiect cu numele Green condus de James Gosling. Scopul echipei Green era sa plaseze firma Sun Microsystems pe piaa produselor electronice comerciale. Inginerii i dezvoltatorii de software de la Sun au cutat microprocesoare care sa ruleze pe o multitudine de maini, n particular pe sisteme distribuite care lucreaz n timp real. Cheia succesului firmei Sun a fost abilitatea lucrului pe platforme multiple. Dup patru ani de lucru, echipa Green finalizeaz 60

specificaiile limbajului Java. Apoi, compania Sun Microsystems vinde licena firmelor IBM, Microsoft, Silicon Graphics, Adobe i Netscape. Acum, Java e disponibil sub auspicii open source. Caracteristicile limbajului Java sunt: - limbaj compilat i interpretat. Un limbaj este compilat dac un program scris n acel limbaj este tradus ntr-un cod pe care calculatorul l poate nelege" (executa) mult mai uor. Un limbaj este interpretat dac instruciunile unui program scris n acel limbaj sunt procesate linie cu linie. Programele interpretate sunt mai lente dect cele compilate, ns cele compilate sunt, de obicei, dependente de platforma respectiv. Programele Java sunt mai nti compilate n nite fiiere intermediare asemntoare codului de asamblare (numite byte code, engl.), apoi acestea sunt interpretate de mediul de execuie Java n instruciuni-main asociate platformei sistem. - limbaj independent de platforma. La instalarea limbajului Java, se va crea o main virtual Java care are drept scop traducerea instruciunilor unui byte code Java n instruciuni-main pentru platforma curent. Astfel fiierele intermediare byte code pot fi copiate i executate pe orice platform (indiferent dac este Windows, Unix etc). Bineneles c nu trebuie s utilizm elemente specifice unei platforme, cum ar fi delimitatorul utilizat n calea directoarelor:/ pentru Unix, respectiv \ pentru Windows (se vor utiliza n schimb constantele File.separatorChar sau File.separator). - limbaj orientat obiect. Cea mai important proprietate a limbajului Java este orientarea obiect, aceasta fiind privit ca o trstur implicit. Java pune n eviden toate aspectele legate de programarea orientat obiect: obiecte, trimitere de parametri, ncapsulare, clase, biblioteci, motenire i modificatori de acces. - limbaj concurent. Concurena (engl. multithreading) nseamn capacitatea unui program de a executa mai multe secvene de cod n acelai timp. O secvena de cod Java se numete fir de execuie (engl. thread). Datorit posibilitii crerii mai multor fire de execuie, un program Java poate s execute mai multe sarcini simultan, de exemplu, animaia unei imagini, transmiterea unei melodii spre placa de sunet, comunicarea cu un server, alocarea i eliberarea memoriei etc). - limbaj simplu. Spre deosebire de C++, care este cel mai popular limbaj orientat obiect, Java elimin cteva dintre trsturile acestuia: posibilitatea motenirii multiple este exclus, irurile sunt ncapsulate ntr-o structur clas, Spre deosebire de C/C++ , n Java nu exist

61

pointeri, iar alocarea i dealocarea memoriei se fac automat. Exist un mecanism de eliberare a memoriei (engl. garbage collection) pus n practic de un fir de execuie de prioritate mic. - limbaj distribuit. Java este distribuit, deoarece permite utilizarea obiectelor locale i de la distan. Limbajul Java ofer posibilitatea dezvoltrii de aplicaii pentru internet, capabile s ruleze pe platforme distribuite i eterogene. n acest sens, Java respect standardul IEEE (engl. Institute of Electricul and Electronics Engineers) pentru structurile de date, cum ar fi folosirea ntregilor, a numerelor n virgul flotant i a irurilor de caractere. Java se poate utiliza n aplicaii de reea, deoarece respect protocoalele de reea, cum ar fi FTP, HTTP, SOAP etc. - limbaj performant. Interpretorul Java este capabil s execute un byte code aproape la fel de repede ca pe un cod compilat. Avnd posibilitatea s lucreze cu fire de execuie multiple, Java justific faptul c este un limbaj performant. De exemplu, un program Java poate atepta citirea unor date, n timp ce un alt fir de execuie poate aloca sau elibera memoria necesar programului. limbaj dinamic i robust. Java ntrzie alocarea obiectelor i legarea dinamic a claselor pn la momentul execuiei. Astfel, se vor evita erorile de alocare chiar dac mediul s-a schimbat de la ultima compilare a programului. Faptul c Java este robust se justific prin eliminarea utilizrii pointerilor, care era generatoare de erori n cazul programelor C / C + + . In schimb, Java verific memoria dinamic nainte de a fi alocat i are un sistem automat de alocare/dealocare a memoriei. -limbaj sigur. Programele Java nu pot accesa memoria heap, stack sau alte seciuni protejate de memorie, deoarece Java nu folosete pointeri i aloc memorie doar la execuie. nainte ca interpretorul Java s execute byte code-ul se verific dac este un cod Java valid prin cercetarea accesului la date, a conversiilor de date nepermise, a valorilor i parametrilor incoreci, a depirii stivei. Instalare Limbajul Java se poate instala pe calculatoare cu diverse sisteme de operare, cum ar fi Windows, Linux, staii Sun Solaris. Acest lucru este posibil, deoarece un program Java nu se execut direct de ctre microprocesor, ci utiliznd un calculator ipotetic intermediar numit maina virtual Java (engl. Java Virtual Machine - JVM). Un compilator Java translateaz codul-surs Java ntr-un limbaj numit byte code (care e format din instruciuni-main pentru maina virtual Java) asemntor limbajului de asamblare i pe care l vom denumi cod binar Java. Pentru execuia unui program Java, interpretorul Java inspecteaz i decodific codul binar Java, verific dac este sigur de executat i apoi l execut instruciune cu instruciune. La 62

instalarea limbajului Java, se creeaz, de fapt, corespondena dintre aciunile codului binar Java i instruciunile mainii fizice. Acesta este secretul" independenei de platform a limbajului Java. Faptul ca n procesul de traducere a codului-surs Java in instruciunile mainii fizice s-a interpus maina virtuali Java implic o scdere a vitezei de execuie fa de un program echivalent care folosete instruciuni-main native. Dac la nceputurile limbajului Java un program era de 10 ori mai lent, n versiunile actuale* ale pachetului JDK (engl. Java Development Kit) performanele au crescut semnificativ, raportul vitezei de execuie dintre un program Java i un program scris n cod nativ fiind de aproximativ 2. Mai mult, pentru un mediu Java care suport compilarea n timpul ncurcrii (engl. Just-In-Time compilation) nu va exista nici o diferen de vitez a execuiei, Compilatoarele Just-In-Time vor traduce programele Java n instruciuni-main native chiar din momentul ncrcrii. Sunt disponibile mai multe medii de dezvoltare a aplicaiilor Java (JDK - Java Development Kit), realizate de diveri productori printre care Sun, IBM, Borland. Firma Sun pune la dispoziie gratuit kitul de instalare pentru sistemele de operare Windows, Linux i Unix pe situl http://java.sun.com/. Pentru crearea i editarea programelor Java se poate utiliza orice editor obinuit de texte, ns este recomandat utilizarea unui mediu specializat ntruct acestea reduc semnificativ timpul de dezvoltare a aplicaiilor. Cele mai importante medii de programare pentru Java sunt Eclipse - http://www.eclipse.org/, NetBeans - http://www.netbeans.org/ i IntelliJ Idea - http://www.jetbrains.com/idea/. Pentru sistemul de operare Windows, instalarea kitului JDK 1.6.0 se realizeaz implicit n directorul C: \Program Files\ Java\ jdkl.6.0\ care va conine subdirectoarele bin, demo, include, jre, lib i sample. In subdirectorul bin se gsesc principalele instrumente ale pachetului JDK:
-

j a v a c . e x e - compilator Java; j a v a . e x e - interpretor Java; a p p l e t v i e w e r . e x e - instrument de vizualizat appleturi; j a v a d o c . e x e - generator de documetanii; j a r . e x e - instrument pentru arhive jar; j a v a p . e x e - dezasamblor de fiiere byte code.

Tipuri de aplicaii Java n principiu, exist mai multe tipuri de aplicaii Java:
a) aplicaii de sine stttoare (engl. stand-alone);

b) aplicaii care se execut pe partea de client (numite appleturi); 63

c) aplicaii care se execut pe partea de server (numite servleturi). a) O aplicaie de sine, stttoare Java este un program care poate fi executat n afara contextului unui browser (navigator) Web. Principala caracteristic a acestui tip de aplicaie este ncapsularea n cadrul clasei principale a unei funcii main(), asemntoare cu cea folosit n C, care are urmtoarea signatur: public static void main(String [] args) Aplicaiile Java de sine stttoare se pot mpri la rndul lor n:
-

aplicaii de consol, care ruleaz la linia de comand; de exemplu, fereastr de consol (engl. command prompt) pe un calculator personal rulnd Windows; aplicaii-fereastr, care lucreaz cu ferestre grafice folosind interfaa grafica cu utilizatorul (engl. Graphical User Interface - GUI).

In continuare vom edita un text-surs pe care l vom salva n fiierul AplicatiaUnu.java ca aplicaie de consol. public class AplicatiaUnu { public static void main (String args[]) { if (args.length == 0) System.out.println("Aplicaie independenta."); else { System.out.println("Argumentele programului sunt:); for (int i = 0; i < args.length; i++) System.out.println(args[i]); } } Chiar dac este un program simplu, acesta nglobeaz multe dintre trsturile unui program orientat obiect complex, i anume: are un obiect (implicit generat de sistemul Java), utilizeaz ncapsularea i transmiterea parametrilor, definete o clas, folosete motenirea i modificatori de acces. Compilarea acestui program Java se realizeaz cu comanda: javac AplicatiaUnu.java Astfel, se va crea fiierul n cod binar Java cu numele AplicatiaUnu.class execuia acestui program se va realiza folosind n mod similar comanda: java AplicatiaUnu Pe ecran va aprea mesajul: Aplicaie independenta. Este de remarcat faptul c la compilare trebuie scris i extensia fiierului (. java), pe cnd la interpretare, aceasta nu trebuie specificat. 64

b) Aplicaiile care se execut pe partea de client sunt cele ncrcate de pe un server (de cele mai multe ori aflat la distan) i apoi executate de programe speciale cum ar fi navigatoarele Web. De exemplu, appleturile sunt aplicaii care sunt executate de ctre navigatorul Web, iar middleturile sunt executate de ctre dispozitive mobile fr fir (mai exact de ctre sistemul software al acestora). Un applet este un program Java respectnd o mulime de convenii care i permit s ruleze n cadrul unui navigator Web ce ncorporeaz o main virtual Java. Tehnologia appleturilor este similar, ntr-un anumit sens, cu a programelor JavaScript. Fiierul cu extensia . c l a s s al unui applet este stocat pe un server Web i poate fi accesat de ctre un client prin intermediul unei pagini care conine acel applet. La ncrcarea paginii, codul appletului este transferat pe maina-client i v a fi executat cu ajutorul mainii virtuale incluse n navigator. Fie textul-surs Java memorat n fiierul AplicatiaDoi.java: import java.awt.Graphics; import java.applet.Applet; public class AplicatiaDoi extends Applet { public void paint(Graphics g) { g.drawString("Acesta este un applet", 50, 50); } } Compilarea acestui program Java se realizeaz astfel: javac A p l i c a t i a D o i . j a v a In acest mod se va crea fiierul byte code cu numele AplicaiaDoi.class. c) O aplicaie ce se execut pe partea de server este o aplicaie care este rulata de ctre un server ca urmare a unei cereri primite de acesta, iar rezultatul este trimis programului solicitant. De cele mai multe ori acestea extind funcionalitatea respectivului server. De exemplu, servleturile sunt aplicaii care se execut pe partea de server. Un servlet este o componenta Web, scris n Java, care poate fi ncrcata dinamic si rulat de un server Web, i care poate interaciona cu diferii clieni folosind o implementare a paradigmei cerere/rspuns bazat pe protocolul HTTP. Servleturile extind funcionalitatea unui server, de obicei, a unui server HTTP. Spre deosebire de appleturi, servleturile nu afieaz o interfa grafic ctre client, ci doar rezultatul . Un caz particular de servleturi l constituie JSP-urile (Java Server Page). Aceast tehnologie este att o extensie a servleturilor, ct i o extensie a limbajului HTML. Prin intermediul unor taguri particulare se pot insera declaraii, expresii, secvene de cod Java etc. 65

Unele aplicaii mai complexe au nevoie de o cantitate mare de informaii structurate, iar pentru acest lucru se recurge la utilizarea bazelor de date. Conexiunile la baze de date se realizeaz n Java prin intermediul JDBC (Java Database Connection). JDBC este o specificare API (Application Programming Interface) dezvoltat de Sun care definete o interfa uniform pentru accesarea diferitelor baze de date. JDBC este parte a platformei Java i este inclus n pachetul JDK. Cea mai importanta funcie a JDBC-ului este posibilitatea lucrului cu instruciuni SQL (engl. Structured Query Language) i procesarea rezultatelor ntr-o manier independent i consistent de bazele de date. JDBC furnizeaz acces orientat pe obiecte la bazele de date prin definirea de clase i interfee care reprezint obiecte, cum ar fi conexiuni la baze de date, instruciuni SQL, mulimi-rezultat, obiecte binare i iruri de caractere de dimensiuni mari, drivere de baze de date, manageri de drivere. Aplicaiile, fie de sine stttoare, fie pe partea de client sau server, pot stabili conexiuni la baze de date, la diverse servere din reea, pot salva starea obiectelor pentru a le restaura la o execuie ulterioar sau pentru trimiterea n fluxuri de date. De asemenea, pot prelucra date n diferite formate: text (documente T X T , H T M L , XML, RTF etc.), grafic (2D i 3D) i video. Maina virtual Java Maina virtual Java este noutatea principal a limbajului Java fa de celelalte limbaje de programare. Partea dificil a crerii codului binar Java este compilarea codului-surs pentru o main care nu exist fizic. Aceast main este numit maina virtual Java, deoarece exist doar n memorie. Apoi, interpretorul Java traduce instruciunile cod-main Java n mulimi de instruciuni care pot fi nelese de maina real (fizic). Cele mai importante pri ale unei astfel de maini care necesit simularea unui calculator real sunt : o mulime de regitri, o stiv, un mediu de execuie, un ansamblu pentru eliberarea memoriei, o tabel (engl. pool) de literali constani, un spaiu de memorie a unei metode i o mulime de instruciuni. Clase Clasa este entitatea de baz a unui limbaj orientat pe obiecte. In Java este obligatorie definirea a cel puin unei clase. Nu este ns obligatorie crearea unei instane (unui obiect) a acelei clase, caz n care se vor utiliza date i metode statice. O declaraie de clas n limbajul Java are sintaxa general: [<ModificatoriClasa>] class <Identificator> [ <ListaTipuriReferinta>] [extends <NumeClasa>] 66

[implements <ListaInterfete>] { [<DeclaratiiCorpCl.asa>] } unde:


<ModificatoriClasa> pot fi: public, abstract, final (cel mult o apariie i, de preferat, n aceast ordine); <Identificator> reprezint numele clasei; <ListaTipuriReferinta> este o list de tipuri referin, numite i tipuri generice, de forma: <TipReferintal>, <TipReferinta2>, ...,<TipReferintaN> i este cuprins ntre simbolurile <"i >".

<NumeClasa> este numele unei alte clase (denumit clas de baz sau superclasa); <Lista Interfete> este o list de nume de interfee de forma:
<NumeInterfaa1>,<NumeInterfata2>, , <NumeInterfataM>;

<DeclaraiiCorpClasa> este o list de declaraii de forma: <DeclaratiiMembruClasa>, care, la rndul ei, poate fi <DeclaratieAtribut> sau <DeclaratieMetoda>; <InitializatorStatic>; <DeclaratiiConstructor>. Interfee O interfaa grupeaz mai multe metode i date membre publice. Sunt definite doar

prototipurile metodelor, implementrile urmnd a fi scrise n clasa care va implementa respectiva interfa. Gruparea metodelor publice este util pentru uniformizarea modalitii de lucru cu anumite clase. Exist i interfee care nu posed metode sau date membre, acestea avnd rol de indicator (engl. flag). O clas poate implementa mai multe interfee, dar poate moteni doar o singur clas. Relaia de motenire este valabil i pentru interfee. Prin implementarea mai multor interfee se simuleaz motenirea multipl (ntlnit n alte limbaje de programare orientate obiect, cum ar fi limbajul C+ +). O declaraie de interfa introduce un tip referin ai crui membri sunt constante i metode abstracte. Acest tip nu posed implementri (metodele nu sunt definite), dar anumite

67

clase pot implementa aceste interfee furniznd definiii pentru metodele abstracte. Sintaxa general a declaraiei unei interfee este: [publicc | abstract] interface <Identificator> [extends <ListaInterfete>] { [<DeclaratiiMembriInterfata>]
}

unde:

<Identificator> reprezint numele interfeei; <ListaInterfete> are forma general: <Interfatal>,...<InterfataN>, unde <InterfataI> reprezint identificatori (nume) de interfee, pentru I de la 1 la N; <DeclaratiiMembriInterfata> are forma general: <DeclaratieMembrul>, ,<DeclaratieMembruK>,unde <DeclaratieMembruI>,pentru I de la 1 la K, poate fi: <DeclaratieConstanta> sau <DeclaratieMetodaAbstracta> Numele unei interfee (<Identificator>) nu poate coincide cu numele altei clase sau

interfee din acelai pachet, altfel apare eroare la compilare. Ca i n cazul claselor, domeniul numelui unei interfee este ntreg pachetul n care este declarat. Fiecare interfa este implicit abstract, deci este inutil modificatorul a b s t r a c t n declaraia unei interfee. Dac declaraia unei interfee conine clauza extends, atunci interfaa va moteni toate metodele i constantele interfeelor enumerate n <ListaInterfete>, implementeze toate superinterfeele accesibile clasei. Superinterfeele din clauza extends trebuie s fie accesibile, altfel apare eroare la compilare. Nu exist o superinterfa general (pentru toate interfeele), cum este clasa Object pentru superclase. care se numesc superinterfeele directe. Orice clas care implementeaz interfaa declarat va trebui s

5.1.Initiere in SWING
Biblioteca Swing este partea JFC (engl. Java Foundation Classes) care ofer componentele necesare programatorilor pentru crearea de interfee grafice moderne, complexe si ntr-adevr prietenoase aplicaiilor Java. Swing aduce mbuntiri calitative faa de mai vechiul pachet AWT (engl. Abstract Window Tbolkit), folosit n trecut pentru realizarea interfeelor grafice, completndu-i neajunsurile. Spre exemplu, in distribuia AWT pentru Java 1.0, 68

programatorul avea la dispoziie numai patru fonturi cu care putea s opereze i un numr restrns de tipuri de componente, insuficiente pentru crearea de interfee cu un grad ridicat de complexitate. Totui pachetul Swing nu este total separat de AWT cum s-ar putea crede, ci se poate spune c este construit peste acesta (engl. on top), AWT fiind folosit mai mult pe post de intermediar ntre Swing i sistemul de operare peste care este instalat platforma Java. Printre mbuntirile aduse de Swing, n afar de noile componente adugate, putem enumera modul de prezentare i comportare pentru interfa independent de platform, posibilitatea de a avea componente cu forme nerectangulare, accesibilitate pentru persoanele cu deficiene etc. Acest pachet a fost astfel gndit, nct pentru lucruri simple este nevoie de scrierea de cod puin, iar pentru lucruri mai complexe, mrimea codului crete proporional. De asemenea, se folosesc convenii logice pentru denumirea claselor, metodelor etc. care, odat nelese i nvate, determin creterea vitezei de lucru. Despre interfee grafice Interfaa cu utilizatorul, pe scurt UI (engl. User Inter/ace), reprezint totalitatea mecanismelor care permit interaciunea dintre o aplicaie i utilizatorii ei. O particularizare a interfeei cu utilizatorul o reprezint interfaa grafic, pe scurt GUI (engl.Graphic User Interface) care se referi strict la comunicarea vizual dintre utilizator i aplicaie. Putem spune c interfaa grafic este locul de ntlnire dintre utilizatori i aplicaia care le este destinat. Deseori aplicaiile sunt percepute de utilizatorii finali doar prin intermediul interfeelor acestora i, de aceea, o interfa realizat deficitar poate compromite ntreaga aplicaie, chiar dac funcional ea este bine realizat. In acest sens, o problem n procesul de realizare a interfeei grafice o reprezint posibilitatea ca utilizatorul s nu neleag cum s o utilizeze dup ce a fost creat. Acest lucru se ntmpl mai ales pentru c, n general, utilizatorii unei aplicaii (destinatarii aplicaiei) nu sunt i programatori, acetia din urm avnd intenia de a crea interfaa conform propriului model mental, diferit de cel al utilizatorilor. De aceea, dezvoltatorii aplicaiei trebuie s intuiasc modalitile prin care utilizatorii modeleaz conceptual diferitele funcionaliti sau, n general, aspecte ale aplicaiei, i s ncorporeze aceste modele n viitoarea interfa grafic. Metoda folosit n acest proces este analogia concretizat prin metafor. Acolo unde analogiile sunt greu de realizat, sunt folosite idiomurile care reprezint convenii ntre creatorii i utilizatorii interfeei, uor de reinut de acetia din urm. Spre exemplu, funcia de tergere ntr-o aplicaie poate fi mai uor conceput de utilizatori ca aruncarea unui obiect nefolositor la co. Astfel, pentru a terge o pictogram, utilizatorul l trage deasupra coului de 69

gunoi (engl. trash), reprezentat grafic de o alt pictogram, unde l elibereaz. Acest mod de a vedea lucrurile poart numele de nglobarea semanticii n sintax", deoarece se ncearc o folosire a simbolurilor care sunt mai uor de neles i de reinut. Un alt exemplu ar putea fi folosirea de pictograme n barele de unelte, care ascund printr-o reprezentare grafic uneltele ce se vor folosi dup selectarea lor (spre exemplu, o lup folosit mai apoi ca unealt pentru realizarea operaiei de micorare-mrire). Se poate observa faptul c, n general, exist un numr limitat de astfel de metafore i simboluri care se repet n mai toate aplicaiile i pe toate platformele. Din punctul de vedere al ingineriei programrii, momentul n care se pune cu adevrat problema interfeei cu utilizatorii este cel al procesului de proiectare arhitectural a aplicaiei, dar creatorii aplicaiei vor face aprecieri chiar n procesul de analiz a cerinelor utilizatorilor. Aa cum se realizeaz un plan al produsului informatic, se recomand realizarea planului interfeei cu utilizatorul, prin care se clarifica modul cum va arta interfaa grafic nainte de a trece la implementarea efectiv a acesteia. JFC (Java Foundation Classes) JFC reprezint un grup de API-uri (engl. Application Programming Interface) incluse n platforma J2SE (engl. Java 2 StandardEdition), care permit dezvoltatorilor sa creeze interfee grafice (GUI) pentru aplicaiile Java. Java Foundation Classes const in cinci pachete: AWT, Swing, Accessibility, Java 2D i Drag and Drop, care se ntreptrund, neavnd, n general, o existen de sine stttoare. Java 2D a devenit o parte integrant a AWT, Swing este construit peste AWT (se ateapt ca Swing s se mbine mult mai puternic cu AWT n urmtoarele distribuii Java), suportul Accessibility este construit n Swing, iar API-ul Drag and Drop este integrat n AWT i Swing. Oferim n tabela care urmeaz o scurt prezentare a celor cinci pri componente ale JFC: Parte component a JFC AWT Explicatie Parte a JFC proiectat pentru a oferi suport pentru crearea interfeelor grafice, folosind modul grafic. Ofer o ierarhie de clase suficiente pentru proiectarea unei interfee grafice nesofisticate pentru un applet sau o aplicaie. Reprezint nucleul JFC i fundamentul pe care s-a construit pachetul Swing

70

Swing

Reprezint un set vast de componente grafice, de la cele mai simple, cum ar fi etichetele sau butoanele, la cele mai complexe ca,de exemplu, tabelele sau arborii. Ofer independen fa de platforma peste care este instalat maina virtual i posibilitatea personalizrii aspectului interfeei i a comportamentului acesteia la aciunile utilizatorului. Reprezint posibilitatea de a oferi ajutor utilizatorilor cu deficiene, cum ar fi posibilitatea de a descifra interfaa folosind mesaje vocale, Braille sau dispozitive exterioare ataate calculatorului. Ofer informaiile de care au nevoie programatorii care scriu software pentru astfel de dispozitive auxiliare sau look-and-feel-uri Pachetul javax. accessibility este cel care st la baza acestui system. API-ul care permite utilizatorilor s ncorporeze n aplicaiile lor grafic 2D complex, text i imagini. Ofer posibilitatea de a realiza operaii de drag-and-drop ntre aplicaia curent i aplicaiile native sau ntre dou aplicaii Java, La baza acestei faciliti stau pachetele java.awt.dnd i java.awt.datatransfer, dar, n general, nu este nevoie de folosirea lor de ctre programatori, deoarece sistemul drag-and-drop funcioneaz implicit.

Accessibility

Java 2D Drag and Drop

Diferena major dintre Swing i AWT este aceea c, spre deosebire de AWT, componentele Swing sunt scrise 100% n Java, neconinnd cod nativ (dependent de sistemul de operare). Aceasta nseamn c butoanele Swing, spre exemplu, vor arta i se vor comporta identic pe platforme Macintosh, Solaris, Linux sau Windows. Spre deosebire de cele Swing, butoanele AWT luau mereu aspectul platformei pe care rula aplicaia. De asemenea, prin aceast independen fa de platform se obine o mbuntire a vitezei de execuie a aplicaiilor avnd interfee realizate n Swing. API-ul JFC a fost perfecionat i optimizat pe msura apariiei de noi distribuii ale platformei Java i l regsim ca parte integrant n platforma Java 2 Standard Edition. Unele clase i metode s-au nvechit i s-a renunat la folosirea lor efectiv pe parcursul apariiei noilor distribuii de platforme Java, din cauza ineficientei sau greelilor pe care le conineau. Componentele i pachetele bibliotecii Swing Componentele Swing sunt aproape toate derivate dintr-o singur clas de baz numit JComponent, care motenete, la rndul ei clasa Container din AWT. Motenirea clasei JComponent d componentelor posibilitatea de a avea chenare, tooltips, respectiv look-and-feel configurabil. De asemenea, tot din JComponent se motenesc i metodele prin care se pot seta 71

dimensiunile i poziionarea componentelor. In general, fiecare component grafic din AWT are o clas echivalent n Swing, al crei nume se formeaz din echivalentul AWT la care adugm prefixul J (singura excepie este clasa Canvas). Reciproca nu este adevrat, deoarece Swing mbogete considerabil paleta componentelor disponibile n AWT. O component grafic reprezint un obiect care are o anumit reprezentare grafic ce poate fi afiat pe ecran i poate astfel interaciona cu utilizatorul. Reprezentri grafice au toate obiectele care sunt instane ale claselor derivate din java.awt.Component i, n particular, javax.swing.JComponent pentru componentele Swing. Pentru a crea un buton avnd un anumit text drept coninut, trebuie mai nti s realizm o instan a clasei JButton: JButton buton = new JButton("De acord"); Dac dorim s crem o list de cuvinte din care utilizatorul s poat selecta un singur element la un moment dat, trebuie s realizm mai nti o instan a clasei JList, folosind unul dintre constructorii pe care aceast clas i pune la dispoziie. String coninut[]={"AWT", "Swing", "Accessibility", "Java 2D", "Drag and Drop"}; JList lista = new JList(coninut); In acest caz, butonul i lista reprezint componente grafice, iar pn aici modul de construcie a componentelor nu difer cu nimic de construcia unui obiect obinuit. Este de remarcat faptul, crearea obiectelor grafice nu determin i afiarea reprezentrii lor grafice pe ecran. Componentele trebuie s fie aezate mai nti pe o suprafa de lucru (care mai poart denumirea de container), la anumite coordonate i ocupnd o anumit zon a acesteia. Acest lucru se face prin intermediul unui apel al containerului de forma add (JComponent componenta). Trebuie neles faptul c nu se pot desena componente fr a fi adugate iniial unei suprafee de desenare reprezentate printr-un container de baz de tip JFrame, JDialog, JWindow sau JApplet. In continuare, vom aduga o list unei ferestre JFrame, care este una dintre componentele cu rol de container. import javax.swing.JFrame; import javax.swing.JList; /** O fereastra */ public class Fereastra extends JFrame { // constructorul clasei public Fereastra() { super("Fereastra") ; // cream o componenta String coninut[] = { "AWT", "Swing", "Accessibility", "Java 2D", "Drag and Drop" }; 72

JList lista = new JList(coninut) ; // adugam componenta this.getContentPane().add(lista) ;


} Dup aezarea n container, componentele grafice vor deveni vizibile doar odat cu vizualizarea ntregii suprafee de desenare printr-un apel setVisible(true).

/** Aplicaia pentru fereastra*/ public class Aplicaia { public static void main(String[] args) { // cream fereastra Fereastra fereastra = new Fereastra(); // facem vizibila fereastra fereastra.pack() ; fereastra.setVisible(true); } } De asemenea, chiar dac vizualizarea containerului a fost deja realizat, prin adugarea unei noi componente containerului, aceasta va deveni, la rndul ei, vizibil fr a mai fi nevoie de un apel setVisible ( ) . Folosind un apel de forma setVisible (false) aplicat unei componente deja vizualizate, aceasta se va ascunde. Dac este un container coninnd i alte componente, acestea vor fi la rndul lor ascunse. Modul n care componentele unui container vor fi desenate la momentul vizualizrii acestuia depinde de gestionarul de poziionare care este asociat containerului. Acesta determina cum vor fi poziionate componentele pe suprafaa de desenare i ce dimensiuni vor avea. Gestionarii sunt instane ale claselor care implementeaz interfaa LayoutManager, cum ar fi; BorderLayout, BoxLayout, CardLayout, FlowLayout, GridLayout, GridBagLayout sau SpringLayout. Interfaa LayoutManager2 este derivat din LayoutManager i este extins de cei mai muli dintre gestionarii enumerai mai sus, care ofer acestora suport pentru aliniamentul componentelor coninute i gestiunea dimensiunilor maxime. Prezentm n continuare modalitatea prin care se ataeaz un gestionar unui container. Spre exemplu, deoarece gestionarul BorderLayout, care este asociat implicit containerului ce ine coninutul unei ferestre, nu respect dimensiunile asociate componentelor de ctre dezvoltator, i vom asocia un alt gestionar de poziionare folosind metoda setLayout ( ) . JPanel coninut = this.getContentPane() ; coninut.setLayout(new FlowLayout()); 73

Cnd componenta nu este gestionat de un gestionar de poziionare (acest lucru se realizeaz printr-un apel setLayoutManager(null) pentru container), atunci ea va fi ntotdeauna afiat cu dimensiunile i poziia care i-au fost atribuite n prealabil. Dac nu i s-au asociat dimensiuni, implicit acestea vor fi 0, iar dac nu a fost poziionat, va fi aezat n colul din stnga-sus al containerului. Este esenial deci nelegerea modului n care lucreaz gestionarii de poziionare, pentru a nu avea surprize la momentul desenrii containerului. De asemenea, trebuie tiut c, implicit, panourilor reprezentnd containere intermediare li se asociaz managerul FlowLayout, iar panoului coninut al unui container de baz i se asociaz gestionarul BorderLayout. Se poate alege ca mai multe componente s fie grupate folosind containere intermediare, astfel avnd posibilitatea de a le gestiona mpreun poziionarea, separat de toate celelalte componente. Fiecare component grafic are asociate trei dimensiuni explicate n tabelul care urmeaz mpreun cu metodele prin care acestea pot fi accesate: Dimensiuni Metode de acces preferredSize getPreferredSize() setPreferredSize() Explicaii Dimensiunea preferat a unei componente. Este folosit de cei mai muli gestionari de poziionare pentru a dimensiona implicit componentele. Dimensiunea preferat a unei componente este determinat de look--and-feel-ul componentei i de fonturile pe care componenta le folosete. Folosit de gestionarii de poziionare ca limit n micorarea dimensiunilor componentelor. Folosit de gestionarii de poziionare ca limit n maximizarea dimensiunilor componentelor.

minimumSize maximumSize

getMinimumSize() setMinimumSize() getMaximumSize() setMaximumSize()

Metodele de forma setXXXSize(), prezentate n tabelul precedent, primesc ca intrare o instan a clasei java.awt.Dimension. In exemplul urmtor, vom seta dimensiunea listei din exemplul precedent pentru a avea limea de 200 pixeli i nlimea de 100 pixeli. Dimension dim = new Dimension(200,100); lista.setPreferredSize(dim); Pentru ca o component s fie desenat ntr-adevr cu dimensiunile pe care le-am specificat n prealabil, trebuie s ne asigurm c aceasta este administrat de un gestionar de poziionare care respect aceste setri. Spre exemplu, FlowLayout i GridBagLayout respect dimensiunile preferate ale componentelor. Nu acelai lucru se ntmpl cu BorderLayout i GridLayout. Gestionarul BoxLayout este singurul gestionar care respect dimensiunile maxime. 74

Dac se dorete redimensionarea unei componente care este deja vizibil, ea trebuie redesenat dup setarea noilor dimensiuni. Pentru a aduce componentele la dimensiunile lor preferate (engl. preferred size), vom apela metoda pack() pentru container nainte de a apela setvisible(). Pe lng setarea dimensiunilor putem, de asemenea, modifica poziia fiecrei componente n interiorul containerului. Cnd componenta nu este gestionat de un manager de poziionare, acest lucru este uor. In schimb, un manager de poziionare poate neglija dimensiunile pe care le dm componentei. Metoda setBounds() motenit din JComponent poate fi folosit pentru a seta n acelai timp mrimea i poziionarea unei componente n interiorul containerului--printe. Prezentm n continuare cele dou suprancrcri ale metodei folosite n cazul exemplului anterior: lista.setBounds(200, 200, 400, 300) ; sau : Rectangle drept = new Rectangle(200, 200, 400, 300); lista.setBounds(drept); Pentru a obine efectul scontat, va trebui ca dup apelarea constructorului din superclas s indicm folosirea gestionarului pentru poziii absolute, astfel: this.setLayout(null); De asemenea, toate componentele grafice Swing sunt construite conform specificaiei JavaBeans, ceea ce nseamn c sunt, de fapt, componente JavaBeans. Ce putem spune acum este c aceast compatibilitate d posibilitatea construirii de medii vizuale pentru Java n care interfaa grafic pentru aplicaii se construiete interactiv prin aezarea componentelor grafice pe suprafaa de lucru. Astfel, se pot testa efectiv mai multe posibiliti de a proiecta interfaa aplicaiei pn se ajunge la o form definitiv acceptat. Pentru a putea folosi componentele Swing trebuie s importm mai nti pachetele corespunztoare. In general, este de ajuns s includem urmtoarele pachete: javax.swing javax.swing.event java.awt java.awt.event 75 pentru componente Swing simple; pentru evenimentele generate de componentele Swing; pentru componentele din AWT;

pentru evenimente generale definite n AWT.

5.2.Fundamente Swing
Evenimente i asculttori In Swing, interfaa grafic (reprezentat de componentele grafice membre) este separat clar de implementare, care reprezint codul ce se dorete a fi executat n urma interaciunii utilizatorului cu interfaa. Din acest motiv, prin construcie, Swing a fost conceput ca un sistem condus de evenimente. Evenimentele sunt generate (engl. fire) de fiecare dat cnd apsam o tast sau un buton al mouse-ului i sunt tratate corespunztor prin cod scris de programator. Acest mod n care componentele arunc evenimente i felul n care acestea sunt tratate a rmas neschimbat de la platforma JDK 1.1 n care a fost implementat pentru prima oar. Sunt multe tipuri de evenimente pe care componentele Swing le pot genera. Fiecare eveniment este nfurat ntr-un obiect derivat din clasa java.util.EventObject prin intermediul cruia programatorul mnuiete evenimentul, putnd determina sursa sa (componenta care l genereaz) i, uneori, informaii despre tipul evenimentului, starea sursei nainte i dup ce evenimentul a fost generat. Sursele evenimentelor sunt, n general, componente sau modele, dar exist i alte tipuri de obiecte care genereaz evenimente. In cazul evenimentelor derivate din clasa EventObject sursa se determin efectiv folosind metoda public Object getSource(). Informaii despre tipul evenimentului se obin printr-un apel al metodei publicStringtoString(). Evenimentele sunt grupate n dou pachete: clasicul java.awt.event, care se refera la evenimente generale, respectiv java.swing.event, care se refer la evenimentele specifice componentelor grafice Swing. Pentru a trata evenimentul generat de o component, programatorul trebuie s asocieze acesteia un obiect asculttor (engl. listener) care conine descrierea reaciei aplicaiei la apariia evenimentului respectiv. Dac un eveniment are tipul XXEvent, atunci asculttorul este o implementare a interfeei XXListener, care se gsete, de asemenea, n unul dintre pachetele java.awt.event sau java.swing.event. Desenarea componentelor grafice Tot ceea ce este vizualizat pe ecran la un moment dat, n urma execuiei unei aplicaii avnd interfa grafic, rezult n urma unui proces de desenare. Componentele sunt desenate. 76

Procesul de desenare ncepe cu containerele de baz i se continu cu coninutul. Componentele Swing se redeseneaz singure atunci cnd este nevoie, spre exemplu, atunci cnd schimbm dimensiunile ferestrei sau cnd fereastra revine n prim-plan dup ce a fost acoperit de o alt fereastr. Sau cnd apelm pentru o etichet o metod de genul setText(), spre exemplu, eticheta se va redesena singur (coninnd noul text) i se va i redimensiona pentru a-l cuprinde. Utilizatorul nu trebuie s aib n vedere desenarea doar n cazul n care dorete s creeze propriile lui componente sau s depaneze procesul de desenare. In Swing, pentru ca o component s aib acces la desenarea sa, este necesar s suprascrie metoda paintComponent(), spre deosebire de AWT, unde trebuia supra-scris paint(). In interiorul acestei metode avem acces la obiectul de tip Graphics pe care componenta l conine, cunoscut i sub numele de contextul grafic al obiectului (engl. graphic context). Clasa Graphics conine multe metode care permit desenarea figurilor geometrice sau scrierea de text cu diferite fonturi, dimensiuni i culori. Clasa Graphics folosete ceea ce se numete zona de lucru (engl. clippingarea). In interiorul unei metode paint(), aceast zon reprezint regiunea din vizualizarea componentei care va fi redesenat. Mai poart numele de regiunea murdrit (engl. dirtied) a componentei i numai aceast zon va fi reactualizat prin redesenarea componentei. Putem determina dimensiunile acestei regiuni folosind metoda getBounds(), pe care o pune la dispoziie clasa Graphics. Suprafaa de desenare se poate micora din motive de eficien, spre exemplu, nefiind necesar desenarea unei anumite regiuni la un moment dat. In procesul de desenare, Swing folosete o tehnic care se numete buffer dublu (engl, double-buffering), care reprezint desenarea ntr-o imagine, i nu desenarea direct ntr-o component vizibil pe ecran. La finalul procesului de desenare imaginea este vizualizat pe ecran. Spre deosebire de Swing, n AWT dezvoltatorii erau cei responsabili pentru implementarea acestui mecanism pentru a reduce flash-urile. Pentru a seta/deseta acest mecanism pentru o component Swing se folosete metoda public void setDoubleBuffered (boolean aFlag) din clasa JComponent. Dac am setat buffer-ul dublu pentru o anumit component, toate componentele coninute se vor desena folosind acest mecanism. Clasificarea componentelor Swing

77

Componentele swing pot fii imparite in trei categorii, si anume: containere de baza, containere intermediare si componente atomice. Diferenele dintre acestea sunt prezentate in tabelul urmtor:
Tip componenta Containere de baza Explicatii Orice aplicaie care deine o interfa grafic are cel puin un astfel de container. Componentele (care nu pot fi tot containere de baz) se vor aduga acestui container. Reprezint locul n care toate celelalte Containere intermediare componente se vor desena. Scopul lor este acela de a grupa mai multe componente i de a simplifica poziio-narea, dimensiunile i modul n care com-ponentele coninute vor reaciona la modificarea dimensiunilor ferestrei de baz. Pentru aceasta li se ataeaz Containere atomice gestionari de poziionare (engl. layout manageri). Nu au, precum celelalte tipuri de componente, rolul de a ine alte componente, ci sunt suficiente pentru a prezenta informaia pe care o dein utilizatorului sau pentru a primi informaii de la utilizatorii interfeei grafice. Mai pe scurt, i sunt lor suficiente pentru a interaciona cu utilizatorul. JLabel, JButton JList, JComboBox, JTextField, JtextArea, JTable, JTree, JMenu, JPopup, JMenuItem, JToolBar, JOptionPane, JFileChooser, JColorChooser, JSlider, JScrollBar, JProgressBar, JDesktopBar, JInternalFrame JPanel, JScrollPane JSplitPane Componente JFrame, JWindow, JDialog, JApplet, JInternalFrame

Containere de baz Toate containerele de baz implementeaz interfaa RootPaneContainer i din acest motiv au aceeai organizare intern. Diferena dintre aceste containere i celelalte componente S w i n g este faptul ca ele motenesc direct clasele corespondente lor din AWT, aa cum se poate observa n figura care urmeaz. Toate celelalte componente motenesc clasa JComponent, i nu componentele corespondente din AWT. Din acest motiv, ele sunt singurele componente grele" din Swing (engl. heavyweight), fiind indirect dependente de componentele corespondente (engl. peer) native ale sistemului de operare peste care este instalat platforma Java. Totui, Swing 78

ofer independena fa de sistemul de operare de pe maina gazd (n sensul look-andfeel-ului componentelor care rmne identic pentru toate sistemele i mainile) tocmai prin modul n care aceste containere sunt construite, coninutul lor fiind gestionat de o component panou uoar", i anume o instan JRootPane,

JFrame Containerul cel mai des folosit pentru o aplicaie bazat pe Swing este JFrame. Modul n care aceast component este construit este mult mai complicat dect cel al componentei corespondente din AWT, i anume Frame. Orice fereastr JFrame conine un cmp protected cu numele rootPane, care este o instan a clasei JRootPane, servind drept container pentru alte cteva componente panou. Nu putem aduga componente direct unei ferestre JFrame, ci unuia dintre panourile coninute n rootPane (nu lui rootPane, care este doar un panou intermediar). Pentru a aduga o component unei ferestre JFrame trebuie, de fapt, s atam acea component panoului contentPane i acest lucru se realizeaz prin apeluri de genul: fereastraMea.getContentPane().add(componentaMea). De asemenea, putem recurge la un apel; JPanel coninut = (JPanel) getContent Pane(), obinnd astfel panoul coninut, cruia putem si adugm componente folosind apeluri de tipul add().

Pentru a seta gestionarul de poziionare pentru o fereastr vom folosi un apel de forma: fereastraMea.getContentPane().setLayout(new FlowLayout().Dac vom ncerca s utilizm metode de t i p add () sau setLayout () direct pentru fereastra JFrame vom obine eroare. De remarcat metoda getContentPane(), pe care clasa JFrame o pune la dispoziie pentru obinerea unei referine la atributul contentPane asociat ferestrei. Componenta glassPane este implicit un panou JPanel neopac care st deasupra tuturor componentelor din JRootPane, acionnd ca un ecran de protecie pentru fereastra. Acest lucru permite desenarea deasupra tuturor componentelor din fereastra curent, precum i interceptarea sau ntreruperea evenimentelor generate de mouse. Pentru a schimba glassPane din JPanel n oricare alt component folosim metoda public void setGlassPane (Component glassPane) pe care clasa JFrame o pune la dispoziie. O referin spre componenta glassPane curent asociat unei ferestre se obine prin metoda public Component getGlassPane() t o t din clasa JFrame. Implicit, glassPane care acoper layeredPane nu este vizibil, dar poate fi prin apelul getGlassPane().seeVisible (true). LayeredPane este una dintre cele mai puternice i mai robuste componente din pachetul Swing. Reprezint un container care ofer o a treia dimensiune pentru a poziiona componente, i 79

anume adncimea (engl. Z-order). Este un container avnd un numr nelimitat de straturi (engl. layers), pe care componentele pot sta. Pe un acelai strat putem aeza n acelai timp un numr nelimitat de componente. Atunci cnd adugm o component unui obiect de tip LayeredPane, trebuie s specificm i adncimea sub forma unui ntreg care reprezint numrul stratului. Cu ct numrul este mai mare, cu att adncimea este mai mic. Apare n acest fel fenomenul de suprapunere a componentelor coninute, acest lucru putnd fi foarte util. JWindow Componenta JWindow este asemntoare cu JFrame, cu excepia faptului c nu are bar de titlu, nu i se pot modifica dimensiunile, nu se poate minimiza, maximiza i nu poate fi nchis. JWindow poate fi folosit pentru a vizualiza un mesaj temporar sau siglele de la nceputul utilizrii aplicaiei. Deoarece implementeaz interfaa RootPaneContainer, necesit acelai comportament din partea dezvoltatorului pentru a-i accesa coninutul. JDialog Aceast clas este folosit pentru a crea o fereastr de dialog ale crei structur i comportament sunt identice cu JFrame. Un dialog permite realizarea interaciunii utilizatorilor cu aplicaia n timpul folosirii ei, permind introducerea i obinerea de informaii. Prin diversitatea de constructori oferii putem crea o fereastr JDialog modal sau nemodal, dependent sau nu de un alt container. Dac este modal, nu se permite altor ferestre s fie active n acelai timp cu ea. Dac este dependent de un printe, dialogul se va activa doar n strns legtur cu el, altfel aplicaia poate s aib drept interfa grafic un simplu dialog i nimic altceva. Containere intermediare Containerele intermediare le vom numi panouri (engl. panel, pane) i sunt urmtoarele: JPanel, JScrollPane, JSplitPane, JTabbedPane. Panourile reprezint modalitatea standard de a aduna mai multe componente uoare" la un loc i de a le gestiona poziionarea i dimensiunile folosind managerii de poziionare. Implicit, gestionarul de poziionare pentru un panou este FlowLayout. De aceea, atunci cnd adugm componente ntr-un panou, cruia nu i-am setat alt gestionar de poziionare, acestea se vor poziiona pe aceeai linie, una dup alta, cu dimensiunile lor preferate (engl. preferred size). Atunci cnd o component nu mai ncape pe rndul curent din cauza dimensiunilor ei, se aeaz pe linia urmtoare. Implicit, panourile nu deseneaz nimic 80

altceva dect culoarea fundalului (engl. background) lor. Permit adugarea de chenare i li se poate personaliza desenarea JPanel Clasa JPanel reprezint containerul intermediar de baz pentru orice interfa grafic, folosit de cele mai multe ori pentru a organiza un grup de componente ale unui alt container care le conine. Se tie c i coninutul unei ferestre este redat tot ntr-un panou implicit JPanel, numit contentPane, care, atenie, este gestionat implicit de gestionarul BorderLayout. Prezentm n continuare constructorii clasei JPanel:
Constructor

JPanel() JPanel(LayoutManager lm)

Explicaie Creeaz un panou. Creeaz un panou avnd gestionarul de poziionare lm.

Prezentm metodele clasei JPanel care permit adugarea, accesul i tergerea componentelor dintr-un container, adugarea de gestionari de poziionare, setarea chenarelor, remarcnd c toate sunt moteniri din superclasele derivate.
Metoda

void add(Component) void add(Component, int) int getComponentCount() Component getComponent(int i) Component getComponentAt(int x,int y) Component getComponentAt(Point p) Component[] getComponents() void remove(Component c) void remove(int i) void removeAll() void setLayout(LayoutManager lm) LayoutManager getLayout() public void setBorder(Border border)

Explicaie Adaug o component panoului. Dac parametrul ntreg este prezent, el indica indicele cu care componenta se adaug n container. Returneaz numrul de componente din panou. Permit obinerea componentei cu un anumit index, avnd coordonatele x, y sau aflndu-se n punctul p. Returneaz intr-un vector toate componentele containerului. terge componenta c, pe cea cu indicele i sau pe toate Se seteaz, respectiv se obine o referin la managerul de poziionare. Seteaz bordel-ul pentru panou.

JScrollPane La o prim vedere aceast component pare extrem de simpl. Scopul ei este acela de a da posibilitatea derulrii (engl. scrolt) celorlalte componente n cazul n care ele nu ncap ntr-o 81

zon cu dimensiuni fixe. De notat c nu permite derularea componentelor grele" . De asemenea, poziionarea pentru aceast component este gestionat de un manager special numit ScrollPaneLayout i nu se pot seta gestionarii de poziionare obinuii. JTabbedPane JTabbedPane reprezint o stiv de componente (de obicei, panouri JPanel sau containere, n general) aezate pe mai multe straturi suprapuse, unul dintre ele putnd fi selectat la un moment dat, determinnd componenta coninut s devin vizibil. Straturile au cte o prelungire (engl. tab) care are proprietile unei etichete, putnd conine o pictogram, culoare de fundal sau tooltip. Pentru a aduga componente unui JTabbedPane putem folosi diverse suprancrcri ale metodelor add(),addTab() sau insertTab(), pe care clasa JTabbedPane le pune la dispoziie. Pentru fiecare component adugat unui panou JTabbedPane se va crea un strat unde aceasta va fi aezat; stratul va avea o prelungire cu forma unei etichete prin intermediul creia utilizatorii vor selecta stratul pe care vor s a i l vizualizeze. Fiecare strat are asociat un indice, numerotarea implicit pornind de la stnga spre dreapta, ncepnd cu 0 . Dac numrul de straturi este mai mare dect 0, va exista ntotdeauna un indice care va fi selectat i care corespunde stratului vizibil. Implicit, este selectat stratul cu indicele 0 , Indicele curent se obine folosind metoda care are prototipul public int getSelectedlndex (). Componente atomice simple JLabel Etichetele permit afiarea de informaii care nu pot fi selectate sau suprascrise. De exemplu, se pot afia text sau imagini, separat sau mpreun, fr a se atepta aciuni din partea utilizatorilor, deoarece o etichet nu poate deine comunicarea cu tastatura (engl. focus). Pentru interaciune se vor folosi butoane, etichetele putnd, eventual, fi folosite pentru a descrie butoane sau alte componente. Pentru a aduga i poziiona coninutul unei etichete se poate folosi unul dintre constructorii pui la dispoziie sau metoda setText() pentru a aduga text, respectiv setIcon() pentru a aduga imagini. Alinierea coninutului unei etichete se poate seta cu una dintre metodele: setHorizontalAlignment(int aliniament) sau setVerticalAlignment(int aliniament), unde alinierea este una dintre constantele definite n interfaa SwingConstants. Implicit, textul este indentat la dreapta, pe cnd pictogramele sunt centrate. Vertical, coninutul este aliniat 82

implicit centrat, indiferent dac este text sau imagine. Pentru o etichet se mai pot seta culoarea de fundal, culoarea textului, fontul etc, folosind metodele pe care clasa J L a b e l le pune la dispoziie. Butoane Toate componentele reprezentnd butoane n Swing extind clasa AbstractButton. De remarcat c i clasele JMenuItem, JCheckBoxMenuItem i JRadioButtonMenuItem, care desemneaz opiuni ntr-un meniu, extind AbstractButton. Prezentm n tabelul care urmeaz o list a componentelor grafice avnd rol de butoane, cu un exemplu de reprezentare grafic, urmat de explicaiile corespunztoare: Buton JButton Vizualizare Explicaie Un buton simplu a crui apsare determin aruncarea unui eveniment care trebuie tratat de programator. Prin apsare, butonul i schimb i vizualizarea, iar dup eliberarea butonului mouse-ului se va reveni la forma iniiala. Un buton care permite comutarea ntre dou stri. Permite personalizri ale butoanelor JCheckBox i JRadioButton, fiind i superclas pentru acestea. Un buton a crui stare poate fi setat ntre bifat sau nebifat. Un buton radio, n general, formeaz mpreun cu alte butoane radio un grup dintre care numai unul poate fi apsat la un moment dat.

JToggleBu tton JCheckBox JRadioBut ton

Strile n care se poate gsi un buton la un moment dat sunt date de urmtoarele proprieti: Stare Selectat (engl. selected) Apsat (engl. pressed) Derulant (engl, rollover) Armat (engl. armed) Explicatii Arat dac s-a schimbat starea butonului prin apsarea i apoi eliberarea butonului mouse-ului (aceast proprietate are valoare doar n cazul JToggleButton ce are dou stri bifat/nebifat). Are valoarea true atunci cnd butonul mouse-ului a fost eliberat, dup ce iniial a fost apsat. Are valoarea true atunci cnd se trateaz cazul n care cursorul mouseului se afl deasupra suprafeei butonului. Un buton se afl n aceast stare dac este apsat cu mouse-ul fr a ridica degetul de pe buton; este folosit pentru a opri aruncarea evenimentului care genereaz tratarea, atunci cnd am apsat un buton i 83

Activat (engl. enabled)

mai apoi l eliberm avnd cursorul mouse-ului afara suprafeei butonului (renunm s mai apsam butonul). Are valoarea true cnd butonul poate recepta aciunile care se fac asupra lui cu mouse-ul sau tastatura (deine focusul) i n acest caz celelalte proprieti nu pot s-i schimbe starea cnd e false.

Dac apsam cu mouse-ul un buton simplu, JButton, acesta se va arma", pe cnd pentru un JToggleButton, acesta va deveni selectat. Butoanele folosesc un model pentru a gestiona strile n care se pot afla la un moment dat. Acesta poart numele ButtonModel i reprezint baza pentru realizarea de modele pentru butoane. Putem avea acces la acest model folosind metodele getModel (), respectiv setModel(), prima pentru a obine modelul, iar a doua pentru a seta un nou model pentru butonul curent. Dac nu precizm nici un model, implicit se va asocia DefaultButtonModel, care reprezint implementarea implicit ce ne este pus la dispoziie pentru modelul ButtonModel. n general, n practic, nu este nevoie s crem propriul model pentru butoane, fiind de ajuns s folosim unul dintre constructorii pui la dispoziie, JButton U n buton poate prezenta att text, ct i imagini. O imagine poate fi ataat unui buton folosind constructorul care are ca parametru o instan a clasei Icon sau, dup desenare, folosind metoda setIcon(Icon imagine). Putem aduga pictograme care s apar n diferite stri ale butonului, cnd este selectat, apsat, dezactivat etc. Unui buton i se poate asocia drept accelerator o liter din textul pe care l prezint drept coninut (aceasta va deveni subliniat) folosind un apel de genul setMnemonic ('B'). In Windows, apsarea tastei A L T i a tastei reprezentnd litera respectiv determin declanarea aciunii. Tratarea evenimentelor generate de butoane se face n funcie de tipul de buton. In general, se adaug asculttori ActionListener care trateaz evenimentul aruncat de apsarea butonului. In cazul JCheckBox i JRadioButton se folosete un asculttor ItemListener pentru a testa dac butonul este sau nu selectat. Un singur buton al interfeei grafice poate deine legtura cu tastatura la un moment dat, ceea ce nseamn c apsarea tastei spaiu (engl. spacebar key) n acel moment determin declanarea aciunii asociate butonului. Pentru a selecta butonul implicit care deine focusul la startarea aplicaiei, folosim un apel fereastraMea. getRootPane().setDefaultButton(buton). Un buton poate fi dezactivat (nu va mai rspunde la aciunile utilizatorilor efectuate asupra lui) folosind metoda setEnabled(boolean stare). 84

JToggleButton, JCheckButton, JRadioButton Componentele JCheckButton, JRadioButton i JToggleButton au aceeai funcionalitate, permind simularea unui comutator (engl. switch) cu dou stri. Singura diferen dintre toate aceste componente o reprezint instanele UIDelegate care le dau vizualizarea i care sunt diferii. De remarcat faptul c JCheckButton i JRadioButton motenesc clasa JToggleButton, care ofer pentru acestea mecanismul de comutare ntre cele dou stri posibile. Putem verifica dac un buton este selectat folosind metoda isSelected() i l putem selecta efectiv utiliznd metoda setSelected(boolean stare). Folosind clasa ButtonGroup putem grupa mai multe butoane mpreun pentru a garanta c numai unul poate fi selectat la un moment dat. Gruparea se poate face doar pentru butoanele care motenesc JToggleButton, deoarece numai acestea sunt selectabile. Chenare Rolul chenarelor (engl. borders) este important n realizarea unei interfee grafice prietenoase. Prin intermediul lor putem crea butoane care s se disting de context, umbre pentru zonele de text, putem separa ntre ele componentele. Chenarele nu sunt componente (nu motenesc JComponent), astfel n c t nu le putem asocia asculttori, tooltips etc. Clasa din care sunt derivate toate chenarele, i anume AbstractBorder, este derivat direct din clasa Object, la fel ca toate clasele d i n Java. Clasele reprezentnd diverse chenare se afl localizate n pachetul javax.borders care trebuie importat pentru a le putea folosi. Swing pune la dispoziia utilizatorilor o serie de chenare standard care pot fi folosite n obinerea de chenare compuse, personalizate. Lista lor o prezentm n continuare: Chenar CompoundBorder EmptyBorder EtchedBorder LineBorder MatteBorder SoftBevelBorder TitledBorder Explicatia O combinaie de dou chenare: una interioar i una exterioar. Reprezint metoda prin care se pot compune chenare. Un chenar transparent folosit doar pentru a defini spaiul liber n jurul componentelor. Un chenar avnd forma unei linii care apare n relief. Un chenar plan cu o grosime i culoare specificate. Un chenar constnd dintr-o culoare sau o mic imagine. Un chenar 3D ridicat sau cobort, cu colurile rotunjite. Un chenar care afieaz un titlu ntr-o anumit poziie. Putem specifica fontul titlului, culoarea, indentarea i poziionarea folosind metodele i constantele clasei TitleBorder. 85

Pentru a seta chenarul unei componente se utilizeaz metoda setBorder() pe care acestea o motenesc din clasa JComponent. Mai exist, de asemenea, o clas care poart denumirea de BorderFactory, care se afl n pachetul javax.swing, ce conine metode statice - pot fi folosite pentru a construi chenare de diferite tipuri. JList Aceast component permite utilizatorilor s aleag un element dintr-o list de obiecte. Coninutul unei liste este gestionat printr-un model care este o instan a clasei ListModel. Putem preciza c JList ofer acces la coninutul listei doar prin intermediul modelului de date asociat. Constructorii acestei componente permit crearea de liste direct dintr-un tablou avnd drept elemente instane de clase derivate din clasa Object sau dintr-un vector Vector (care, la rndul lui, este o colecie de elemente Object). Ceea ce va fi afiat ca text n list, innd cont c elementele listei sunt instane Object, va fi irul rezultat din apelul toString() al obiectelor (numai n cazul instanelor clasei Icon se va face tiprirea lor ca pictograme n etichete). In cazul n care nu asociem un model de date explicit, coninutul este gestionat tot prin intermediul unui model ListModel implicit, i anume o instan a DefaultListModel, care este alocat componentei. Clasa DefaultListModel este o implementare implicit a modelului ListModel i ine n interior lista sub forma unui vector de obiecte Object. Mai exist o implementare abstract pentru ListModel, i anume AbstractListModel, care permite programatorului s aleag structura de date in care s pstreze lista. JComboBox Componenta JComboBox combin un buton (care se transform ntr-un cmp text cnd componenta este editabil) cu o list expandabil la cerere din care utilizatorul poate s selecteze o singur opiune la un moment dat. Deoarece componenta JComboBox are aceeai funcionalitate ca JList, este dificil alegerea ntre aceste dou posibiliti. Se recomand folosirea componentei JComboBox n defavoarea JList, n cazul n care se dorete ca utilizatorul s poat s aleag o singur opiune pe care s o vad explicit mai apoi. Cnd componenta este setat s fie editabil, atunci va conine un cmp text (i nu un buton) n care utilizatorul poate introduce date de intrare. Intern, aceast component este construit dintr-un buton i un meniu JPopupMenu, care conine o list JList (reprezentnd opiunile posibile) aezat mai nti ntr-un panou JScrollPane pentru a se putea derula. 86

Aceast component permite folosirea mai multor constructori asemntori componentei JList. Se poate construi un JComboBox folosind un model dat explicit, care este o instan a clasei ComboBoxModel i, n acest caz, vom avea acces maxim asupra proprietilor i comportamentului componentei. Putem s crem o component JComboBox direct dintr-un tablou de obiecte Object sau dintr-un vector Vector. Mai putem crea un JComboBox vid, cruia i putem asocia mai apoi un model de date. Trebuie s precizm c avem la dispoziie clasa DefaultComboBoxModel, care este implementarea implicit pentru ComboBoxModel i pe care o putem folosi drept model efectiv pentru componentele noastre. Mai exist un model, i anume interfaa MutableComboBoxModel, ce face posibile operaiile de adugare, tergere i modificare n mod dinamic a coninutului componentei JComboBox care o folosete ca model de date. JTable JTable este componenta grafic care permite operarea cu tabele. Clasa JTable din pachetul javax.swing extinde direct clasa JComponent, implementnd interfeele TableModelListener, TableColumnModelListener, ListSelectonListener, CellEditorListener i Scrollable. JTable are asociate, de asemenea, trei modele: TabLeModel, TableColumnModel i ListSelectionModel, fiecare gestionnd o anumit caracteristic a acestei componente. De asemenea, datorita com-plexitii acestei componente, JTable are un ntreg pachet dedicat, i anume javax.swing.table. Componenta JTable este construit pe acelai principiu clasic n Swing, numit modeldelegat (engl. model-delegate), care reprezint, de fapt, o desprire a datelor de modul lor de vizualizare. Datele tabelei vor fi ntotdeauna inute ntr-o matrice, ntr-o list de vectori, sau o list de liste, de fapt, orice structur de date tabelar. Reprezentarea grafic a datelor (engl. look) este ncapsulata mpreun cu modul n care componenta reacioneaz la aciunile utilizatorilor (engl. feel) ntr-un obiect, care poart denumirea delegate, asociat fiecrei componente grafice. Componenta joac astfel rolul unui mediator ntre vizualizare i datele care reprezint coninutul ce se vrea vizualizat. Pentru JTable obiectul delegate implicit are numele TableUI, se gsete n pachetul javax.swing.plaf i poate fi schimbat prin adugarea unui plug-in nou pentru schimbarea vizualizrii i comportrii la aciunile utilizatorilor. Aceast clas d, cu alte cuvinte, pentru componenta JTable vizualizarea i comportamentul (engl. look-and-feel). Datele ce se doresc vizualizate sunt la rndul lor nfurate ntr-un model care prin sistemul de asculttori actualizeaz automat vizualizarea n urma modificrilor fcute n structura de date. Spre 87

exemplu, atunci cnd vrem s tergem o nregistrare dintr-o tabel, o tergem din structura care ine datele i atenionm componenta JTable care o nfoar s se reactualizeze.

6. Realizarea interfeei grafice BYBLIOTON pentru gestionarea unei biblioteci


Open source" desemneaz dezvoltarea de programe software de ctre o comunitate, de ctre o companie sau de ctre o persoan i oferirea lor spre folosire sau mbuntire sub licen GPL.(General Public License). Licenta open-source este caracterizata de libertatea acordat utilizatorilor si de a-l utiliza, copia, redistribui, studia, modifica i mbunti. Mai exact, este vorba de urmtoarele patru forme de libertate pentru utilizatorii si: Libertatea de a utiliza programul, n orice scop Libertatea de a studia modul de funcionare a programului, i de a-l adapta nevoilor proprii . "Open source" asigur accesul la tot codul-surs. Libertatea de a redistribui copii, n scopul ajutorrii aproapelui tu . 88

Libertatea de a mbunti programul, i de a pune mbuntirile la dispoziia publicului, n folosul ntregii societi . Necesit accesul la codul-surs.

Un program (o aplicaie) este open-source dac ntrunete toate aceste liberti. Astfel, oricine oriunde ar trebui s fie liber s redistribuie copii, modificate sau nu, n mod gratuit sau contra unei sume pentru costurile de desfacere. Aceste liberti nseamn (printre altele) c nu este necesar a cere sau a plti pentru a primi permisiune n acest scop. Pentru realizarea programului nostru avem nevoie de un sisetm de gestiune al bazelor de date MySQL si de un mediu de dezvoltare Java NetBeans. NetBeans este un proiect open-source IDE (Integrated Development Environment ) mediu integrat de dezvoltare. Contine toate uneltele de care avem nevoie pentru a crea ecrane profesionale, situri web, aplicatii pe telefoane mobile cu ajutorul limbajelor de programare Java, C/C++ si a limbajelor dinamice PHP, JavaScript, Groovy si Ruby. NetBeans este usor de instalat si utilizat, poate rula pe mai multe platforme Windows, Linux, Mac OS si Solaris. NetBeans IDE 6.5 ofer caracteristici noi si mbuntiri in lucrul cu PHP, JavaScript si funcii de editare pentru Ajax , suport mbuntit pentru utilizarea web framework si Java Persistence API si ofera suport pentru integrarea MySQL si GlassFish v3. MySQL este un sistem de gestiune a bazelor de date relaional, produs de compania suedez MySQL AB i distribuit sub Licena Public General GNU. Este cel mai popular SGBD open-source la ora actual, fiind o component cheie a stivei LAMP (Linux, Apache, MySQL, PHP). Dei este folosit foarte des mpreun cu limbajul de programare PHP, cu MySQL se pot construi aplicaii n orice limbaj major. Exist multe scheme API disponibile pentru MySQL ce permit scrierea aplicaiilor n numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Borland Delphi, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfa de tip ODBC denumit MyODBC permite altor limbaje de programare ce folosesc aceast interfa, s interacioneze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. n sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul crora respectivele limbaje s poat folosi acest SGBD mult mai uor dect prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.

89

Licena GNU GPL nu permite ncorporarea MySQL n softuri comerciale; cei care doresc s fac acest lucru pot achiziiona, contra cost, o licen comercial de la compania productoare, MySQL AB. MySQL este component integrat a platformelor LAMP sau WAMP (Linux/WindowsApache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicaie web este strns legat de cea a PHP-ului care este adesea combinat cu MySQL i denumit Duo-ul Dinamic. n multe cri de specialitate este precizat faptul ca MySQL este mult mai uor de nvat i folosit dect multe din aplicaiile de gestiune a bazelor de date, ca exemplu comanda de ieire fiind una simpl i evident: exit sau quit. Pentru a administra bazele de date MySQL se poate folosi modul linie de comand sau, prin descrcare de pe internet, o interfa grafic: MySQL Community Server i Gui-Tools, de la adresa http://dev.mysql.com/downloads/mysql/5.0.html , respectiv http://dev.mysql.com/downloads/gui-tools/5.0.html . In cazul proiectarii unei baze de date MySQL mai ofera un produs sub licenta GPL, MySQL Workbench, este o noua generatie de design de baze de date care poate sa proiecteze in mod eficient, sa gestioneze si sa documenteze o baza de date o baza de date relaionala. Se poate downloada de la adresa http://dev.mysql.com/downloads/workbench/5.1.html.

Instalarea serverului MySQL. Se lanseaz in execuie programul MySQL Community si se executa urmtorii pai : Next Typical, Next Install Next Next Finish. Se lanseaz automat in execuie MySQL Server Instance Configuration Wizard : Next Standard configurationn, Next Next Se introduce parola si se confirma, Next Execute Finish. Prin paii anteriori am instalat baza de date si am configurat-o. Acum se poate lucra cu baza de date direct din NetBeans. Daca suntem obinuii sa lucram cu baza de date in GUI Toolos utilitarul grafic de la MySQL se poate instala si acesta. Pentru a verifica baza de date nou creata se instaleaza MySQL Workbench, care are o funcie de construcie a diagramei entitate relaie, afieaz tabelele , atributele si legturile intre

90

tabele, in funcie de codul scris al bazei de date . Construcia unei baze de date este mult mai facila prin suportul grafic pe care l ofer.

6.1.Crearea bazei de date


Cu ajutorul mediului de dezvoltare NetBeans putem construi o baza de date. In fereastra Services, gsim serverul local MySQL. Pentru a putea crea o baza de date in MySQL, trebuie sa ne conectam la server: click dreapta pe MySQL Server at localhost:3309[root]- Connect. Dup conectare crem baza de date : click dreapta pe MySQL Server at localhost:3309[root]-

-Create Database - in fereastra de dialog introducem numele bazei de date Biblioteca si confirmam. Astfel am creat baza de date Biblioteca.

In fereastra Services se gsete baza noastr de date nou creata . Se observa adresa bazei de date si directoarele ce le conine. In directorul Tables se introduc tabelele si atributele, cheile primare, cheile strine, indexurile.

91

Pentru a popula baza de date cu tabele avem doua posibiliti:


a) Lucru in modul vizual click dreapta pe Tables Create Table - In fereastra care ne

apare putem denumii tabelul , putem aduga atribute, se poate seta proprietile fiecrui atribut (cheia primara, sa fie indexat sau nu, NULL sau NOT NULL, sa fie unica, denumirea atributului, tipul de data , dimensiona, comentarii, valoare implicita si constrngeri). Dup ce am adugat in tabel toate atributele si le-am definit prin butonul de confirmare OK se creeaz tabelul nostru. Ca sa verificam compunerea tabelului in fereastra services in directorul Tables, se observa tabelul obinut si atributele adugate, cheia primara , atributele indexate.

92

b) Al doilea mod de lucru este modul de lucru in linie de comanda ; click dreapta pe

directorul Tables Execut Command - in fereastra care apare putem introduce comenzile SQL de la tastatura si putem crea astfel tabelul , defini atributele, cheile primare, constrngerile. La lansarea in execuie a comenzilor apsam iconul Run SQL sau combinaia de taste Ctrl+Shift+E.

La lansarea in execuie a unei comenzi, in fereastra output o sa apar comentarii legate de rularea comenzii respective, timpul de execuie, daca s-a terminat cu succes sau are erori comanda respectiva. Daca gsete erori la compilare o sa anune si linia si coloana unde au aprut erorile respective.

93

In acest fel a fost creata baza de date Biblioteca, care o sa stocheze si o sa gestioneze informaii legate despre cri,autori, edituri , cititori, cri mprumutate. Conectarea la o baza de date Procesul de conectare la o baz de date implica dou operaii: - ncrcarea n memorie a unui driver corespunztor - realizarea unei conexiuni propriu-zise O conexiune (sesiune) la o baz de date reprezint un context prin care sunt trimise secvene SQL i primite rezultate. Intr-o aplicaie pot exista mai multe conexiuni simultan la baze de date diferite sau la aceeasi baza. Clasele si interfeele responsabile cu realizarea unei conexiuni sunt: - clasa DriverManager, ce se ocup cu nregistrarea driverelor ce vor fi folosite n aplicaie - interfaa Driver, pe care trebuie s o implementeze orice clasa ce descrie un driver clasa DriverPropertyInfo - interfaa Connection, descrie obiectele ce modeleaz o conexiune propriu-zis cu baza de date Incarnarea n memorie a unui driver Primul lucru pe care trebuie s-l fac o aplicaie n procesul de conectare la o baza de date este s ncarce n memorie clasa ce implementeaz driver-ul necesar comunicrii cu respectiva baza de date. Acest lucru poate fi realizat prin mai multe modaliti: 1. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); 2. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 3. System.setProperty("jdbc.drivers", "sun.jdbc.odbc.JdbcOdbcDriver"); 4. java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver

94

Specificarea unei baze de date Odat ce un driver JDBC a fost ncarcat n memorie, acesta poate fi folosit la stabilirea unei conexiuni cu o baz de date. Avnd n vedere faptul c pot exista mai multe drivere nregistrate n memorie, trebuie s avem posibilitea de a specifica pe lng identificatorul bazei de date si driverul ce trebuie folosit. Aceasta se realizeaz prin intermediul unei adrese specifice, numit JDBC URL, ce are urmatorul format: jdbc:sub-protocol:identificator_baza_de_date Cmpul sub-protocol denumete tipul de driver ce trebuie folosit pentru realizarea conexiunii si poate fi odbc, oracle, sybase, db2 i aa mai departe. Identificatorul bazei de date este un indicator specific fiecrui driver care specific baza de date cu care aplicaia dorete s interactioneze. In functie de tipul driver-ului acest identificator poate include numele unei maini gazd, un numr de port, numele unui fiier sau al unui director, etc. Realizarea unei conexiuni Metoda folosit pentru realizarea unei conexiuni este getConnection din clasa DriverManager si poate avea mai multe forme: Connection c = DriverManager.getConnection(url); Connection c = DriverManager.getConnection(url, username, password); Connection c = DriverManager.getConnection(url, dbproperies); O conexiune va fi folosit pentru: - crearea de secvene SQL ce vor fi folosite pentru interogarea sau actualizarea bazei - aflarea unor informaii legate de baza de date (meta-date) Clasa Connection asigur suport pentru controlul tranzaciilor din memorie ctre baza de date prin metodele commit, rollback, setAutoCommit.

6.2.Realizarea interfeei grafice


Pentru a realiza interfaa grafica folosim limbajul de programare Java cu ajutorul mediului de programare NetBeans. 95

Pentru a crea un proiect in NetBeans trebuie sa urmam urmtorii pai : File New Project Java Java Application Next In cadrul ferestrei deschise putem sa stabilim numele proiectului (Project Name), locaia proiectului si fiierul ce o sa conin proiectul in sine, putem stabili locaia librriei, crearea clasei Main. Finish

96

Am obinut proiectul Biblioteca. In fereastra Project se gsesc toate fiierele programului astfel creat:

97

Source Packages - Sursele din proiect (.java)care sunt incluse in pachetele definite de ctre utilizator sau in pachetul implicit; Test Packages - Testarea surselor (.class); Libraries - Librariile corespunzatoare proiectului Test Libraries - Testarea librariilor.

In pagina din dreapta se observa codul sursa al fiierului Main.java. Modificrile in codul sursa se fac numai sub rndul ://TODO code applications logic here Public class main { Public static void main (string[] args ) { //TODO code applications logic here System.out.println("BUN VENIT"); } } Compilarea codului surs se poate face in mai multe moduri : Click dreapta pe fiierul main.java compile sau F9 Meniul Run Compile Main.java sau F9 In fereastra output o sa gsim urmtorul mesaj:

Pentru a construi fiierul executabil in java biblioteca.jar parcurgem urmtorii pai: Run Build Main Project sau F11. In fereastra Output vom avea:

Rularea programului se poate face urmnd urmtorii pai: 98

Click dreapta pe fiierul main.java Run File sau Shift + F6 Meniul Run Run File sau Shift + F6

In fereastra output o sa gsim urmtorul mesaj:

Pentru a aduga o noua fereastra, se intra in Projects Source Packges Biblioteca, click dreapta si se alege New Jframe Form

In fereastra nou aparut se alege numele clasei si locaia . Finish.

99

A fost creata o noua clasa Primapagina.java. Este compusa dintr-un container de nivel nalt JFrame. In partea dreapta , in fereastra Palette gsim componente Swing, containere (JPanel, JTabbedPane, ) elemente atomice (JButton, JRadioButton, ), componente pentru editarea textului (JTextArea, JTextField, ), meniuri swing (JMenuBar, JMenu, JMenuItem, ..). Aceste componente Swing o sa ne ajute pentru a realiza interfata grafica a programului de gestionare a unei biblioteci.

Am adugat elementele grafice la containerul JFrame si am obinut imaginea de mai jos. In fereastra Inspector se pot vedea componentele adugate .

Dup adugarea elementelor grafice , definim aciunea pe fiecare buton in parte. Click dreapta pe buton si selectam Events-Action-actionPerformed o sa ne duca in codul sursa al paginii respective unde definim aciunea pe care trebuie sa o execute apsarea pe butonul respectiv. 100

nchiderea paginii: private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: System.exit(0); }

Deschiderea unei alte pagini: private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: new Autentificare().setVisible(true); } Anularea continutului unor casete de tip JText sau JPasword: private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: jTextField1.setText(""); jPasswordField1.setText(""); }

101

6.3. Funcionarea programului ByblioTon


Programul ByblioTon, este un program destinat gestionarii crilor dintr-o biblioteca, in cadrul unei scoli, liceu sau pentru uzul personal. Tine evidenta crilor dintr-o biblioteca, a autorilor, editurilor cu care lucreaz , a cititorilor care mprumut cri din biblioteca respectiva. Lansarea programului in execuie ne ntmpina cu o fereastra unde avem posibilitatea sa de a ne autentifica si a intra in program, putem prsi utilizrii programului prin accesarea meniului ajutor. programul respectiv, sau afla date despre program si putem primii o mana de ajutor in vederea

Pentru a putea accesa programul , trebuie sa ne autentificam neaprat. File Autentificare, ne deschide fereastra de autentificare in care trebuie introdus userul si parola. Daca datele introduse sunt corecte o sa se deschid pagina principala a programului.

102

Pagina principala a programului conine un meniu intuitiv, prietenos, care ne poarta prin toate operaiunile de care avem nevoie pentru editarea unei crti , al unui autor, al unei edituri , al unui cititor, modificarea lor, cutarea si tergerea datelor introduse in program .

Pentru adugarea unei cri parcurgem urmtorii pai : Operaiuni Carte - Adugare Carte completare cmpuri (Titlu, ISBN, An apariie, Ediia, Cuvinte Cheie). Pentru a completa cmpul Autor o sa trebuiasc sa verificam daca ii avem deja adugai. Apsam butonul Cutare , o sa se deschid pagina cutare autor, se

103

completeaz cmpurile Nume autor si/sau ID autor , se apas butonul Cutare ce o sa returneze

in tabel, rezultatul gsit. Marcam rezultatul si prin apsarea butonului Insert Autor, introducem autorul gsit in formularul de adugare carte. Daca nu gsim nici un rezultat prin apsarea butonului Adugare Autor deschidem pagina de editare a autorilor. Completam cmpurile si

104

Adugare Autor ne insereaz autorul editat in baza de date. Ne ntoarcem la pagina cutare autori , cutam autorul introdus de noi in baza de date, il selectam si prin apsarea butonului Inserare Autor, adugam un autor la cartea pe care vrem sa o introducem in baza de date. Pentru Editura , se procedeaz similar cu adugarea de autor. Apsam butonul Cutare, se deschide pagina de Cutare Editura completam cmpurile ID Editura sau Nume Editura Cutare. In tabelul de mai jos o sa observam rezultatul cautrii. Daca nu apare nimic, o sa trebuiasc sa introducem in baza de date editura. Adugare Editura , o sa ne trimit in pagina de

introducere a unei nou edituri in baza de date. Dup completarea cmpurilor la apsarea

105

butonului Adugare Editura , o noua nregistrare o sa se fac in baza de date. In pagina Cutare Editura , verificam daca datele introduse s-au nregistrat, printr-o noua cutare. Returnarea rezultatului se face in tabelul de mai jos , se marcheaz editura si se apas Inserare Editura. Aceasta aciune are ca urmare completarea cmpului Editura in formularul de adugare a crii. Dup completarea tuturor cmpurilor, se poate apas butonul Aduga Carte, ce o sa aib ca rezultat introducerea datelor de nregistrare a unei cri in baza de date. Putem modifica datele de nregistrare a unei cri: Operaii Cri Modificare Carte Ne deschide pagina Cutare Carte , introducem datele si apsm Cutare. Marcam rezultatul

106

returnat , apsam Modificare Carte , se deschide pagina Adugare/Modificare Carte , editam modificrile aprute si apsam Modificare Carte. Pentru a terge o carte din baza de date se parcurg urmtorii pai: Operaiuni Carte tergere carte Cutare Carte se introduc datele de cutare a crii Cutare se marcheaz, din tabelul, cartea pe care vrem sa o tergem si butonul tergere Carte o sa elimine datele de nregistrare al crii respective, din baza de date. Datele de nregistrare despre edituri se pot si ele modifica si terge la fel ca si datele despre cri si despre autori. Datele despre cititori , se pot aduga, modifica, terge si cuta dup aproximativ aceleai operaiuni ca si datele despre cri. Despre cri , putem afla de cat ori a fost mprumutata o anumita carte si de ctre cine, intrnd in meniul Circulaie Istoric Carte. Completnd datele de cutare a crii respective

107

Si apsnd butonul Caut, in tabelul de mai jos se vor observa toate mprumuturile si restituirile unei cri. Pentru ca un cititor sa mprumute o carte trebuie sa facem urmtoarele operaiuni: Se intra in meniul principal, pe meniul Circulaie mprumut carte o sa se deschid pagina Cutare Cititor introducem datele cititorului respectiv, Cutare dam click cu mausul pe cititorul respectiv si apsam butonul mpumut. Se deschide pagina mprumut Carte mprumuta

Se deschide pagina Cutare Carte se introduc datele crii respective, Cutare se marcheaz cartea cutata si se apas mprumut- aceasta comanda o sa ne adauge cartea automat in tabelul paginii mprumut Carte.

108

Pentru un cititor care dorete sa prelungeasc perioada de mprumut a crii nu trebuie sa intram dect in pagina mprumut Carte , se bifeaz cartea respectiva si se apas Prelungire. Automat data restituirii se va schimba si o sa trebuiasc sa o aduc peste 14 zile.

7.Concluzii
109

Interfaa grafica pentru gestionarea unei biblioteci, denumita ByblioTon Sunetul crilor sau armonia crilor este destinata pentru bibliotecile de dimensiuni mici sau medii, bibliotecile colilor generale, pentru licee, universiti si pentru bibliotecile particulare. Este un program uor de folosit, intuitiv, care nu cere resurse foarte multe pentru a fii rulat. Este un program construit pe baza tehnologiei Swing din Java si al unei baze de date in MySQL. Baza de date are rolul de a stoca informaiile referitoare la cri, autori, cititori. Interfaa grafica gestioneaz intrrile si ieirile din baza de date, Acest program, ndeplinete toate facilitile pentru a fii folosit in cadrul colilor. Cu mici mbuntiri poate sa fie folosit si pentru genul de programe client-server, cnd un cititor poate sa acceseze de la distanta programul si sa afle ce cri trebuie sa aduc la biblioteca si pana cnd. Sa afle, de acas, daca o sa gseasc la scoal manualele sau culegerile de care are nevoie. Avnd in vedere ca programele folosite la dezvoltarea acestei interfee grafice sunt gratuite MySQL si NetBeans costurile de producie sunt minime si automat este foarte accesibil si are un atu in plus fata de programele ce ruleaz pe pia sub diverse licene. Utilizatorului final cat si celui ce face cunotina pentru prima data cu acest program de gestionare, i se vor prezenta att, un scurt istoric la evoluiei bazei de date informatizate, cat si etapele premergtoare ce stau la baza conceperii programului. Capitolele lucrrii, ce sunt structurate atent, cu elemente strict de baza, ce duc treptat la o cunoatere facila a programului final BiblyoTon, ajuta la utilizarea acestuia att in domeniul de uz personal cat si didactic colar. Intr-o societate moderna, aa cum este cea in care trim, marcata de utilizarea tehnologiilor la aproape orice nivel, cunotinele de utilizare a programele de proiectare, creare si utilizare a bazelor de date informatizate au devenit indispensabile aproape in orice domeniu de gestionare ce tinde sa-si organizeze facil si prompt activitatea. BiblyoTon, fiind un program ce are la baza si funcionalitatea open source, nu necesita costuri de liceniere, versiunile sau imbunatatirile nou aprute fiind publice si disponibile. Sistemul se poate adapta nevoilor utilizatorului, se poate personaliza, aducnd asupra lui modificrile dorite, necesare acestuia. Nefiind restrictiv in privina platformele de lucru: Windows, Linux, Unix, BiblyoTon poate fi instalat si pe un sever si poate fi accesat din orice sistem de operare prin intermediul unui browser, totodat oferind baza pentru dezvoltarea unei biblioteci digitale cat si asigurarea unui management al documentelor si al altor materiale in format electronic. Dezvoltarea si 110

administrarea conturilor utilizatorilor, ce conin informaii personale, date de contact, istoricul mprumuturilor si situaia la zi, este posibila prin accesarea acestora cu uurina. Intr-o accepiune moderna bibliotecile digitale nu sunt numai o simpla replica a unor biblioteci clasice, ci reprezint un mediu integrat de generare, stocare, gestionare si difuzare de coninut digital. Nu mai trebuie demonstrat c utilizarea calculatorului i-a dovedit din plin eficiena n gestionarea si organizarea informaiei. n biblioteci, centre de informare, muzee moderne, nenumrate procese se desfoar asistate de calculator. ntruct informaia circul tot mai repede i prolifereaz spectaculos, sursele de informare trebuie s in pasul cu dinamica produciei, ceea ce face necesar aducerea lor la zi n permanen. Diversificarea utilizatorilor creeaz i niveluri diversificate ale informrii, fiecruia corespunzndu-i i surse de informare predilecte. Intr-o societate n continu schimbare, trebuie s ne adaptm continuu cerinelor ei, s ne adaptm i s acceptm schimbarea, s ne obinuim cu noua tehnic i s o folosim pentru uurarea propriei munci precum i s venim n ajutorul utilizatorilor de informaie.

111

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