Sunteți pe pagina 1din 185

Programarea calculatoarelor.

Baze de date

Suport de curs. Anul I I, semestrul IV.

Autor: Lect. univ. drd. Guef Aurel

1
Cuprins

Curs 1: Sisteme informatice


1. Noţiuni de bază
2. Structura sistemelor informatic
Chestionar

Curs 2: SGBD - Sisteme de gestiune a bazelor de date


1. Introducere. Modelul relaţional
2. SGBD: definiţii
Chestionar

Curs 3: SGBD - Descriere funcţională ( I )


1. Obiectivele SGBD
2. Componentele SGB
Chestionar

Curs 4: SGBD - Descriere funcţională ( II )


1. Sarcinile SGBD
2. Diagrama entitate - relaţie
Chestionar

Curs 5: Baze de date orientate obiect


1. Principiile modelării obiectelor
2. Caracteristicile bazei de date orientate obiect - BDOO
Chestionar

Curs 6: Programarea calculatoarelor. Elemente fundamentale


1. Instrucţiune. Program
2. Sisteme de calcul RISC, CISC
3. Programare liniară, mudulară, structurată
Chestionar

Curs 7: Limbaje de programare


1. Limbaje de probramare: componente
2. Limbaje cod-masină, assembler, evoluate
3. Generaţii de limbaje de programare
Chestionar

Curs 8: Metode de programare


1. Metode de programare-introducere
2. Metode clasice de elaborare a programelor
3. Programarea orientată obiect
Chestionar

Curs 9: Metode de dezvoltare a programelor


1. Metode de dezvoltare software
2. Ciclul de viaţă al produselor program
3. Concepte de bază ale dezvoltării produselor program
Chestionar

2
Curs 10: Programarea bazelor de date
1. Bazele programării în Microsoft Access. Introducere în VBA
2. Concepte esenţiale ale bazelor de date
Chestionar

Curs 11: Tabele


1. Crearea tabelelor
2. Lucrul cu tabele
Chestionar

Curs 12: Queries - Cereri


1. Cereri de selecţie
2. Cereri CROSSTAB, cereri de actiune
Chestionar

Curs 13: Crearea formularelor şi rapoartelor


1. Formulare
2. Rapoarte
Chestionar

Curs 14: Recapitulare

Bibliografie

3
Curs 1: Sisteme informaţionale

1. Noţiuni de bază şi definiţii


2. Structura sistemelor informatice

1. Noţiuni de bază şi definiţii

Informatica este o activitate pluridisciplinară orientată spre proiectarea şi exploatarea


sistemelor de prelucrare a informaţiilor, în scopul eficientizării şi rentabilizării activităţii
umane.

Conform dicţionarului explicativ al limbii române: informatica este ştiinţa care se ocupă
cu studiul prelucrării informaţiei cu ajutorul calculatoarelor (mijloace de prelucrare a
informaţiei).

Sistemul: este o secţiune a realităţii în care se indentifică un ansamblu de elemente,


intercorelate şi interconectate printr-o mulţime de relaţii reciproce, precum şi cu mediul
înconjurător şi care acţionează în comun în vederea realizării unor obiective bine definite.

Fiecare sistem are un comportament specific, determinat de natura elementelor din care
este compus şi de relaţiile dintre ele.

Sistemul informaţional: este ansamblul elementelor de structură organizatorică din


compunerea unei secţiuni a societăţii umane, împreună cu legăturile funcţional-informaţionale
dintre ele şi cu mediul social exterior, care acţionează în comun pentru îndeplinirea scopului
şi a obiectivelor stabilite.

Se poate spune că sistemul informaţional este un ansamblu tehnico-organizatoric de


proceduri de constatare, consemnare, culegere, verificare, transmitere, stocare şi prelucrare a
datelor, în scopul satisfacerii cerinţelor informaţionale necesare conducerii procesului
fundamentării şi elaborării deciziilor.
Sistemul informatic se interpune între sistemul condus şi sistemul de management, ca în
figura de mai jos:

Sistemul condus

Sistemul de management

4
Obiectivul sistemului informaţional este satisfacerea cerinţelor informaţionale necesare
conducerii în procesul de elaborare a deciziilor.
Activităţile care se derulează în cadrul sistemului informaţional sunt următoarele:

- culegerea şi consemnarea datelor primare de la locurile unde au loc procesele şi


fenomenele economice, precum şi din spaţiul economic extern;
- verificarea, transmiterea şi stocarea datelor pe diferiţi purtători tehnici de
informaţii;
- prelucrarea manuală sau automată a datelor în concordanţă cu cerinţele
conducerii;
- selectarea informaţiilor necesare conducerii conform principiului selecţiei şi
informării prin excepţie.

Sistemul informatic constă din partea automatizată a sistemului informaţional (utilizatorii


implicaţi în automatizare şi cadrul organizatoric aferent) căreia i se adaugă şi alte elemente
necesare pentru automatizarea obţinerii informaţiilor necesare conducerii în procesul de
fundamentare şi elaborare a deciziilor şi anume:

- echipamente (hardware),
- programe (software),
- comunicaţii,
- baza ştiinţifică şi metodologică,
- baza informaţională.

Baza ştiinţifică şi metodologică constă din modele matematice ale proceselor şi


fenomenelor economice, metode şi tehnici de realizare a sistemelor informatice.
Baza informaţională se referă la datele supuse prelucrării, fluxurile informaţionale, sistemele
şi nomenclatoarele de coduri.
Odata cu dezvoltarea cercetării operaţionale, a teoriei deciziei, a Internetului şi a
performanţelor calculatoarelor, au apărut sisteme informatice dedicate, cum sunt sistemele
suport de decizie şi sistemele expert, dar şi unele sisteme informatice de tip nou ca cele
pentru proiectare asistată de calculator, sistemele multimedia, sistemul pentru comerţul
electronic şi sistemele deschise.

Sistemele suport de decizie sunt colaboratori ai decidentului, în timp ce sistemele expert


sunt sisteme de inteligenţă artificială şi se comportă ca un epxert, adică rezolvă o mare parte
din procesul elaborării deciziilor, dar sunt avute în vedere numai deciziile referitoare la
problemele pentru care sistemul expert a fost conceput.

Sistemele suport de decizie trebuie să dispună de o componentă de gestiune a modelelor,


una de gestiune a datelor, una de asigurare a comunicaţiei şi interfaţa utilizator.

Utilizarea tot mai frecventă a sistemelor suport de decizie este favorizatţia de noi tehnologii
în domeniul informatic şi este impusă de volumul din ce în ce mai mare şi de diversitatea
datelor ce trebuie prelucrate pentru a lua o decizie eficientă.
Ele servesc la îmbunătăţirea eficacităţii procesului decizional (măsura în care decizia îşi
atinge obiectivele) prin faptul că oferă managerilor o informaţie de calitate şi moduri noi de
interpretare a informaţiilor.

5
Un sistem de decizie (SSD) este un sistem de decizie informatic interactiv, flexibil şi
adaptabil, proiectat special pentru a oferi suport în soluţionarea unor probleme manageriale.

În procesul decizional din afaceri, bazat mai ales pe cunoştinţe, datele sunt procesate în
informaţii care sunt evaluate în raport de cunoştintele existente sau stimulează crearea de noi
cunoştinţe.
Datele din baza de date a SSD pot proveni din surse interne (se referă la resuresele
organizaţiei: umane, tehnice, financiare), externe (se referă la mediul înconjurător: economic,
natural, social) şi private (apartinând unor angajaţi ai firmei).

Sistemele expert trebuie să dispună de o bază de cunoştinţe, o bază de fapte, un spaţiu


de lucru, mecanisme rezolutive (de raţionament şi de inferenţă) mecanisme explicative şi
interfaţa utilizator.

Sistemele expert reprezintă sisteme de inteligenţă artificială destinate rtezolvării unor


probleme dificile, de natură practică, la nivelul de performanţ experţilor umani.

Ele realizează o automatizare a expertizei dintr-un domeniu numit domeniu de expertiză.


Cunoştinţele asociate domeniului de expertiză servesc la rezolvarea problemelor din acest
domeniu, care ca tip sunt în general omogene şi pot fi consideraste ca apartinând unei anumite
clase de probleme.
Informatica convenţională, bazată pe algoritmi, nu a reuşit să transfere activităţile ce
necesită calităţi intelectuale deosebite (posibilitatea de abstractizare, flexibilitate, adaptare la
situaţii noi, creativitate…etc) către maşină.

Inteligenţa artificiala se ocupă cu comportamentul inteligent şi cu studiul posibilităţii de


emulare a acestuia la maşini, reaspectiv maşini de calcul.

Comportament inteligent înseamnă un comportament care implică realizarea activităţilor


inteligente (activităţi deosebite, aşa cum au fost menţionate mai sus).

Inteligenţa artificială se bazează pe memorarea cunoştinţelor şi asigurarea condiţiilor de


prelucrare automată a cunoştinţelor.

De aceea, sistemele de inteligenţă artificială se numesc sisteme bazate pe cunoştinţe sau


sisteme cu bază de cunoştinţe.

Sistemele de inteligenţă artificială dispun nu numai de cunoştinţe ci şi de mecanisme de


utilizare a acestora (mecanisme rezolutive sau de raţionament), de o bază de fapte şi de
posibilităţi de descriere a activităţilor ce trebuie să le execute (a task-urilor) cu ajutorul
faptelor.

Este de remarcat că aceste cunoştinţe se exprimă în mod independent de modul lor de


utilizare, ceea ce nu este cazul în informatica convenţională, unde reprezentarea cunoştinţelor
este implicită şi numai modul de utilizare a acestora (algoritmul) este explicit.

6
Prelucrarea nealgoritmică, descriptivă a cunoştinţelor în cadrul sistemelor expert a avut drept
consecinţă extinderea ariei de aplicare a tehnologiilor informatice.
Această extindere s-a produs atât pe orizontală, spre domenii economico-sociale (activităţi
educaţionale, juridice, politice, etc) cât şi pe verticală, spre prelucrări şi procese informaţionale
noi (evalurea calitativă, raţionamentul în sens general).
Prelucrarea nealgoritmică a informaţiei în cadrul sistemelor expert poate oferi soluţii mai
productive unor probleme abordate şi deja rezolvate în manieră convenţională (algoritmică).
În domeniile în care datele şi cerinţele informaţionale se modifică frecvent, soluţiile
algoritmice se adaptează cu dificultate la aceste schimbări, uneori cu preţul reproiectării ş a
unor programări laborioase.
Tipul de sistem informatic depinde de natura datelor şi prelucrărilor ce se vor executa în
acel sistem.

Dacă într-o problemă, criteriile sunt preponderent cantitative, iar caracteristicile problemei
se formulează cantitativ, modelarea se poate face algoritmic, deci se poate proiecta un sistem
informatic uzual, având loc prelucrări de date obişnuite.
Dacă avem de a face cu formulări mai mult calitative decât cantitative, atunci ne vom
orienta asupra unui sistem suport de decizie sau a unui sistem expert, care nu exclud
algoritmii, dar presupun şi baze de cunoştinţe.

Sistemele informatice tradiţionale folosesc baze de date (mai ales, baze de date
relaţionale, care vor fi definite mai târziu), dar acum, se afirmă tot mai mult sistemele
orientate obiect.

Elaborarea sistemelor informatice este un act de mare responsabilitate şi de mare


importanţă.
Analiştii, cei care vor proiecta sistemul informatic, trebuie să cunoască specificul tuturor
activităţilor desfăşurate în unitatea economică respectivă, dar şi să coopteze specialişti ai
unităţii economice, pentru stabilirea în detaliu a structurii sistemului informatic.
Se creează astfel o echipă mixtă de realizare a sistemului informatic, cu o programare
riguroasă a tuturor fazelor de dezvoltare a acestuia.
Trebuie precizat că în cursul elaborării sistemului informatic se impune respectarea
legislaţiei din domeniu, astfel incât, forma documentelor de iesire, precum şi modurile de
calcul implicate trebuie să fie conforme acestei legislaţii.

7
2. Structura sistemelor informatice

În conformitate cu abordarea funcţională, sistemele informatice sunt organizate pe

- subsisteme,
- aplicaţii,
- unităţi funcţionale sau proceduri logice.

Pentru programatori sunt relevante incă două nivele, inferioare unităţii funcţionale:

- unitatea de prelucrare sau procedura automată şi


- modulul program.

În general, subsistemul vizează o funcţie a unităţii beneficiare sau un domeniu de


activitate din unitatea în care este conceput sistemul.

Aplicaţia vizează o activitate.

Unitatea funcţională vizează o subactivitate sau o sarcină.

Aplicaţia este un pachet de programe ce serveşte la automatizarea prelucrării datelor


aferente unei activităţi distincte din cadrul unui domeniu de activitate(de exemplu, poate exista
o aplicaţie pentru elaborarea statelor de plată, denumită pe scurt, aplicaţia salarii).

Într-o aplicaţie pot fi implicate mai multe elemente de structură organizatorică (de exemplu,
pentru elaborarea statelor de plată trebuie să conlucreze serviciul financiar, seviciul personal,
dispeceratul…etc), acestă implicaţie fiind, de cele mai multe ori, inevitabilă, deşi complică
schema funcţională a aplicaţiei.
De regulă, aplicaţiile se derulează ciclic şi pentru a fi mai usor trecute pe calculator,
ciclul lor de viaţă se descompune în subactivităţi (cum ar fi preluarea datelor şi actualizarea
bazei de date, elaborarea de liste de ieşire sau rapoarte, elaborarea de informaţii necesare altor
aplicaţii….etc).

Procedura logică (unitatea funcţională) este corespondentul subactivităţii din cadrul unei
aplicaţii din domeniul informatizării.

Numai la acest nivel se poate face uşor trecerea directă de la de la structura logică a
aplicaţiei la programe, ceea ce înseamnă că unei unităţi funcţionale i se pot asocia din softul
aplicaţiei, una sau mai multe unităţi de prelucrare sau proceduri automate.
În contextul unităţilor funcţionale, elementele de structură organizatorică folosesc calculatorul
în sesiuni de lucru la calculator, când nu se rulează un singur preogram, ci una sau mai multe
proceduri automate.

Procedura automată este o secvenţă bine definită de programe (module program), care
odată lansaţă în execuţie, se rulează după o schemă logică, fără intrerupere, până la sfârşit.

Faptul că procedura se execută întotdeuna până la sfârşit, nu înseamnă că programele care


fac parte din procedură se vor rula toate de fiecare dată; rostul schemei logice care stă la
baza procedurii este de a decide, în funcţie de parametrii introduşi de utilizator şi de felul

8
cum decurge lucrarea, care program să se ruleze şi care să fie sărit, astfel încât procedura să
înfăptuiască o etapă sau măcar acea parte dintr-o etapă din ciclul de viaţă a unei aplicaţii.
Există şi proceduri manuale, care deşi nu fac obiectul programării, pregătesc prelucrarea
automată a datelor sau finalizează această acţiune.
Sistemele informatice sunt structurate pe subsisteme, aplicaţii, unităţi funcţionale, unităţi de
prelucrare sau proceduri şi module program, aşa cum s-a specificat deja.
Indiferent de nivelul său, orice componentă a sistemului informatic presupune:

- intrări,
- prelucrări,
- ieşiri.

Relaţiile dintre componente se realizează prin intermediul unei baze informaţionale, care
există şi în sistemul informaţional, dar în condiţiile informatizării va fi reflectată în colecţii
omogene de date ce pot fi organizate în baze de fişiere sau baze de date, în funcţie de
sistemul specific de gestiune a datelor (SGBD - Sistemul de gestiune al bazelor de date).

Intrările în sistemul informatic sunt acele modificări ale sistemului informational care
produc schimbări în colecţiile de date, adică tranzacţiile externe.

Adeseori, modificările pe care tranzacţiile externe le produc direct colecţiilor de date induc
şi un al doilea val de modificări ale acestora, sub forma tranzacţiilor interne.
Astfel, o factură ce insoţeşte o tranşă de materiale venite de la furnizor este o tranzacţie
externă, pentru că modifică soldul materialelor cuprinse în factură, dar ea induce şi o
modificare a soldului furnizorului respectiv, ceea ce este o tranzacţie internă.

Tranzacţiile externe provin din exteriorul sistemului electronic de calcul, în timp ce


tranzacţiile interne sunt produse de procedurile de actualizare şi exploatare a colecţiilor de
date.

Este datoria analistului de sisteme informatice să identifice încă din etapa de proiectare
logică a sistemului efectele secundare ale intrărilor în sistem şi să consemneze necesitatea
procedurilor care vor materializa aceste efecte asupra colecţiilor de date, adică vor efectua
tranzacţiile interne ce se impun logic.

Prelucrările sistemului informatic sunt efectuate de procedurile sistemului informatic şi


prin ele se urmăreşte să se realizeze actualizarea şi exploatarea colecţiilor de date.
Dacă baza informaţională este formată din ansamblul entităţilor informaţionale şi a
atributelor pe care acestea le au, colectiile de date preiau numai mulţimea atributelor entităţilor
din baza informaţională, aşa numitul nucleu de informaţii.

Legăturile între entităţi apar numai când acestea au atribute comune.

Mulţimea entităţilor informaţionale din baza de date trebuie să fie unică şi neredundantă (să
nu conţină informaţii dublate sau informaţii care nu au nici o legătură cu funcţionarea
sistemului respectiv).
Ea trebuie să asigure un fond centralizat de informaţii care să asigure obţinerea ieşirilor
solicitate de beneficiarul sistemului informatic.

9
Ieşirile sistemului informatic sunt grupate în patru categorii:

- indicatori sintetici (cifra de afaceri, profitul brut, etc),


- liste sau situaţii de ieşire (tabele în forme diferite),
- grafice care redau dinamica indicatorilor,
- indicatori analitici stocaţi pe suporturi magnetice.

Realizarea unui sistem informatic sau doar a unei aplicaţii presupune modelarea situaţiei
reale şi utilizarea modelului creat, în realitatea cu care operează calculatorul.

Modelarea este reprezentarea într-un mediu controlat a proprietăţilor şi / sau a fenomenelor


şi proceselor care caracterizează un obiect sau un sistem real.

În modelare nu există adevăr absolut: modelarea presupune abstracţie şi aducerea în atenţie


numai a unor aspecte ale realităţii studiate şi anume acele acpecte care prezintă interes pentru
modelator.

Calculatorul este un mediu controlat în care se poate reproduce realitatea, deci în care se
pot face modele.

Modelul informaţional este o abstracţie a unei entităţi şi această abstracţie poate fi facută
fie pentru a crea un model general (de referinţă) care să fie apoi folosit pentru a crea exemple
concrete de sisteme informatice (cazul arhitecturilor de referinţă), fie pentru a crea modelul
informatic al unei entităţi anume, deci un model de transpunere (se va folosi modelul de
transpunere în cele ce urmează).
La începuturile existenţei sistemelor informatice, atenţia analiştilor a fost concentrată spre
latura funcţională a activităţii umane studiate; cum o funcţie a unui birou sau secţie nu
putea fi analizată şi nici prelucrată în bloc, ea a fost descompusă în activităţi (rezultând
aplicaţiile informatice), activităţile au fost descompuse în subactivităţi (rezultând procedurile),
care la rândul lor au fost descompuse în operaţii, cărora în calculator le corespundeau
modulele program.
Astfel, s-a dezvoltat o abordare funcţională a sistemelor informaţionale.

În informatica industrială, funcţiei îi corespunde procesul, ceea ce a dus la abordarea


orientată spre proces.

Ulterior, locul fişierelor (conţnând informaţiile referitoare la fiecare proces) a fost luat de
bazele de date şi corespunzător, locul sistemelor de gestiune al fişierelor a fost luat de
sistemele de gestiune al datelor (SGBD)
.
Pe parcursul perfecţionării SGBD-urilor, s-a trecut la baze de date relaţionale, creându-se
impresia că elementul principal pe baza căruia trebuie perfecţionate SGBD-urile îl reprezintă
structura datelor.

A apărut astfel abordarea orientată spre baze de date.

10
Când s-a pus problema aplicaţiilor în timp real, factorul cel mai important părea a fi
evenimentul; astfel a apărut orientarea spre evenimente.
Structurarea programelor a evoluat odată cu metodele de analiză, dar era din ce în ce mai
greu de ţinut pasul cu metoda de analiză, mai exact cu orientarea abordării informatice.
Preocupările analiştilor şi a programatorilor de a pune în concordanţă structura programelor
cu metoda de analiză a sugerat o nouă abordare, anume: legarea evenimentelor de obiect şi a
programelor (numite acum metode) de evenimente.

A apărut astfel orientarea obiect, numai că spre deosebire de celelalte abordări, aceasta
se extinde şi în alte domenii de activitate, devenind un mod de a concepe realitatea (o
paradigmă).

Dată fiind complexitatea sistemelor informatice, ele nu se pot obţine dintr-o dată şi nici
după cum crede fiecare programator.
La început a fost aşa, dar pe măsură ce s-a acumulat experienţă, au apărut metodologiile.

Metodologia elaborării (dezvoltării) sistemelor informatice a fost concepută iniţial ca un


ansamblu de principii şi indicaţii, tehnici şi metode grupate şi ordonate ca să ducă la
realizarea sistemului informatic.

Prin metodă se înţelege un set de reguli aplicabile unui domeniu restrâns din cadrul unei
metodologii.

Metodologia este văzută ca: setul finit, particular definitoriu al unei metode (metodă de
abordare a sistemelor informatice), prin intermediul unui sistem coerent de formulare şi / sau
procese informatice, necesare pentru modelarea şi formalizarea totală a unui sistem
informatic.

După modul de abordare a sistemelor informatice există:

- metodologii cu abordare structurată şi


- metodologii cu abordare orientată obiect.

Metodologiile cu abordare structurată presupun împărţirea sistemului în subsisteme pe


baza funcţiilor sistemului (cazul abordării funcţionale) sau în funcţie de date (abordarea bazată
pe date).
Metodologiile cu abordare orientată obiect folosesc conceptele tehnologiei orientate obiect,
dezvoltate incă din anii `70.
Privitor la utilizarea acestei orientări obiect în analiza şi proiectarea sistemelor, trebuie
precizat că actualele SGBD de tip Visual: Visual Fox, Visual Basic Application, Access sunt
foarte uşor de manevrat, mai ale că bazele de date din aceste medii de programare se
realizează sub forme de baze de date relaţionale, iar utilizarea obiectelor se face la nivel de
câmp; obiectele intervin vizibil numai în realizarea controalelor.
Metodologiile evoluează odată cu tehnologia informaţiei, dar o metodologie de realizare a
sistemelor informatice trebuie să cuprindă:

- etapele de realizare a unui sistem informatic structurate în subetape, activităţi,


sarcini, precum şi conţinutul lor;
- fluxul realizării acestor etape;

11
- modalitatea de derulare a ciclului de viaţă a sistemului informatic;
- modul de abordare a sistemului;
- strategiile de lucru / metodele de realizare;
- regulile de formalizare a componentelor sistemului informatic;
- tehnicile, procedurile, instrumentele, normele şi standardele utilizate;
- modalităţile de conducere a proiectului şi modul de utilizare a resurselor
financiare, umane, materiale.

În legătură cu sistemele informatice se mai folosesc două noţiuni:

- ciclul de viaţă al dezvoltării sistemelor,


- ciclul de dezvoltare a sistemului informatic.

Ciclul de viaţă al dezvoltării sistemelor se extinde pe intervalul de timp cuprins între


decizia de elaborare a sistemului informatic şi decizia de abandonare sau de înlocuire cu alt
sistem informatic.

Ciclul de dezvoltare a sistemului informatic se extinde de la decizia de elaborare a


sistemului informatic până la momentul intrării sistemului în exploatare.

12
Chestionar

1. Cum definim informatica?

2. Dar sistemul?

3. Cum se defineşte sistemul informaţional?

4. Cum se defineşte şi care sunt componentele sistemului informatic?

5. Care este rolul sistemului suport decizie (SSD)?

6. Ce reprezintă sistemul expert?

7. Cum sunt organizate sistemele informatice?

8. Ce presupune orice componentă a sistemului informatic?

9. Ce semnifică modelul informaţional?

10. Care sunt abordările reprezentative ale sistemelor informaţionale?

13
Curs 2: SGBD - Sisteme de gestiune a bazelor de date

1. Introducere. Modelul relaţional


2. SGBD - Definiţii

1. Introducere. Modelul relaţional

În general, când se proiectează un sistem informatic, din punct de vedere fizic există trei
paşi care trebuie parcurşi:

- proiectarea fişierelor fizice şi a bazelor de date: descrierea modului în care


vor fi stocate şi accesate în / din memoriile secundare şi cum se va asigura
controlul lor pentru a se oferi o securitate maximă;

- proiectarea structurii sistemului şi a programelor: sunt descrise programele şi


modulele acestora urmărindu-se ca ele să fie în concordanţă cu diagramele
fluxurilor de date şi cu celelalte piese ale documentaţiei realizate în etapele
anterioare;

- proiectarea strategiilor de prelucrare distribuită: modalităţile în care


utilizatorul poate să dispună de date şi facilităţi de prelucrare distribuite în reţea.

Când se proiectează arhitecturile bazelor de date, trebuie să fie luate în considerare mai
multe aspecte, dar determinantă este mărimea sistemului.
Există patru tipuri de arhitecturi:

- ierarhică,
- reţea,
- relaţională,
- orientată-obiect.

Modelul ierarhic este de fapt o structură arborescentă cu nivele suprapuse (numite uneori
străbunic, bunic, tată, fiu).
Pentru a lega nivelul nivelul inferior la cel superior se folosesc noduri; fişierele extreme
fiind fişiere frunză.

Modelul reţea este folosit în situaţii complexe, dar este nevoie de specialişti de înaltă
clasă care să lucreze cu astfel de modele.
Ele pot arăta astfel:

14
Modelul relaţional al bazelor de date
Este cel mai des utilizat.
Se bazează pe realizarea de legături între relaţii create cu ajutorul cheilor lor, angrenate cu
rolul de cheie primară şi respectiv cheie externă.
Modelul relaţional depinde exclusiv de legăturile dintre obiecte (tabele).
La acest model s-a ajuns din considerentul că, desi pentru utilizator importanţa primordială
o are entitatea, din punct de vedere al modelului relaţional entitatea există prin combinaţii ale
valorilor caracteristicilor sale.
În acest sens trebuie ştiute domeniile fiecărei caracteristici, adică mulţimea valorilor pe care
o caracteristică le poate lua şi din combinaţia acestor domenii va rezulta o realizare a entităţii.
Matematicianul C. F. Codd a expus, în anul 1969 teoria matematică a modelului relaţional
de organizare a bazelor de date şi acesta a fost adoptat de către toţi specialiştii.

Pe obişnuitul tabel cu date referitoare la o entitate s-au putut aplica toate conceptele unei
metode logice şi riguroase de modelare a datelor, inclusiv algebra relaţională.

Astfel, relaţiei (tabelului) i se poate asocia un grad << n >> (numărul de coloane
ale tabelului) şi o cardinalitate << m >> (numărul de realizări, rânduri sau articole), iar
un articol se identifică în cadrul modelului relaţional cu ceea ce se numeşte un tuplu.

Modelul relaţional foloseşte următoarele concepte fizice:

- relaţie: tabel bidimensional format din rânduri (linii) numite tupluri şi coloane
numite domenii.
Relaţiile abordate sunt finite chiar dacă domeniile pe care sunt construite pot
fi infinite (de exemplu domeniul numerelor intregi);

- tuplu: un rând dintr-o tabelă;

- caracteristica: numele / antetul unei coloane dintr-o tabelă (relaţie);

- cheie primară: cheia care permite identificarea în mod unic u unui tuplu (înregistrare);

- cheie secundară: cheia care permite identificarea tuturor tuplurilor care au aceeaşi
proprietate;

- cheie externă: cheie identică cu chia primară a relaţiei asociate; prin construirea
cheilor externe se realizează un acces rapid la informaţiile conţinute în baza
de date datorită legăturilor pe care le realizează;

- domeniu: mulţimea de valori ale unei caracteristici (o coloană dintr-o tabelă);

- grad: numărul de coloane din cadrul unei tabele; se notează G(R) = n, unde R
este numele tabelei;

- cardinalitate: numărul de rânduri din cadrul unei tabele; se notează C(R) = m, unde
R este numele tabelei;

15
- dimensiunea relaţiei: produsul cardinalitate şi gradul relaţiei.
Un model relaţional cuprinde trei elemente:

- structura datelor,
- reguli de integritate, care guvernează utilizarea cheilor în model;
- operatori.

Structura datelor

Structura datelor în modelul conceptual se defineşte prin schema relaţiei sau prin
diagrame entitate-relaţie combinate cu lista caracteristicilor din compunerea unui tabel.

Sintaxa generală a unei scheme de relaţie este:

<nume relaţie> (<car1>, <car2>, … ,<carm>),

unde câmpul subliniat (unul din


aceste <car>) reprezintă cheia de acces.

Regulile de integritate
Acestea guvernează utilizarea cheilor în model şi sunt cunoscute de la modul practic cum
au fost definite (în mediul de programare Access – care va fi prezentat ulterior) relaţiile dintre
tabelele bazei de date şi mai exact, din modul cum au fost folosite opţiunile ferestrei Edit
Relationship.

Operatori
Privitor la operatori, trebuie precizat că pentru manipularea relaţiilor, modelul relaţional
oferă două categorii de limbaje:

- Limbaje algebrice: bazate pe operatori specializaţi ce combină relaţiile între ele


sau le filtrează.
La baza acestor limbaje stă algebra relaţională.
Aceste limbaje cuprind două tipuri de operatori relaţionali:

- operatori de bază şi
- operatori auxiliari.

Operatorii relaţionali de bază se împart în:

- operatori de asamblare: reuniunea,intersecţia, diferenţa, produsul cartezian;

16
- operatori unari (de restricţie): selecţia şi proiecţia.

Operatorii auxiliari (de extensie) pot fi deduşi din setul de operatori de bază şi cuprind:

compunerea, semicompunerea, diviziunea.

- Limbaje logice (predicative) care permit specificarea relaţiei utilizând formule


de logică matematică, ceea ce numim calcul relaţional (orientat pe tupluri sau domenii).
Calculul relaţional este limbajul pe care s-a construit majoritatea limbajelor de interogare a
bazelor de date.

Dintre aceste limbaje, cel mai folosit este SQL - Structured Query Language.
Limbajul SQL sau SEQUEL (Structured English QUEry Language) se bazează pe
limbajul SQUARE (Specifying Queries As Relational Expressions) şi a fost construit la
IBM (San Jose Research Laboratory din California).
Diverse versiuni sau comenzi ale acestui limbaj au fost incluse în:

- sistemele Xbase: o mulţime de SGBD-uri cu multe părţi comune, care cuprinde


Dbase, Clipper, FoxBase, FoxPro,…etc;
- Oracle: realizat de firma Oracle Corporation;
- System R: construit în 1974 la San Jose Research Laboratory şi îmbunătăţit în
permanenţă prin noi facilităţi.

SQL este atât un limbaj interactiv, cât şi un limbaj integrat într-un limbaj de programare
(numit gazdă).
Cu ajutorul lui SQL-interactiv se creează şi se testează comenzi înainte de a le introduce în
program.
Prin SQL-interactiv se pot detecta şi corecta erori de sintaxă, se poate evalua dacă o cerere
este eficace şi corectă, se pot determina tipurile de date pe care să le suporte programul, se
pot anticipa erori de execuţie care pot să apară în anumite situaţii.
Este un limbaj standard de descriere a datelor şi acces la informaţiile din baza de date.
Au fost dezvoltate foarte multe versiuni ale acestui limbaj (aproximativ 100).
Au fost concepute şi dezvoltate diferite versiuni ale standardului SQL de către ANSI,
IBM, Microsoft, Borland, SAG, X/Open,…etc.
Lipsa unui standard unic SQL are drept consecinţe creşterea costurilor programelor de
gestiune a bazelor de date şi îngreunează întreţinerea arhitecturilor client / server.
Un grup de specialişti în baze de date s-au reunit sub numele SAG - SQL Access Group
cu scopul de a construi un limbaj SQL comun şi de a realiza pentru fiecare variaantă SQL
(dialect) un program de conversie din dialect în SQL şi invers.
Rezultatul a fost că în 1992 Microsoft a lansat ODBC - Open Database Connectivity,
care este o mulţime de primitive bazată pe activitatea lui SAG, iar în 1994 Borland a lansat
IDAPI - Integrated Database Application Programming Interface, care este o bibliotecă
de funcţii SQL ce se pot integra într-un program gazdă
Microsoft a propus o bibliotecă API – Application Programming Interface normalizată,
numită ODBC, care transformă cererile SQL în comenzi specifice unui sistem de gestiune.
Programele comunică cu SGBD prin intermediul acestei biblioteci.
Metoda nu are precompilator şi este uşor de utilizat.

17
Un limbaj de manipulare a datelor se compune dintr-o mulţime de comenzi care permit
interogarea unei baze de date şi dintr-o mulţime de comenzi care permit modificarea acesteia.
Modificarea bazei de date implică:

- inserare,
- suprimare şi
- reactualizare.

În general, un limbaj de manipulare a datelor este incorporabil într-un limbaj de


programare clasic, numit limbaj gazdă.

Aproape orice SGBD dispune de un limbaj de programare extern, conversaţional şi


propune o integrare a acestui limbaj într-un limbaj gazdă.

Unul din cele mai mari merite ale modelului relaţional este că prin intermediul multiplelor
sale limbaje de interogare (neprocedurale) permite utilizatorului, chiar şi informatician, să indice
rezultatul care îl interesează, fără a preciza modul în care este obţinut acest rezultat.

O relaţie poate fi definită ca o mulţime sau ca un predicat.


Conform dualităţii definiţiei unei relaţii, limbajele de manipulare a datelor pot fi grupate
în limbaje algebrice, bazate pe teoria mulţimilor şi limbaje predicative (relaţionale) bazate pe
caculul predicatelor.

Limbajele relaţionale cuprind două subclase de limbaje, după cum calculul relaţional se
aplică tuplurilor (limbaje orientate pe tupluri) sau domeniilor (limbaje orientate pe
domenii).
O variabilă este asociată fie unor tupluri, şi este utilizată în scrierea unei formule
predicative pe tupluri, fie unor domenii, şi este utilizată în scrierea unor predicative pe
domenii.

Limbajele orientate pe domenii pot fi:

- Limbajele non-grafice sunt limbaje orientate pe domenii în care o cerere este


reprezentată sub o formă liniară construită cu operatori şi nume de atribute sau
relaţii.

- Limbajele grafice, unde cererea este construită spaţial, pot fi deferenţiate prin
prin utilizarea explicită sau implicită a variabilelor domeniu.

18
2. SGBD - Definiţii

Un model reprezintă o abstractizare a unui sistem sau proces din lumea reală.
Modelul constă dintr-o structură matematică formală care reprezintă sistemul, un set de
notaţii şi o terminologie necesară exprimării ideilor referitoare la sistem.

Modelarea reprezintă activitatea de creare a unui model.


Un model poate fi folosit pentru studierea unui sistem existent (analiză) sau pentru
realizarea unuia nou (sinteză).
Modelarea bazată pe analiză constă în studierea sistemului modelat, în vederea identificării
trăsăturilor sale reprezentative,
Aceste trăsături sunt incluse în model, iar restul amănuntelor nesemnificative este eliminat.

Prin entitate se înţelege orice realitate, orice existenţă înconjurătoare.

Prima etapă a modelării constă din identificarea entităţilor de interes şi a proprietăţilor


esenţiale care le caracterizează, prin observarea şi studierea sistemului vizat.

Pentru fiecare proprietate a entităţii izolate se asociază un atribut care este elementul de
descriere a entităţii.

Atributele iau valori într-un anumit domeniu, care particularizează entităţile.

De exemplu, pentru entitatea „student”se pot considera:

Cod student CS 678


Nume Alexa
Prenume Ion
Sex 1---------- valoare articol (poate fi 1 sau 0)
Număr grupă 345
Bursier t --------- valoarea poate fi true sau false (t sau f)
-----------
înregistrare

O astfel de coloană (numită înregistrare) se referă la o entitate particulară (student) şi o


linie corespunzătoare mai multor studenţi conţine valori efective ale articolelor relative la un
atribut particular.

Un atribut sau o mulţime de atribute a căror valoare identifică fiecare înregistrare a unei
entităţi reprezintă o cheie pentru entitatea respectivă.

O cheie primară permite să se identifice în mod unic o înregistrare (de exemplu, nu


există doi studenţi care să aibă acelaşi cod student), iar o cheie secundară permite
identificarea tuturor înregistrărilor care au o anumită proprietate.
Pe plan internaţional există mai multe grupuri specializate în standardizarea conceptelor care
apar în dezvoltarea bazelor de date.

19
În 1971, CODASYL a publicat un raport care conţine recomandări în privinţa cerinţelor
de organizare, funcţionare şi terminologie ale sistemelor de memorare şi prelucrare a datelor.
Vom defini câteva concepte fundamentale referitoare la structura datelor conform
standardului CODASYL.

- Date: aspecte elementare ale unor activităţi sau evenimente nesupuse unor prelucrări,
neevaluate din punct de vedere al utilităţii.

- Informaţie: ansambluri de date corelate şi elaborate într-un scop bine determinat, pentru
satisfacerea cerinţelor celui care le utilizează.

- Articol: unitate elementară de date, care poate purta un nume şi deci poate fi identificată.

- Tipul unui articol: ansamblu format din identificatorul folosit, descrierea valorilor
acceptabile şi descrierea formatului de memorare.

- Grup de date: ansamblu de articole care poate fi identificat ca un tot unitar.

- Tipul unui grup de date: ansamblu format din lista identificatorilor folosiţi şi
descrierea articolelor şi a grupurilor de date.

- Înregistrare: colecţie de articole şi / sau grupuri de date identificabilă printr-un nume.

- Zona: subdiviziune a memoriei externe, identificabilă printr-un nume care poate stoca
Înregistrări.

- Baza de date: totalitatea exemparelor înregistrărilor, seturilor, zonelor organizate sub o


anumită schemă; trebuie remarcat natura relativ statică a schemei bazei de
date şi caracterul preponderent dinamic al datelor administrate.

- Dicţionarul datelor: mulţimea descrierii obiectelor unei baze de date.


Acest dicţionar este structurat şi administrat ca o bază de date (metabază).

- Administratorul bazei de date: o persoană sau un grup de persoane responsabile de


analiza, proiectarea, implementarea, exploatarea şi întreţinerea unei
baze de date.
Administratorul poate să nu cunoască conţinutul concret al înregistrărilor.

- SGBD – Sistem de gestiune a bazelor de date: ansamblu de programe destinate


creării, întreţinerii şi exploatării unei baze de date.
Această mulţime de programe asigură interfaţa între o bază de date şi
utilizatorii acesteia.
Un SGBD foloseşte în principiu trei limbaje:

- un limbaj de descriere a datelor fizice,


- un limbaj de descriere a datelor logice,
- un limbaj de prelucrare a datelor.

20
Aceste limbaje pot fi de sine stătătoare sau grefate pe un limbaj de programare general.

Arhitectura bazelor de date evidenţiază componentele acestora:

- baza de date propriu-zisă în care se memorează datele;

- sistemul de gestiune al bazei de date, care realizează gestiunea şi prelucrarea complexă


a datelor;

- un dicţionar al bazei de date (metabaza de date), ce conţine informaţii despre date,


structura acestora, statistici, documentaţie;

- mijloacele hard utilizate (comune sau specializate);

- reglementări administrative destinate bunei funcţionări a întregului sistem;

- personalul implicat: utilizatori finali, administrator, programatori, operatori.

În cadrul unei baze de date putem vorbi de patru nivele de abstractizare şi de percepţie
a datelor:

- nivel fizic (intern) descris de schema fizică a datelor (bit, octet, adresă), care
reprezintă viziunea programatorilor de sistem asupra datelor;

- nivel conceptual descris de schema conceptuală a datelor (articol, înregistrare,


zonă, etc), care reprezintă viziunea programatorilor de sistem asupra datelor;

- nivel logic descris de una din schemele logice posibile ale datelor, care
reprezintă viziunea programatorilor de aplicaţie asupra datelor;

- nivel virtual (extern), care reprezintă viziunea utilizatorului final asupra datelor.

Datele există doar la nivel fizic, iar celelalte trei nivele reprezintă virtualizări ale
acestora.

Într-o bază de date sunt necesare trei nivele de independenţă a datelor:

- independenţa fizică asigură posibilitatea modificării schemei fizice a datelor fără ca


aceasta să oblige la modificarea schemei conceptuale, schemei logice şi a programelor de
aplicaţie;

- independenţa logică asigură posibilitatea modificării schemei conceptuale a datelor fără


ca aceasta să oblige la modificarea schemei logice şi a programelor de aplicaţie;

21
- independenţa faţa de strategiile de acces permite programului să precizeze data pe care
doreşte să o acceseze, dar nu modul cum accesează acestă dată.
SGBD va stabili drumul optim de acces la date.
Realizarea unei aplicaţii

O aplicaţie este un sistem de programe proiectat pentru a efectua un ansamblu determinat


de acţiuni în vederea rezolvării unor probleme concrete.

Orice aplicaţie cuprinde datele de prelucrat şi seturile de acţiuni care definesc prelucrările
de efectuat asupra acestor date.
Odată aplicaţia terminată, ea va putea să fie executată în două moduri:

- interpretativ - când un program numit „interpreter” ia fiecare enunţ al aplicaţiei, îl


traduce în cod intern şi dacă nu găseşte erori, îl execută şi apoi trece la următorul enunţ;

- compilativ - când întreaga aplicaţie este tradusă de programul compilator într-un cod
intermediar, memorat pe disc, numit cod obiect.
Acest cod intermediar este supus unei prelucrări suplimentare de către editorul de legături
pentru a obţine forma finală, executabilă a aplicaţiei.
Aplicaţia se execută sub controlul sistemului de operare.

Realizarea unei baze de date presupune:

- analiza sistemului pentru care se construieşte baza de date,


- proiectarea structurii bazei,
- încărcarea datelor în bază,
- exploatarea şi întreţinerea bazei.

Realizarea efectivă a unei aplicaţii presupune:

- stabilirea temei,
- analiza şi proiectarea aplicaţiei,
- codificarea acesteia,
- testarea modulelor,
- implementarea şi apoi întreţinerea aplicaţiei

Conţinutul acestor etape, respectiv activităţile implicate şi modul lor de desfăşurare depind
de tipul bazei de date, precum şi de domeniul pentru care se proiectează baza.

Utilizatorii unei baze de date

Baza de date reprezintă un sistem de definire, organizare şi prelucrare a informaţiei,


compus din:

22
- o colecţie de date cu eventuale legături între ele;
- o descriere a datelor şi a relaţiilor dintre ele;
- un sistem de programe pentru gestionarea datelor.
Utilizatorii unei baze de date pot fi:

- utilizatori nespecialişti (conversaţionali) care au la dispoziţie o formă de


comunicare cu baza de date apropriată de vorbirea curentă; ei nu cunosc structura bazei şi nici
modul efectiv de lucru cu baza de date;

- utilizatori specialişti care cunosc structura bazei, au cunoştinţe de programare,


cunosc problemele sistemului de operare şi toate acestea le permit să folosească raţional baza
de date, obţinând avantaje maxime;

- administratorul bazei de date este un utilizator special care defineşte


obiectivele exploatării bazei, împarte drepturile de acces ale utilizatorilor, elaborează concepţia
de proiecţie a bazei de date, răspunde de toate activităţile şi operaţiile referitoare la baza de
date, ajută la definirea cerinţelor utilizatorilor, etc.

23
Chestionar

1. Care sunt paşii care trebuie parcurşi când se proiectează un sistem informatic?

2. Care sunt tipurile arhitecturilor bazelor de date?

3. Pe ce se bazează modelul relaţional?

4. Care sunt conceptele fizice ale modelului relaţional?

5. Care sunt elementelemodelului relaţional?

6. Cum se defineşte structura datelor?

7. Care sunt categoriile de limbaje ale modelului relaţional?

8. Din ce se compune un limbaj de manipulare al datelor?

9. Ce reprezintă un model?

10. Cum definim: entitatea, atributul, cheia?

11. Prezentaţi elementele standard CODASYL privind bazele de date.

12. Care sunt elementele bazelor de date?

24
Curs 3: SGBD - descriere funcţională ( I )

1. Obiectivele SGBD
2. Componentele SGBD

1. Obiectivele SGBD

Obiectivele unui SGBD sunt prezentate astfel:

- independenţa fizică,
- independenţa logică,
- manipularea datelor de către nespecialişti,
- eficacitatea accesului la date,
- administrarea centralizată a datelor,
- neredundanţa datelor,
- coerenţa datelor,
- partajabilitatea datelor,
- securitatea şi confidenţialitatea datelor.

Independenţa fizică: un obiectiv esenţial este de a permite realizarea independenţei


structurilor de stocare în raport cu structurile de date din lumea reală.
Se defineşte mulţimea de date indiferent de forma acesteia din lumea reală, ţinând cont
doar de a obţine un acces simplu la date şi a realiza anumite performanţe.

Independenţa logică: fiecare grup de lucru care exploatează baza de date poate să
utilizeze diferite informaţii de bază (nu aceleaşi), pentru a-şi construi entităţi şi relaţii.
Fiecare grup de lucru poate să cunoască doar o parte a semanticii datelor, să vadă doar o
submulţime a datelor şi numai sub forma în care le doreşte.
Independenţa logică a datelor se referă la posibilitatea adăugirii de noi articole sau
extinderea structurii conceptuale, fără ca acesta să impună rescrierea programelor exeistente.

Manipularea datelor de către nespecialişti: aceştia văd datele independent de


implementarea lor şi pot manipula aceste date cu ajutorul limbajelor neprocedurale.
Utilizarea unui limbaj cât mai apropiat de limbajul de limbajul natural permite exploatarea
cu uşurinţă a bazei de date de către utilizatori nespecialişti.

Eficacitatea accesului la date: acest obiectiv are două aspecte.


Dacă accesul la date este efectuat de specialişti (programatori) care cunosc modul de
stocare a datelor, atunci sistemul trebuie să furnizeze limbaje de manipulare a datelor care să
permită atingerea cu uşurinţă a acestui obiectiv.

25
Dacă accesul la date este efectuat de nespecialişti, atunci sistemul trebuie să furnizeze un
limbaj neprocedural care să permită utilizatorului să descrie ceea ce vrea să obţină fără a da
modul în care poate să obţină.

Administrarea centralizată a datelor: presupune definirea structurii datelor şi a modului


de stocare a acestora (se referă la controlul informaţiilor din baza de date).
Administrarea este în general centralizată şi permite o organizare coerentă şi eficace a
informaţiei.

Neredundanţa datelor: fiecare aplicaţie posedă datele sale proprii şi asta conduce la
numeroase dubluri.
De asemenea, organizarea nejudicioasă a relaţiilor poate să genereze redundanţă de date.
Administrarea coerentă a datelor trerbuie să asigure neduplicarea fizică a datelor.
Totuşi, nu sunt expuse nici cazurile în care, pentru a realiza performanţe referitoare la
timpul de acces la date şi răspuns la solicitările utilizatorilor, să se accepte o anumită
redundanţă a datelor.

Coerenţa datelor: informaţia trebuie să satisfacă constrângeri statice sau dinamice, locale
sau generale.
De exemplu, pot fi considerate drept constrângeri:

- apartenenţa la un anumit domeniu,


- un anumit tip de date, de o anumită lungime,
- o anumită cardinalitate a relaţiilor,
- constrângeri referenţiale…etc

Partajabilitatea datelor: obiectivul permite ca aplicaţiile să partajeze datele din bază în


timp şi simultan.
O aplicaţie poate folosi date date ca şi cum ar fi singura care le utilizează, fără a şti că o
altă aplicaţie-concurent le poate modifica.

O tranzacţie este o unitate logică de tratament, care, aplicată la o stare coerentă a bazei,
generează o nouă stare coerentă (modifică baza).

SGBD trebuie asigure gestiunea tranzacţiilor şi a acceselor concurente.


De exemplu, pentru a asigura paralelismul execuţiei tranzacţiilor, este necesară o gestiune a
acceselor concurente şi trebuie asigurat ca execuţia paralelă a tranzacţiilor să dea acelaşi
rezultat ca şi execuţia secvenţială a acestora.
SGBD trebuie să detecteze şi să rezolve cazurile de interblocare, în care una sau mai
multe tranzacţii aşteaptă eliberarea datelor ţinute de celelalte tranzacţii.

Securitatea şi confidenţialitatea datelor: datele trebuie protejate de un acces neautorizat.


Există mecanisme care permit identificarea şi autentificarea utilizatorilor şi există proceduri
de acces autorizat care depind de date şi de utilizator.
SGBD trebuie să asigure securitatea fizică şi logică a informaţiei şi să garanteze că doar
utilizatorii autorizaţi pot efectua operaţii corecte asupra bazei de date.
Aceasta funcţie complexă presupune trei elemente fundamentale:

26
- gestiunea autorizaţiilor: posibilitatea de a controla (crea, suprima, modifica) accesul
utilizatorilor la informaţiile din baza de date şi tipurile de operaţii pe care aceştia le pot
efectua asupra bazei;

- controlul validităţii operaţiilor;

- protecţia datelor împotriva accesului neautorizat (parolă, criptare,..etc) şi în cazul


defecţiunilor (apărute din cauza unor manipulări incorecte, unor incidente fizice sau logice).
Trebuie asigurat un mecanism ce permite menţinerea şi repunerea bazei într-o stare coerentă
în cazul apariţiei unei avarii; operaţiile de modificare a datelor sunt salvate în jurnalul
tranzacţiilor.
Dacă există o pană (fizică), utilizând baza de date în forma actuală şi jurnalul tranzacţiilor,
baza poate să poate să fie reconstituită aşa cum era înaintea avariei.

Limbaje pentru baze de date


În limbajele de programare uzuale, declaraţiile şi instrucţiunile executabile aparţin aceluiaşi
limbaj.
În lumea bazelor de date, funcţiile de declarare şi de manipulare a datelor sunt realizate cu
ajutorul unor limbaje diferite.

Limbaje pentru definirea datelor (LDD)


Descrierea concretă a unui LDD este specifică fiecărui sistem de gestiune, dar funcţiile
principale sunt aceleaşi.
La nivel conceptual, LDD realizează definirea entităţilor şi a atributelor acestora prin
nume, formă de memorare, lungime.
Sunt precizate relaţiile dintre date şi strategiile de acces la ele, sunt stabilite criterii
diferenţiate de confidenţialitate, sunt definite criterii de validare automată a datelor utilizate.

Limbaje pentru manipularea datelor (LMD)


Operaţiile pe baze de date solicită un limbaj specializat, în care comenzile se exprimă prin
faze ce descriu acţiuni asupra bazei de date.
În general, o comandă are următoarea sreuctură:

- operaţia, care poate fi calcul aritmetic sau logic, editare, extragere,


deschidere-închidere, manipulare (introducere, adăugare, ştergere, etc);

- criterii de selecţie (for, while, where, etc)

- mod de acces (secvenţial, indexat…etc);

- formă de editare.

Limbaje pentru controlul datelor (LCD)

27
Controlul unei baze de date se referă la asigurarea confidenţialităţii şi integrităţii datelor, la
salvarea informaţiei în cazul unor defecţiuni, la obţinerea unor performanţe, la rezolvarea unor
probleme de concurenţă.
De exemplu, realizarea unei interfeţe tranzacţionale, într-un context client-server, pentru un
sistem de baze de date distribuite.

Limbaje universale
Un limbaj universal se utilizează rar pentru gestionarea unei baze de date.

Interfaţa dintre un utilizator şi un SGBD poate fi realizată în două moduri:

- cu ajutorul unui mecanism de apel inserat în programul aplicaţie; acest mecanism


poate fi un CALL sau un alt cuvânt cheie, SGBD-ul care permite acest tip de mecanism
se numeşte SGBD cu limbaj gazdă;

- cu ajutorul unor comenzi speciale, utilizate independent; în acest caz, SGBD se


numeşte autonom, dar există o interfaţă specială care este capabilă să interpreteze comenzile
limbajului la cereri.

28
2. Componentele SGBD

Un SGBD are o structură de complexitate variabilă, care depinde de scopul aplicaţiei.


În general, SGBD trebuie să includă cel puţin cinci clase de module:

- programe de gestiune a bazei de date;


- module pentru tratamentul limbajului de definire al datelor;
- module pentru tratamentul limbajului de manipulare a datelor;
- module utilitare care permit o întreţinere corectă şi uşoară a datelor;
- module de control, care permit controlul programelor de aplicaţie ale
utilizatorilor.

Programe de gestiune ale bazei de date (PGBD)


Aceste programe realizează accesul fizic la date ca urmare a unei comenzi; în urma
primirii comenzii sunt parcurse mai multe etape, astfel că ordinul primit (un enunţ din LMD,
sub forma unui cod), care cuprinde numele datei căutate face posibilă găsirea datelor
respective, se extrag aceste date şi sunt plasate în spaţiul de memorie al utilizatorului; apoi
controlul este predat aplicaţiei care va utiliza aceste date corespunzător intenţiei de prelucrare.

Modulele limbajului de definire a datelor (module LDD)


Aceste module permit traducerea (interpretativă sau compilativă) unui limbaj apecial care
realizează descrierea naturii datelor şi a legăturilor logice dintre acestea, fie la nivel global
(schema conceptuală), fie la nivel specific al fiecărei aplicaţii (schemă externă sau subschemă).

Modulele limbajului de manipulare a datelor


Modulele din LMD permit utilizatorilor să manipuleze, modifice, reactualizeze sau să
suprime datele dintr-o bază de date.
Pentru un SGBD cu limbaj gazdă, LMD nu este un limbaj autonom şi comenzile sale
trebuie incluse într-un program scris în limbajul gazdă respectiv.
Pentru un SGBD autonom există un LMD la care se adaugă un limbaj de tratare a
cererilor.
Enunţurile unui sistem autonom pot fi tratate:

- interpretativ – fiecare comandă LMD este interpretată şi apoi executată imediat;


- compilativ – fiecare comandă LMD este compilată şi apoi executată de PGBD;
- prin generare de programe – enunţurile sunt traduse într-un limbaj de programare
şi apoi compilate.

LMD permite căutarea uneia sau mai multor entităţi, căutarea unei entităţi dependente de
alta, parcurgerea tuturor entităţilor, adrea, modificarea şi suprimarea entităţilor existente.

Module utilitare
Un SGBD conţine programe utilitare care permit întreţinerea bazei de date.
Lista acestor programe depinde de complexitatea SGBD.

29
Aceste programe pot executa: încărcarea bazei de date, crearea şi reactualizarea jurnalelor
tranzacţiilor efectuate asupra bazei, reorganizarea structurii fizice şi logice a bazei după o
modificare, etc
Module de control a datelor
Întreţinerea unei baze de date este un punct important şi delicat mai ales într-un cadru
multi-server.
Pentru a conserva informaţia trebuie să existe posibilitatea de a corecta sau preveni anumite
operaţii efectuate de utilizatorii bazei: dacă datele trebuie modificate de o aplicaţie, atunci
această operaţie trebuie să nu se propage sau să nu se interfereze cu alte aplicaţii; dacă mai
multe aplicaţii accesează aceeaşi dată pentru a efectua o operaţie de reactualizare, atunci acest
acces este un pericol pentru integritatea bazei de date.

Arhitectura SGBD
Există o arhitectură SGBD care conţine trei nivele:

- conceptual,
- intern,
- extern.

Nivelul central este nivelul conceptual; aceasta corespunde structurii canonice a datelor ce
caracterizează procesul procesul de modelat, adică structura semantică a datelor fără
implementarea pe calculator.
Schema conceptuală permite definirea tipurilor de date care caracterizează proprietăţile
elementare ale entităţilor, definirea tipurilor de date compuse care permit regruparea atributelor
pentru a descrie entităţile modelului şi legături între aceste entităţi, definirea regulilor pe care
trebuie să le respecte datele etc.

Nivelul intern corespunde structurii interne de stocare a datelor.

Schema internă permite descrierea datelor unei baze sub forma în care sunt stocate în
memoria calculatorului.
Sunt definite fişierele care conţin aceste date, articolele din fişiere, drumurile de acces la
aceste articole… etc.
La nivelul conceptual sau intern, schemele descriu o bază de date.

La nivel extern, schemele descriu doar o parte din date care prezintă interes pentru un
utilizator sau un grup de utilizatori.
Schema externă reprezintă o descriere a unei părţi a bazei de date ce corespunde viziunii
unui program sau utilizator; aceasta permite asigurarea unei securităţi a datelor.

Evoluţia SGBD
Un SGBD este un sistem de programe de bază dintr-un sistem informatic de gestiune care
permite utilizatorilor concurenţi să manipuleze (insereze, modifice, caute) eficient datele
conţinute în baza de date.
Istoria SGBD poate fi rezumată în trei generaţii:

- modele ierarhice şi reţea;

30
- modele relaţionale;
- sisteme avansate: SGBD orientate obiect, SGBD deductive, SGBD
distribuite.
Pentru modele ierarhice şi reţea, datele sunt reprezentate la nivel de articol prin legături
ierarhice (arbore) sau de tip graf.
Slaba independenţă fizică a datelor complică administrarea şi manipularea acestora.
Limbajul de manipulare a datelor impune programatorului să specifice drumurile de acces la
date.

Apariţia modelelor relaţionale (1970) a dus la tratarea entităţilor ca relaţii.


Bazele de date actuale sunt în majoritate sisteme relaţionale.
Bazele relaţionale, concepute pentru aplicaţii în contabilitate, gestiunea stocurilor,..etc, sunt
caracterizate de structuri de date simple, intuitive, constrângeri de integritate, căutarea şi
reactualizarea datelor.
Bazele de date relaţionale nu folosesc obiecte complexe (grafuri, liste…) şi dinamice, nu
realizează gestiunea datelor distribuite şi nici gestiunea cunoştintelor.

31
Chestionar

1. Menţionaţi obiectivele SGBD.

2. În ce constă independenţa fizică a datelor unui SGBD?

3. Dar independenţa logică?

4. De ce trebuie asigurată neredundanţa datelor?

5. De ce trebuie asigurată partajabilitatea datelor?

6. Cun sunt realizate funcţiile de declarare si de manipulare a datelor?

7. Cum se realizează interfaţa dintre un utilizator şi un SGBD?

8. Menţionaţi clasele de module din componenţa SGBD?

9. Care sunt nivelel arhitecturii SGBD?

10. Cum au evoluat SGBD-urile?

32
Curs 4: SGBD: descriere funcţională ( I )

1. Sarcinile SGBD
2. Diagrama entitate relaţie

1. Sarcinile SGBD

Gestiunea datelor a stat în atenţia majorităţii utilizatorilor calcilatoarelor încă de la începutul


folosirii acestora.

La început, datele au fost memorate pe bandă magnetică sub forma unui fişier secvenţial
(colecţie de date); un fişier era construit pentru a rezolva o anumită problemă.

Unele date erau necesare mai multor aplicaţii, deci, aceleaşi date trebuiau memorate în
difetite fişiere; acestă redundanţă a datelor (multiplicarea datelor) poate conduce la erori: o
aceeaşi dată e posibil să fie memorată diferit în fişierele existente (mai ales când datele se
modifică şi acest lucru nu se reflectă identic în fişierele ce o păstrează).
O astfel de situaţie se numeşte şi inconsistenţă a datelor.
Pentru a consulta datele memorate în fişierele secvenţiale se poate folosi numai accesul
secvenţial (pentru a citi o dată trebuie parcurse toate datele precedente).
În momentul apariţiei discurilor magnetice (suporturi adresabile, deci se poate citi de la o
anumită adresă fixată de pe suport) s-au dezvoltat diferite organizări (inversată, indexată,
directă, etc), care permiteau o regăsire a datelor memorate în ele.

Pentru a citi, scrie sau modifica date dintr-un fişier, deci pentru a gestiona acest fişier,
trebuie scrise programe într-un anumit limbaj de programare.

În cadrul programului este necesară precizarea formatului de citire sau scriere din fişier
(trebuie descris articolul care generează fişierul).
Modificarea structurii fişierului (prin adăugarea de date noi, prin eliminarea datelor de care
nu mai este nevoie sau modificarea structurii datelor care rămân) implică şi modificarea
programelor care gestionează acest fişier.

Eliminarea deficienţelor apărute la gestiunea fişierelor (redundanţă, inconsistenţă,


necesitatea descrierii structurii datelor în programele de aplicaţie) a condus la apariţia
bazelor de date.

Acestea au impus o altă viziune asupra colecţiilor de date:

- fiecare dată este memorată într-un singur loc, iar între date pot exista anumite relaţii.
Pentru a nu obliga utilizatorii să gestionaze ei aceste relaţii, există comenzi
(proceduri, funcţii, macroinstrucţiuni) specializate pentru utilizarea relaţiilor şi

33
pentru accesul la date.

- apare o separare între definirea datelor şi utilizarea bazei de date.


Structura datelor este definită o singură dată, ea se memorează în mai multe
Tabele, iar programele care gestionează date vor folosi aceste tabele de
descriere (deci datele nu mai trebuie descrise în programe).

Avănd în vedere aceste considerente, se poate spune că o bază de date conţine:

- o descriere a datelor,
- o colecţie de date aflate în interdependenţă.

Toate aceste date se memorează în unul sau mai multe fişiere, deci se poate considera că
o bază de date este formată dintr-o mulţime de fişiere.

Pentru a gestiona o bază de date sunt necesare programe specializate, care rezolvă
anumite sarcini concrete şi care formează un Sistem de gestiune a bazei de date (SGBD).

Prezentăm succint patru sarcini mari care trebuie să fie rezolvate de SGBD:

1. Definirea bazei de date: aceasta permite, printre altele:

- stabilirea structurii datelor ce se vor memora în baza de date;


- precizarea modului în care se vor memora datele în fisiere.

Aceste informaţii sunt precizate cu ajutorul unui Limbaj de Definire a Datelor (LDD),
prin comenzi diferite (dacă acest tip de limbaj nu există) sau interactiv (utilizatorul răspunde
la diferite întrebări ale sistemului sau completează anumite zone de pe ecran.

2. Manipularea datelor din baza de date, care cuprinde:

- regăsirea (extragerea) datelor memorate în baza de date,


- introducerea (adăugarea) datelor în baza de date,
- actualizarea (ştergerea, modificarea) datelor din baza de date.

Aceste operaţii se precizează în două moduri:

- în modul asistat de sistem: utilizatorul alege diferite variante din mai multe puse la
dispoziţie de sistem,

- în modul programat: scriind un program cu ajutorul unor comenzi dintr-un LMD -


Limbaj de Manipulare a Datelor.
Acest limbaj se poate construi pe baza unuia existent (limbaj gazdă) şi
cunoscut de mulţi programatori, sau acesta poate fi un limbaj autonom.

34
La o aceeaşi bază de date, gestionată de un SGBD, se pot utiliza mai multe LMD, în
funcţie de:

- categoriile de utilizatori: programatori profesionişti, utilizatori ocazionali,…etc;


- tipurile de prelucrări dorite.

Pentru a se uşura munca programatorilor sunt puse la dispoziţia acestora anumite facilităţi:

- generarea automată de rapoarte (tabele, situaţii);


- generarea unor ecrane (ferestre) pentru introducerea sau extragerea de date;

- integrarea mai multor elemente de program (ferestre, meniuri, funcţii, proceduri, etc),
construite şi testate independent, într-o unitate nouă de program;

- asistenţă „help” cu privire la facilităţile sistemului.

3. Administrarea bazei de date: se referă la controlul informaţiilor din baza de date.


Persoana (sau grupul de persoane) care are astfel de sarcini se numeşte administratorul
bazei de date, iar funcţiile îndeplinite formează administrarea bazei de date.
Sarcinile de bază ale administratorului bazei de date sunt:

- Organizarea bazei de date:

- definirea structurii datelor ce vor fi incluse în baza de date,


- stabilirea structurii fizice a bazei de date (fişierele unde se memorează
baza de date şi modul de organizare a acestora,
- încărcarea bazei de date cu informaţiile iniţiale (preluate eventual dintr-o
bază de date mai veche sau din fişiere gestionate în diferite limbaje
de programare).

- Urmărirea funcţionării bazei de date:

- păstrarea cerectitudinii şi actualităţii datelor,


- urmărirea performanţelor bazei de date,
- punerea la dispoziţia utilizatorilor a unor programe care uşurează gestiunea
datelor.

- Reorganizarea bazei de date:

- modificarea structurii bazei de date pentru a cuprinde noi date sau


eliminarea datelor care nu mai sunt necesare,
- rescrierea unor programe de acces la date (pe care le pot folosi
utilizatorii).

35
4. Protecţia informaţiilor din baza de date, care cuprinde:

- protecţia împotriva accesului neautorizat la date,


- protecţia împotriva alterării conţinutului bazei de date datorită unor
programe eronate, defecte ale echipamentelor, distrugeri…

Baza de date poate fi privită în două moduri:

- fizic: ca o colecţie de fişiere secvenţiale, fiecare având o anumită organizare şi


Eventual fişiere asociate celor secvenţiale, pentru a micsora timpul de acces;

- logic: ca o mulţime de „elemente”, conform unui model de organizare.


Aceste elemente pot fi:

- entităţi şi relaţii între entităţi - în modelul entitate-relaţie,


- înregistrări şi legături între înregistrări - în modelul reţea,
- tabele (relaţii) - în modelul relaţional,
- obiecte - în modelul orientat obiect.

Un utilizator priveşte baza de date conform unui astfel de model, el nu trebuie să ştie
toate detaliile cu privire la modul în care se memorează pe suport magnetic.
Utilizatorul doreşte să gestioneze date din baza de date folosind anumite funcţii de bază şi
într-un timp cât mai scurt.
Acest timp depinde de:

- modul în care a fost stabilită structura logică a bazei de date (elementele din cadrul
logic),
- modul în care s-a memorat baza de date (deci structura fizică),
- performanţele SGBD-ului şi a programelor de gestiune oferite de administratorul bazei
de date.

Datorită simplităţii modelului şi uşurinţei cu care poate fi implementat, modelul relaţional


(baza de date este considerată ca o mulţime de relaţii, tabelul fiind considerat, el insuşi o
relaţie) este unul dintre cele mai răspândite în lumea bazelor de date.

Astfel, să luăm în considerare tabelul de mai jos, notat T, care conţine n coloane (în mod
formalizat, le vom numi câmpuri) care au diferite denumiri (atribut, câmp, discriminant,
proprietate, nume de dată, etc) şi m linii (orizontale).

T C1 C2 ………. Cn
.
36
t1 d 11 d 12 …… d 1n

t2 d 21 d 22 …….. d 2n
……… ……… ……… ………. …………
… . .
tm d m1 d m2 ………. d mn

Într-o coloană avem date de un anumit tip, deci câmpul poate lua diferite valori.
Dacă notăm cu Di mulţimea valorilor câmpului Ci, pentru i = 1, 2, 3, ….,n, atunci o
linie din tabel se obţine luând câte o valoare din mulţimile D1, D2, D3, …., Dn, ceea ce
este chiar expresia produsului cartezian:

P = D1 x D2 x D3 x ……. xDn, dij Є Dj, pentru i = 1 ÷ m şi j = 1 ÷ m.

Dar produsul cartezian respectiv este chiar tabelul de date T, care este un model
relaţional (tabelul T fiind o relaţie).

37
2. Diagrama entitate-relaţie

O bază de date poate fi definită ca o mulţime de date ce modelează un univers.


Acest univers este format din obiecte legate între ele.

Obiectele de acelaşi tip constituie o entitate, iar legătura între două entităţi defineşte o
relaţie (asociere).

Entităţile şi relaţiile au anumite caractertistici (atribute).

Procesul de descriere a entităţilor şi a asocierilor este denumit modelare şi este realizat


cu ajutorul unui model de date.

Modelarea unei baze de date permite trecerea de la percepţia unor fapte din lumea reală la
reprezentarea lor prin date; lumea reală este observată la anumite momente de timp, între care
se petrec schimbări ale obiectului (sau fenomenului) ţinut sub observaţie.
Modelul de date trebuie să reflecte fidel fenomene ale lumii reale, să urmărească evoluţia
acestei lumi şi comunicarea între fenomenele respective.
Analiza (modelarea) datelor se desfăsoară conform schemei din figura de mai jos.

Model SGBD

Ierarhic
Reţea
Relaţional
avansat

Diagrama entitate-relaţie nu este un model teoretic de reprezentare a datelor, ci reprezintă


un model neformalizat pentru reprezentarea unor fenomene (unui sistem) din lumea reală.
Diagrama este adeseori utilizată pentru reprezentarea grafică a modelului relaţional.
38
Absenţa unui limbaj de manipulare a datelor bine formalizat, corespunzător acestei
diagrame, face ca alegerea să meargă spre modelul relaţional.
Practic, se construieşte diagrama entitate-relaţie căreia i se asociază modelul relaţional şi
acestuia i se adresează cererile.

În felul acesta se îmbină simplitatea descriptivă a diagramei entitate-relaţie cu puterea


limbajului de manipulare a datelor al modelului relaţional.
Modelul entitate-relaţie împarte elementele unui sistem real în două categorii şi anume
entităţi şi legături (asocieri) între aceste entităţi.

Nu trebuie confundat conceptul de relaţie – în – sensul – asociere, care intervine în definirea


diagramei entitate-relaţie cu conceptul de relaţie care desemnează o comunicare între două sau
mai multe entităţi.

Entitate
Semnifică: persoană, loc, concept, activitate, eveniment, etc, care are un sens pentru ceea
ce modelăm.

De exemplu, considerăm o instituţie formată din mai multe departamente, în care lucrează
salariaţi; acestia sunt ataşaţi la anumite proiecte, executând în cadrul acestor proiecte diferite
sarcini.
Evenimentele semnificative ale modelului analizat şi legăturile dintre acestea sunt
reprezentate în figura următoare.

DEPARTAMENT

PROIECT

DIRECTOR
SALARIAT
SARCINA
PERSONAL

Pentru această diagramă Salariat, Departament, Proiect, Sarcină sunt entităţi.

Observaţii:

39
- Entităţile (scrise cu litere mari, în general) devin tabele în modelele relaţionale.

- Entităţile sunt substantive, dar nu orice substantiv este o entitate.


Trebuie ignorate substantivele nerelevante.

- Pentru fiecare entitate trebuie să se dea o descriere detaliată. De exemplu, un salariat este
orice angajat permanent, funcţionar care lucrează cu jumătate de timp, dar persoanele care au
fost angajate numai pentru un anumit contract nu aparţin acestei entităţi.

- Nu pot exista două entităţi cu acelaşi nume sau o entitate cu două nume diferite.

- Cheia primară identifică unic o entitate şi face distincţie între valori diferite ale
entităţii.
De exemplu, codul salariaţilor este o cheie primară pentru entitatea SALARIAT, dar
numele salariatului nu este o cheie primară, pentru că pot exista doi salariaţi având acelaşi
nume.
Cheia primară tebuie să fie unică şi cunoscută la orice moment.
Cheia primară trebuie să satisfacă următoarele condiţii:

- să fie controlată de administratorul bazei de date;


- să nu conţină informaţii descriptive;
- să fie scurtă, simplă, fără ambiguităţi;
- să fie stabilă, deoarece schimbarea ei poate duce la confuzii;
- să fie familiară utilizatorului astfel încât acesta să o poată folosi cu
uşurinţă.

Relaţie
Reprezintă o comunicare între două sau mai multe entităţi; exprimă un raport care există
între aceste entităţi.

De exemplu,
ataşat_la
reprezintă o relaţie care leagă entităţile SALARIAT şi
PROIECT.
O valoare a unei relaţii este o comunicare între valorile entităţilor care le leagă.
Existenţa unei asocieri este subordonată existenţei entităţilor care le leagă.

Observaţii:

- În modelul relaţional, relaţiile devin tabele speciale sau coloane speciale care referă
chei primare.

- Relaţiile sunt verbe, dar nu orice verb este o relaţie.

40
- Pot exista relaţii diferite cu acelaşi nume; în acest caz le diferenţiază entităţile care sunt
asociate prin relaţia respectivă.

- Pentru fiecare relaţie este important să se dea o descriere detaliată.

- Cardinalitatea relaţiei, adică numărul de tupluri aparţinând unei relaţii este răspunsul
la întrebări de tipul:

a) Câţi salariaţi pot lucra într-un departament? Mulţi !


În câte departamente poate să lucreze un salariat la un moment dat? Cel mult unul !
Deci relaţia „SALARIAT_lucrează în_DEPARTAMENT” este many-one (n : 1).

b) Câţi salariaţi pot conduce un departament? Unul !


Câte departamente poate conduce un salariat? Unul !
Deci relaţia „SALARIAT_conduce_DEPARTAMENT” este one-one (1 : 1).

c) Câţi salariaţi pot fi ataşaţi la un proiect? Mulţi !


La câte proiecte poate fi ataşat un salariat? Multe !
Deci relaţia „SALARIAT_ataşat la_PROIECT” este many-many (n : m).

Valorile (n : 1), (1 : 1), (n : m) reprezintă cardinalitatea maximă.

Dacă în propoziţiile anterioare se înlocuieşte cuvântul „poate” cu „trebuie” se obţin relaţii


de tipul (0 : 1), (1 : 0), (0 : 0), care reprezintă cardinalitatea minimă.

Exemplu:

Câţi salariaţi trebuie să conducă un departament? Cel puţin unul !


Câte departamente trebuie să conducă un salariat? Zero !
Deci relaţia „SALARIAT_conduce_DEPARTAMENT” are cardinalitatea minimă (1 : 0).

Atribut
Este o proprietate descriptivă unei entităţi sau a unei relaţii.
De exemplu, codul salariatului este o caracteristică a entităţii SALARIAT, iar data la care
un salariat este asociat unui proiect este un atribut al relaţiei „ataşat_la”, aşa cum apare şi în
schema de mai jos.

41
SALARIAT SALARIAT PROIECT

cod_salariat
salariu

Observaţii:

- Trebuie făcută distincţie între tipul atributului care uzual devine coloană în modelele
relaţionale şi valoarea acestuia, care devine valoare în coloane.
- Atributele sunt substantive, dar nu orice substantiv este atribut.

- Fiecărui atribut trebuie să i se dea o descriere completă (exemple, contraexemple,


caracteristici).

- Pentru fiecare atribut trebuie specificat numele, tipul fizic, valori posibile, valori
implicite, reguli de validare.

Într-o diagramă entitate-relaţie:

- entităţile sunt reprezentate prin dreptunghiuri;


- relaţiile dintre entităţi prin arce de cerc neorientate;
- atributele care reprezintă chei primare trebuie subliniate
- cardinalitatea minimă este indicată în paranteze, iar cardinalitatea maximă fără paranteze;
- nu trebuie specificate toate atributele.

42
Chestionar

1. Cum au fost memorate datele la început?

2. Care au fost deficienţele a căror înlăturare a dus la apariţia bazelor de date?

3. Care este conţinutul bazelor de date?

4. Ce anume formează un SGBD?

5. Care sunt sarcinile rezolvate de un SGBD?

6. Ce cuprinde manipularea bazelor de date?

7. Care sunt sarcinile administratorului bazei de date?

8. Care sunt modurile în care este privită o bază de date (BD)?

9. Care sunt modelele de organizare a BD, din punct de vedere logic?

10. Cum se descrie un model relaţional?

11. Cum definim modelarea?

12. Cum definim entitatea şi relaţia?

43
Curs 5: Baze de date orientate obiect (BDOO)

1. Principiile modelării obiectelor


2. Caracteristicile bazei de date orientate obiect

1. Principiile modelării obiectelor

Bazele de date relaţionale, care în anii `90 acopereau 70% din piaţa bazelor de date,
oferă prea puţin suport pentru tipurile neconvenţionale de date.
Necesitatea gestiunii obiectelor complexe (texte, grafice, hărţi, imagini, sunete etc) şi a
gestiunii obiectelor dinamice (programe, simulare, ..etc), care nu pot fi realizate cu ajutorul
sistemelor relaţionale, a condus la introducerea conceptului de obiect în tehnologia sistemelor
informatice.

Bazele de date orientate obiect (BDOO) permit crearea unor obiecte complexe din
componente mai simple, fiecare având atribute proprii şi comportament specific.

Înglobarea conceptului de obiect în tehnologia SGBD a generat producerea unor SGBD


orientate obiect (SGBDO).
Aceste sisteme combină posibilitatea de definire şi manipulare a structurilor complexe de
date cu funcţionalitatea unui limbaj de programare şi tehnologia de gestiune a bazelor de date.
Modelarea orientată obiect încearcă să integreze principiile limbajelor de programare
orientate obiect (Smalltalk, C++, Java) şi a bazelor de date, pentru a rezolva problema interfeţei
limbaj de programare – SGBD, pentru a oferi un limbaj unic şi general.

Există tendinţe, fie de a extinde SGBD pentru a suporta obiecte complexe cu funcţii
speciale pentru manipularea datelor, fie de a dezvolta limbajul de cereri în jurul unui SGBD
clasic.
O soluţie bună este crearea unui SGBD relaţional care să suporte majoritatea principiilor
modelării orientate obiect.

Comparativ cu un SGBD relaţional, un SGBDO oferă funcţionalităţi superioare referitoare


la:
- modelarea dinamică a obiectelor;
- organizarea schemei sub forma unei ierarhii de clase;
- modelarea obiectelor complexe şi a obiectelor de dimensiuni mari (multimedia);

44
- utilizarea unui limbaj unic pentru programarea întregii aplicaţii;
- gestiunea dinamică a schemei;
- gestiunea versiunilor de obiecte.

Limbajul de bază al acestor sisteme este un limbaj procedural (C, Smalltalk, LISP) extins
prin posibilităţi obiect.
De asemenea, folosirea unor cereri declarative (de exemplu, de tip SQL) într-un SGBDO
permite optimizarea acceselor (exprimate prin predicate ce leagă colecţii de date).
Cu toate avantajele incontestabile oferite de SGBDO, impunerea lor pe piaţă nu este
uşoară.
Cele mai importante cauze sunt:

- Absenţa unei fundamentări teoretice face imposibilă definirea unui SGBDO de referinţă.
În consecinţă sistemele, modelele de date şi limbajele sunt diversificate, iar evaluarea
lor este dificilă din cauza lipsei unor criterii precise.

- Problema performanţelor, care este inerentă oricărei tehnologii moderne, este încă
nerezolvată.

Sistemelor relaţionale le-au trebuit mai mult de zece ani pentru a obţine performanţele
actuale. Gestiunea obiectelor complexe şi persistente accesate prin programe generale este o
problemă mai dificilă decât accesul la relaţii prin cereri SQL.
Tehnicile de optimizare legate de extinderea standardului SQL, problema concurenţei în
cazul tranzacţiilor lungi (o tranzacţie de concepţie poate să dureze câteva ore) sunt doar la
început de drum.

- Utilizatorii au învestit sume uriaşe în sistemele relaţionale şi nu le pot abandona cu


uşurinţă.
Trecerea la noua tehnologie orientată obiect implică investiţii mari şăi nu păstrează
aproape nimic din vechile soluţii.

Modelele de date orientate obiect (MDOO) au fost create pentru a modela lumea reală.
De exemplu, limbajul C++ a fost dezvoltat pentru a crea modelul unui sistem telefonic.
Principalele concepte care stau la baza unui MDOO sunt:

- obiectul,
- clasa,
- încapsularea,
- persistenţa,
- moştenirea,
- polimorfismul,
- colecţia.

Obiectul
Este conceptul fundamental al MDOO.

45
Într-un MDOO, orice entitate din lumea reală este un obiect şi reciproc, orice obiect
reprezintă o entitate a lumii reale.

Un obiect este un grup de date structurate, identificate printr-o referinţă unică.

Un obiect are un identificator, adică o referinţă unică, atribuit obiectului în momentul


creării sale.

Identitatea obiectului este acea proprietate a sa care îl deosebeşte fizic şi logic de alte
obiecte.
Identitatea obiectului este o adresă logică invariantă.
Două obiecte sunt identice dacă au acelaşi identificator; notăm acest lucru astfel:

O1 = = O2

Două obiecte sunt egale dacă au aceeaşi valoare, dar două obiecte care au aceleaşi valori
dar identificatori diferiţi sunt diferite.
Acest fapt este total opus bazelor de date tradiţionale, în care tuplurile se identifică prin
valorile lor.

Un obiect poate referi un alt obiect.

De exemplu, obiectul vehicul V1 referă obiectul motor M1, iar persoana P1 referă
obiectul vehicul V1.
Obiectele sunt caracterizate prin anumite proprietăţi.

Un atribut este o proprietate (caracteristică) a unui obiect referită printr-un nume şi care
corespunde fie unei valori, fie unei referinţe a altui obiect.

Orice atribut poate fi gândit ca o funcţie, care, aplicată unui obiect, generează fie un alt
obiect, fie una sau mai multe valori.

Tipuri şi clase
Oricare dintre obiectele unei baze de date orientate obiect are o identitate care este
independentă de valorile atributelor sale.
Spre deosebire de modelul relaţional, care utilizează unicitatea cheii primare pentru a
identifica tuplul, MDOO permite modificarea valorilor oricărui atribut, fără a-i afecta
identitatea.

Fiecare instanţă sau realizare a obiectului are un identificator obiect care este
independent de valorile atributelor sale.

Într-un MDOO, tipul sintetizează elementele comune ale unei mulţimi de obiecte cu aceleaşi
proprietăţi.
Un tip de date abstract cuprinde o reprezentare ascunsă a obiectului şi o mulţime de
funcţii abstracte vizibile din exterior; tipul are două componente: interfaţa (vizibilă pentru
utilizator) şi implementarea (obiectul activităţii proiectantului, presupunând descrierea structurii

46
interne a datelor obiectului şi realizarea procedurilor pentru implementarea operaţiilor
interfeţei).

Clasa este o mulţime de obiecte având aceleaşi proprietăţi, caracterizată printr-o structură
şi printr-o mulţime de operaţii care se pot aplica obiectelor clasei.

Clasa corespunde definirii unui tip abstract, iar clasa, ca şi tipul abstract, specifică
structura unei mulţimi de obiecte, precum şi comportamentul acestora.
Clasa este caracterizată de trei elemente: o descriere, un protocol şi o mulţime de
metode.

Descrierea constă într-o mulţime de date comune, protocolul este reprezentat de o mulţime
de mesaje la care vor răspunde obiectele (clasei de obiecte) şi metode (procedură asociată
unei clase care manipulează un obiect sau indică starea unui obiect).

Încapsulare
Un obiect este manipulat prin metodele clasei sale (căreia îi aparţine, ca instanţiere a clasei
respective).
Metodele şi atributele nu sunt vizibile din exteriorul obiectului; doar interfaţa acestuia poate
fi vă de utilizatori sau de alte obiecte.

Obiectele comunică prin mesaje; mesajele reprezintă cereri adresate obiectului pentru a
returna o valoare sau pentru a-i schimba starea.
Mesajele constituie interfaţa obiectului cu mediul, indicând unul sau mai multe obiecte şi
metoda ce se aplică acestora.

Principiul încapsulării ascunde obiectele şi codul metodelor asociate şi lasă vizibile doar
metodele constituind interfaţa obiectului, adică imaginea funcţională a acestuia.

Persistenţa
Este o proprietate a datelor sau a obiectelor care presupun existenţa mai îndelungat acestora
faţesul care l-a creat.
Este proprietate prin care starea bazei de date asigură execuţia unui proces care poate fi
refolosit ulterior în alt proces.

Polimorfism
Se referă la faptul că, la primirea unui mesaj, stabilirea metodei care se aplică se face în
mod dinamic în funcţie de clasa obiectului în cauză.
Adică, acelaşi mesaj, primit de o mulţime eterogenă de obiecte, poate să ducă la
comportamente diferite ale obiectelor respective.

Colecţia
Uneori este necesară gruparea unei mulţimi de obiecte pentru a forma o proprietate; acesta
se realizează cu ajutorul colecţiilor.

47
Dintre principalele colecţii de tipuri amintim:

- tuplul: permite referirea grupată a atributelor;


- mulţimea: permite definirea de mulţimi neordonate fără dubluri;
- tabloul: permite definirea de mulţimi ordonate şi indexate;
- lista: permite definirea de mulţimi ordonate cu dubluri.

2. Caracteristicile bazei de date orientate obiect

Un obiect persistent este un obiect stocat în baza de date, care are o durată de viaţă mai
mare decât a programului care l-a creat.

Un obiect tranzitoriu este un obiect depus în memorie, a cărui viaţă nu depăşeşte durata
de viaţă a programului care l-a creat.

Baza de date orientată obiect este o organizare coerentă de obiecte persistente, partajate
de utilizatori concurenţi; BDOO este rezulatul aplicării tehnologiei orientate obiect în
domeniul stocării şi regăsirii informaţiilor.

Schema unei BDOO trebuie să includă definiţiile structurale (atribute şi tipuri) şi


comportamentale (metode) ale obiectelor (fiecare obiect fiind generat de o clasă):

Schema unei BDOO = {clase + asocieri între clase}

Schema bazei BDOO constă din toate clasele care au fost definite pentru o aplicaţie
particulară.

Schema bazei de date poate fi modificată dinamic în funcţie de necesităţile utilizatorilor.


Pot fi identificate două tipuri de schimbări ale schemei unei BDOO:

- schimbări referitoare la structura ierarhiei de clase, care includ adăugarea sau


ştergerea unei clase şi schimbarea relaţiilor dintre clase;

- schimbări referitoare la modul de definire a unei clase, care includ schimbările


atributelor şi metodelor definite pentru o clasă (de exemplu, schimbarea numelui sau
domeniului unui atribut, adăugarea, ştergerea unui atribut sau a unei metode).

Un SGBDO trebuie să îndeplinească cerinţele unui SGBD şi să fie, în plus, un sistem


orientat obiect.

Aceste două criterii generează o mulţime de caracteristici ale unui SGBDO.

Caracteristicile obligatorii ale unui SGBDO sunt:

48
- Manipularea obiectelor şi a colecţiilor de obiecte (obiecte complexe).
Un constructor este o funţie asociată unei clase care permite crearea şi iniţializarea unui
obiect (în memorie); un destructor este o funcţie asociată unei clase care permite distrugerea
unui obiect.
Noţiunea de obiect complex a apărut prin aplicarea de constructori asupra obiectelor simple.

- Persistenţa obiectelor
Obiectele pot persista mai mult decât programul care l-a creat.
SGBDO trebuie să furnizeze funcţii pentru manipularea (crearea, distrugerea, activarea…)
obiectelor persistente.
Aceste operaţii sunt parţial sau total transparente programatorului, în funcţie de tehnica
folosită pentru gestionarea persistenţei.
Calitatea unui obiect de a fi sau nu persistent depinde de tipul obiectului; această calitate
se defineşte cu ajutorul unui cuvânt cheie (de exeplu, persistent) sau prin referirea sa de către
un alt obiect persistent
Proprietatea de persistenţă este asociată direct obiectului şi nu clase sale.

- Concurenţa acceselor
BDOO poate să fie partajată simultan de către tranzacţiile care o cosultă şi o modifică.

- Fiabilitatea obiectelor
Obiectele trebuie restaurate, în cazul unei defecţiuni, la starea pe care au avut-o înainte de
defecţiune.

- Identitatea obiectelor
Orice obiect trebuie să aibă un identificator sistem.

- Extensibilitate
SGBDO trebuie să includă, pe lângă clasele sau tipurile predefinite (clasa obiect, clasa dată
etc) şi instrumente care să permită utilizatorului definirea de noi clase şi tipuri.

Un SGBDO se bazează pe două tehnologii:

- bazele de date şi
- limbajele orientate obiect.

În funcţie de combinarea acestor două tehnologii, există diferite moduri pentru a concepe
un SGBDO.

Prezentăm trei abordări, în continuare.

1. Extinderea unui SGBD relaţional şi a limbajului de interfaţă cu conceptul de obiect.


Se realizează o extensie a standardului SQL care suportă conceptul obiect şi implicit
se extinde algebra relaţională (ceea ce permite exprimarea cererilor SQL printr-un graf al
operaţiilor elementare).

49
Este ideea propusă de sistemul de gestiune ORACLE, versiunea 8.

2. Extinderea care pleacă de la un limbaj orientat obiect, care este mărit pentru a permite
definirea schemei BDOO şi scrierea unor programe aplicaţie care includ apeluri ale SGBDO.
Este tehnica folosită de sistemul ObjectStore cu C++ şi GemStone cu Smalltalk.

3. Contrară tehnicilor precedente este abordarea integrată care nu se bazează pe extinderea


modelului relaţional sau a limbajului obiect.
În acest caz, sistemul de gestiune suportă un nou model care integrează conceptele
semantice şi obiectul.
Sistemul integrat poate fi independent de orice limbaj de programare şi poate oferi o
interfaţă multilimbaj.
Arhitectura SGBDO este descrierea exactă a organizării sistemului, în scopul de a
prezenta componentele funcţionale şi interfeţele dintre acestea.
Componentele de bază ale arhitecturii SGBDO sunt:

- programele utilitare,
- limbaje (de definire, de manipulare, de cereri, interfeţe),
- gestiunea obiectelor

În figura de mai jos este prezentată schema arhitecturii SGBDO.

Utilitare pentru dezvoltarea de aplicaţii

Limbaj de Limbaj de Limbaj de LP01 PL02 Alte


definire manipulare cereri interfeţe

Administrator
de obiecte

Server de
obiecte

Stoc rezident
de obiecte

50
Interfaţa dintre limbajele de programare orientate obiect (LPO) o reprezintă limbajul pentru
baze de date.
Pentru un SGBD clasic, limbajul pentru baze de date permite definirea şi manipularea
schemei bazei de date şi a datelor.
Pentru SGBDO, limbajul pentru baze de date permite accesul şi manipularea modelului de
date obiect, regăsirea şi actualizarea datelor.

Administratorul obiectelor asigură interfaţa dintre procesele externe şi SGBDO; el permite


definirea structurilor şi executarea operaţiilor specificate prin modelul de date obiect.

Serverul de obiecte realizează refacerea, inserţia, ştergerea şi actualizarea obiectelor ce se


găsesc în stocul rezident de obiecte.
Chestionar

1. Ce a dus la introducerea conceptului obiect în tehnologia sistemelor informatice?

2. Care este specificul BDOO - BD orientate obiect?

3. Care sunt fucţionalităţile superioare aferite de SGBDO?

4. De ce au fost create modelele de date orientate obiect - MDOO?

5. Cum definim obiectul?

6. Dar atributul obiectului?

7. Cum definim clasa?

8. Cum definim BDOO?

9. Care sunt caracteristicile obligatorii ale unui SGBDO?

10. Care sunt tehnologiile pe care se bazează SGBDO?

11. Care sunt componentele de bază ale arhitecturii SGBDO?

51
Curs 6: Programarea calculatoarelor. Elemente fundamentale

1. Instructiune. Program
2. Sisteme de calcul : RISC, CISC
3. Programare liniara, modulara, structurala

1. Instructiune. Program

Pentru a lucra, un computer trebuie sa primeasca sarcinile respective, exprimate intr-un mod
pe care el le poate intelege corect, pentru a le rezolva rapid si corect.
Modul in care computerul intelege ceea ce trebuie facut este sa i se adreseze fractiuni din
sarcina pe care trebuie sa o rezolve, inseriate una dupa alta, aceste fractiuni ale sarcinii fiind
prezentate intr-un cod accesibil.

Computerul este proiectat si realizat pentru a executa un numar de instructiuni, fiecare


instructiune constand dintr-o secventa de biti, in numar bine precizat, fiecare bit din
componenta acestei suite avand importanta lui.

Totalitatea instructiunilor executabile direct de un computer formeaza limbajul cod masina.

Cel care da de lucru computerului (programatorul) trebuie sa exprime problemele (pe care
vrea sa le rezolve cu ajutorul computerului) intr-o succesiune de instructiuni (pe care le poate
executa computerul) care apartin limbajului cod masina.
Indiferent de tipul computerului, forma generala a unei instructiuni, cu cele doua campuri
ale sale (cod-operatie si deplasament), pe care o poate executa este prezentata mai jos:

0 1 0……… 0 1 0 1 0 0← serie de n biti


n locatii binare → I_I_I_............................._I_I

Cod-operatie Deplasare

52
Deoarece unitatea de informatie dintr-un computer este cuvantul, instructiunea va fi
continuta intr-unul sau mai multe cuvinte, in functie de modul in care a fost proiectat
computerul.

Campul denumit „cod operatie” a fost descris si i se cunoaste semnificatia; campul denumit
„deplasament” este cel care va specifica operandul sau lanţul de operanzi implicati in derularea
instructiunii respective, dar poate semnifica si adresa la care poate fi gasit operandul sau
adresa la care se gaseste adresa (si ciclul poate continua de un numar de ori, in general intre
3 ÷ 5) la care se va gasi, in final, operandul.
deplasament

Procesorul – CPU executa fiecare instructiune printr-o serie de pasi mici, pe care ii
prezentam fara a intra in detalii:

- se transfera instructiunea care urmeaza din memorie in registrul de instructiuni CPU;


- se incrementeaza contorul program (PC – program Counter) pentru a indica urmatoarea
instructiune
- dezvoltarea instructiunii in comenzi interioare si comenzi exterioare;
- ducerea din memorie a operanzilor;
- executa instructiunea, trecandu-se la executarea urmatoarei instructiuni.

Aceasta secventa de pasi este denumita ciclul extrage-decodifica-executa (fetch-decode-


execute), fiind ciclul esential in functionarea oricarui computer.

Daca instructiunile apartin unui alt tip de limbaj decat limbajul masina se poate concepe
un program care sa interpreteze acele instructiuni si sa le aduca in forma de executare.
Acest program se numeste interpreter si este larg folosit.

Computerele mai vachi aveau seturi de instructiuni restrânse si simple.


Incercarile de a construi computere tot mai puternice au condus la instructiuni individuale
tot mai puternice, mai complexe.
Instructiunile mai complicate au fost mai bune, deoarece uneori executiile unor operatii
individuale se por suprapune sau pot fi executate in paralel, folosind echipamente diferite.
Computerele de inalta performanta au ajuns sa aiba mult mai multe instructiuni decat
computerele ieftine, pentru care pretul era mai important decat viteza de executie a
instructiunilor.
La sfarsitul anilor `50, IBM (Industrial Business Machine), compania care domina total
piata computerelor, recunoscand avantajele dezvoltarii unei singure familii de computere care sa

53
execute aceleasi instructiuni, a introdus termenul de arhitectura (architecture) pentru a decsrie
caest nivel de compatibilitate.
Familia de computere avea aceeasi arhitectura dar mai multe implementari diferite, capabile
sa execute acelasi program, diferente existand doar privitor la pret si viteza de executie.
Tehnica folosirii interpreterelor, care traduceau instructiunile complexe in instructiuni mai
simple, executabile direct pe computere mai ieftine a dus la crearea arhitecturii IBM
System/360, o familie de computere compatibile.
Calculatoarele mai simple, cu instructiuni interpretate aveau mai multe avantaje, dintre care
prezentam pe scurt cateva:

- posibilitatea de a corecta pe loc instructiunile incorect implementate sau de a


rezolva deficiente de proiectare ale hardware-ului de baza;
- posibilitatea de a adauga noi instructiuni;
- testarea si documentarea eficienta a instructiunilor complexe.

Cresterea rapida a capacitatilor de prelucrare (perioada anilor `70) a favorizat proiectarea


computerelor care foloseau interpretoare de instructiuni.
In paralel cu aceste schimbari, softul si limbajele de programare au avut, de asemenea o
evolutie ascendenta.

Revenind la definitia instructiunii, putem preciza: mai multe instructiuni formeaza un


program.

Pentru a fi direct executabil, programul trebuie sa fie scris in limbajul cod masina (in
forma sa numerica) sau in limbajul de asamblare (colectie de mnemonici – instructiuni, care
corespund fiecare in parte, cu instructiunile cod masina), caz in care va fi tradus in limbaj cod
masina de programul numit asamblor.

Limbajul de asamblare a fost creat pentru a se putea scrie programele folosind instructiuni
denumite prin litere si nu prin cifre, cum este cazul limbajului cod masina.

Daca este scris intr-un alt limbaj, acesta va fi tradus (translatat) de compilator (un alt
program care are aceasta functie de a gasi echivalentele respective) si adus in forma
executabila.

Redefinim, aici, cele doua notiuni: program sursa – programul scris intr-un limbaj evoluat
(mai apropiat de felul de exprimare naturala a omului) si programul obiect – programul
rezultat dupa compilarea programului sursa (se mai numeste si program direct executabil).

Dupa cum se stie, mai multe date (data fiind un simbol la care se adauga semnificatia
acestuia) pot furniza o informatie; computerele, prin programele lor executa prelucrari de date,
ajungand sa scoata in evidenta informatii.
Majoritatea computerelor de astazi prelucreaza date, foarte putine prelucrand informatii,
acestea fiind computere pe care lucreaza programe uriase, numite sisteme expert.
Prin anii `80, cercetatorii preocupati cu problema inteligentei artificiale (IA) au creat
primele pachete de programe, prin executarea carora, cautau sa se apropie de inteligenta umana.

54
Un sistem expert este un program care raspunde unor intrebari sau rezolva probleme dintr-
un domeniu specific al cunoasterii, folosind reguli logice care deriva din experienta expertului
uman, pe care se strduieste sa-l imite.
Au fost obtinute rezultate incurajatoare in domeniul medical, in strategia comunicarii, dar au
fost repede descoperite lacune grave in functionarea acestora, in primul rand dependenta
puternica a solutiilor date, de marimile care se prezinta la intrarea sistemului.
Desi nu au fost intrerupte cercetarile in domeniu, rezultatele, in ansamblu, nu au corespuns
asteptarilor.
Deci, in privinta prelucrarilor informatiilor (asa cum se prelucreaza datele) vor trebui
asteptate schimbari majore in primul rand in tehnologie si apoi in strategia soft care trebuie sa
le urmareasca pentru a corespunde.
Au aparut in schimb notiuni noi legate de programare, in special de limbajele de
programare, cu aplicatii in economie, stiinta si tehnologie.

2. Sisteme de calcul: RISC – Reduced Instructions Set Computer si CISC – Complex


Instructions Set Computer

In anul 1980, un grup de cercetatori de la Berkeley – California au introdus termenul de


RISC (Computere cu set redus de instructiuni) proiectand procesoare diferite de cele existente
pe piata in acel moment si care nu erau compatibile cu acestea.
Faptul ca nu trebuiau sa respecte compatibilitatea cu produsele existente le-a creat libertatea
de alegere a noi seturi de instructiuni care sa maximizeze performanta globala a sistemului de
calcul.
Caracteristica principala a acestor procesoare noi era numarul mic de instructiuni disponibile,
in general cam 50, in loc de 200 ÷ 500, cate aveau celelalte.
Proiectantii sustineau ca modul cel mai bun de a realiza un computer era sa ai un numar
redus de instructiuni simple, care sa se execute intr-un singur ciclu, si anume extragerea a
doua registre, combinarea lor intr-un mod oarecare si depozitarea rezultatului intr-un alt
registru.
Firma Sun Microsystems, intre anii 1980 si 1987, a definitivat arhitectura SPARC – Scalable
Processor ARChitecture, care se bazeaza pe tehnologia RISC, prin care se implementau numai
instructiunile de baza, cele mai semnificative si mai utilizate.
Aceasta tehnologie a permis construirea unor computere foarte puternice, care permiteau
prelucrarea paralela a mai multor aplicatii.
In opozitie cu computerele RISC erau computerele CISC (computere cu set complex de
instructiuni) si care erau cele mai raspandite.
Chiar daca masina RISC avea nevoie de de patru sau cinci instructiuni pentru a face ce
facea masina CISC intr-o instructiune, daca instructiunile RISC sunt de 10 ori mai rapide decat
instructiunile CISC (in principal pentru ca nu sunt interpretate), masina RISC va castiga.
Trebuie subliniat faptul ca viteza de lucru a memoriei interne a crescut (datorita
tehnologiei) si acest fapt a marit avantajul computerelor RISC.
Tehnologia CISC a fost adoptata pentru primele arhitecturi de calculatoare, cand
procesoarele devenidera capabile sa execute peste 400 de instructiuni, fiecare instructiune fiind
efectuata intr-un numar determinat (dar diferit) de cicluri simple.
Desi avantajele performantelor oferite de tehnologia RISC este evidenta, majoritatea
computerelor existente pe piata sunt de tipul CISC, dar ele incorporeaza multe din principiile
pe care le-au evidentiat computerele RISC.

55
Proiectantii de computere trebuie sa urmareasca cu atentie schimbarile pe care le aduce
tehnologia; de exemplu, daca viteza de lucru a memoriilor ar creste de 10 ori, ar deveni chiar
mai rapide decat CPU, ceea ce ar impune o totala reconsiderare a arhitecturii computerelor.
In permanenta se urmareste atingerea performantelor prin realizarea de compromisuri, mai
ales datorita constrangerilor (limitarilor) de tot felul, in primul rand cerinta compatibilitatii cu
niste arhitecturi deja existente (aceasta a fost linia de dezvoltare si a hard-ului si a soft-ului,
adica noile produse aparute trebuiau sa permita si functionarea programelor concepute tinand
cont de dotarea veche a computerelor)
Astfel, s-au stabilit conditii pe care instructiunile unui nou procesor trebuie sa le respecte,
din acestea vom cita cateva:

- toate instructiunile sunt executate direct de catre hardware, deci fara interpretare;
- instructiunile trebuie sa fie usor de decodificat, sa aiba un format fix, cu un numar
mic de campuri si cu dimensiuni prestabilite;
- doar instructiunile de citire si de scriere in memorie trebuie sa acceseze memoria,
operanzii fiind transferati in registre destinate acestui scop.
Proiectantii de computere cauta sa imbunatateasca continuu performantele acestora, una din
solutii fiind si paralelismul in executarea instructiunilor.
Acesta consta in executarea mai multor instructiuni in acelasi timp; de aici se obtine si o
crestere a vitezei de prelucrare, la o frecventa a ceasului computerului (frecventa interna) data.
Paralelismul apare in doua forme generale:

- la nivelul instructiunilor si
- la nivelul procesorului.

In prima, paralelismul este exploatat in cadrul instructiunilor individuale, pentru a face


computerul sa lanseze in executie mai multe instructiuni pe secunda; in cea de-a doaua forma
de paralelism, mai multe CPU-uri lucreaza impreuna la rezolvarea aceleiasi probleme.
Fiecare dintre cele doua abordari are anumite avantaje care au dus la stabilirea de
tehnologii soft si hard moderne.
Paralelismul la nivelul instructiunilor a dus la aparitia notiunilor de banda de asamblare a
instructiunilor (instructions pipeline) si computere superscalare (arhitecturi superscalare), adoptata
de mai toate computerele moderne.
Prezentam schema unui procesor superscalar cu cinci unitati functionale (s1 ÷ s5)

56
UAL 1

Unitate Unitate Unitate UAL 2


extragere Decodifi Extragere Unitate
instructiuni care Inst. operanzi scriere
rezultate
LOAD

STORE

Unitate
Virgula
mobila

Ideea procesorului superscalar este ca segmentul s3 poate lansa instructiunile mult mai
repede decat le poate executa segmentul s4, deoarece toate unitatile functionale din acest
segment au nevoie de mai mult timp decat un ciclu de ceas pentru a-si termina treaba (pot
exista mai multe UAL-uri - unitati aritmetice si logice)

Paralelismul la nivelul procesorului aduce mai mari cresteri ale vitezei de executie.
Multe din problemele din domeniul stiintelor au o structura foarte regulata, adesea aceleasi
calcule fiind repetate pe seturi diferite de date in acelasi timp, ceea ce face potrivite pentru
procesarea paralela.
Pentru a executa rapid programe stiintifice de dimensiuni mari au fost folosite doua
metode, desi foarte asemanatoare:

- extensie pentru un procesor (multiprocesoare) si


- calculator paralel (multicalculatoare).

Multiprocesorul este primul sistem paralel cu mai multe procesoare (CPU) complet folosite,
partajand o memorie comuna, coordonate prin soft (sistem de operare) pentru a nu exista
conflicte in procesare.
Prezentam, mai jos, schema corespunzatoare multiprocesorului:

UCP UCP UCP UCP MEMORIE

57
Multiprocesoarele cu un numar mic de procesoare sunt relativ usor de construit, cele cu
mai mult de 64 de procesoare ridica multe probleme legate de accesul la memorie.
De aceea au fost construite sisteme cu mai multe computere, numite multicalculatoare.
Redam, mai jos, schema unui multicalculator (multiprocesor):

Memorie Memorie Memorie Memorie


1 2 3 4

CPU CPU CPU CPU Memorie


partajata

CPU-urile comunica intre ele prin mesaje trimise de la unul la altul, acestea trecand de la
un CPU la altul pana isi atinge destinatia, timpii de transmisie fiind destul de mici.
S-au realizat multiprocesoare cu sute de mii de procesoare si se testeaza unitati cu peste un
milion de procesoare.
Pentru ca multiprocesoarele sunt usor de programat si multicalculatoarele sunt usor de
construit se cerceteaza proiectarea unor sisteme hibride care sa combine avantajele amandorura.
3. Programare liniara, modulara, structurala

Aparitia primelor calculatoare electronice a constituit un mare salt in directia automatizarii


activitatilor umane.
La inceput, calculatoarele au fost programate in limbaj masina, activitate foarte dificila care
a dus rapid la inventarea limbajelor de asamblare si apoi, a celor evoluate (din ce in ce mai
apropiate de limbajul natural al omului).

Dar, limbajele evoluate nu au dus automat la cresterea eficientei muncii de programare.

Cresterea complexitatii programelor elaborate pentru problemele diferitelor domenii ale


activitatii umane, precum si necesitatea obiectiva a modificarii, adaptarii acestor programe la
conditiile noi, aflate intr-o continua schimbare, ale vietii sociale au fost factori care au
ingreunat suplimentar munca de programare.
Cresterea performantelor calculatoarelor, raspandirea acestora si folosirea lor in toate
domeniile de activitate au marit complexitatea problemelor pe care trebuia sa le rezolve
calculatorul.
Ca exemple de programe complexe mentionam sistemele de operare, compilatoarele,
sistemele de gestiune ale bazelor de date.
Aceasta crestere a complexitatii problemelor a avut doua urmari: a trebuit sa se treaca de la
programarea liniara (scrierea secventiala a instructiunilor) de catre un singur programator, la
organizarea unor colective de specialisti in analiza si programare pe de o parte si la schimbarea

58
strategiei muncii de programare, la cautarea unor modalitati adecvate de specificare a
problemelor.
Chiar termenul de program (programare) a suferit schimbari in scurta istorie a informaticii.

Prin anii `60, prin program se intelegea transcrierea unui algoritm (exprimat in termenii
unor scheme logice) intr-un limbaj de programare.
Acum se pune problema scrierii unor pachete (sisteme) de programe pentru a se rezolva o
problema complexa in orice domeniu de activitate.

Odata cu aparitia limbajului FORTRAN – 1956, datorita posibilitatii de folosire a


subalgoritmilor (subdiviziuni ale algoritmilor) in programare si compilarea lor separata, apare
si programarea modulara.
Mai departe, compilarea separata a dus la aparitia bibliotecilor de programe, o
componenta importanta a programelor sistem.

Programarea modulara consta in descompunerea unei probleme complexe (exprimata


printr-un algoritm principal) in subprobleme, fiecareia corespunzandu-i un subalgoritm (modul).

Algoritmul de rezolvare al intregii probleme va fi obtinut prin asamblarea acestor


subalgoritmi (module).

Problema care a impiedicat sistematizarea mai multor module de program consta in


numarul mare de instructiuni GO TO (salt la o alta adresa, pentru executarea unei alte
secvente de program si revenirea la secventa principala).

Edsger Dijkstra, in anul 1968, a propus modalitatea programarii structurate, care urmarea
printre altele si eliminarea folosirii instructiunii de salt GO TO, sustinand ca logica unui
program este o structura compusa din substructuri similare, modurile lor de combinare fiind
limitate ca numar.
Mai precis, el a aratat si ulterior s-a demonstrat ca orice schema logica a unui program
poate fi formata utilizand trei structuri logice (baza programarii structurate):

- secventiala sau liniara;


- structuri de selectie – alternative si
- structuri iterative – iterative.

Programarea structurata este adeseori asociata cu perspectiva sus/jos (top/down) asupra


structurii logice a programului (insemnand ca inceputul secventei program este deasupra, sus si
parcurgerea se face liniar coborand, pas cu pas).
Incepand din 1970, programarea structurata a devenit foarte populara, poate datorita si
limbajului de programare Pascal, care era in acea perioada destul de raspandit.
Limbajele de programare care pot fi folosite cu usurinta pentru programarea structurata sunt:
ALGOL, Pascal, PL/I, ADA.
Acceptarea programarii structurate nu a fost unanima, dar majoritatea cercetatorilor din
domeniu o considera ca fiind o solutie buna si care trebuie urmata.
Mai mult, limbaje vechi, care nu aveau facilitatile programarii structurate, au fost revizuite
si adaptate programarii acestor structuri, cum sunt FORTRAN, COBOL, BASIC.
Programarea structurata este considerata ca un premergator al programarii orientata pe obiect.

59
Chestionar

1. Cum definim instrucţiunea?

2. Ce înseamnă limbajul cod masină?

3. Care este forma generală a unei instrucţiuni?

4. Ce semnifică câmpul de biţi cod-operaţie?

5. Dar deplasament?

6. Ce înseamnă program?

7. Care este rostul limbajului de asamblare?

8. Ce înseamnă program sursă şi program obiect?

60
9. Cum se definesc computerele RISC şi CISC?

10. Cum definim programarea liniara, modulara şi structurată?

11. Care sunt structurile logice care formează baza programării structurate?

Curs 7: Limbaje de programare

1. Limbaje de programare: componente


2. Limbaje de programare: cod-maşimă, assembler, evoluate
3. Evoluţia limbajelor de programare

1. Limbaje de programare: componente si sintaxa

Un limbaj de programare este un limbaj artificial care exprima operatii specifice (logice,
aritmetice, computationale – relative la computere) ce pot fi realizate de un computer.

Cu ajutorul limbajelor de programare se creeaza programe care pot fi executate de un


computer; ele permit omului sa se adreseze computerului in vederea rezolvarii unor probleme.
Limbajele de programare contin termeni (combinatii de simboluri, alese cat mai apropiate
de termenii limbajului natural) cu o anumita semantica (intelesuri, semnificatii), termeni care
se pot compune in anumite forme, prin respectarea unor reguli apartinand sintaxei.
Deosebim deci, in cadrul oricarui limbaj de programare, cele doua componente:

- semantica: sensurile combinatiilor de simboluri (termeni) si


- sintaxa: regulile de compozitie ale acestor termeni.

61
Multe limbaje sunt textuale, folosind secvente de texte care cuprind cuvinte, numere, semne
de punctuatie…., toate asemanatoare celor din limbajul natural; altele sunt mai mult grafice,
folosind legaturile vizuale dintre simboluri pentru a crea un program.
Odata ce datele sunt specificate, computerul trebuie sa primeasca instructiunile – modul cum
sa procedeze cu aceste date.

Semantica (semnificatia continutului de termeni ai limbajului) defineste strategia prin care


anumite expresii capata anumite valori si care sunt etapele de transformare (prelucrare) a
acestora.

Termenii limbajului de programare vor fi alesi depinzand de domeniul problemelor pe care


le imbratiseaza limbajul respectiv, existand o mare varietate a limbajelor.

Nu exista nici o clasificare a limbajelor de programare, in afara datarii lor calendaristice


(anul de aparitie) care constituie generatiile de limbaje de programare si eventual dupa gradul
de raspandire.

Crearea limbajelor a fost, de cele mai multe ori, impusa de schimbarea modului de
abordare a lucrului cu computerul dar si de evolutia generala a societatii umane (din toate
punctele de vedere).

Intre evolutia generatiilor de calculatoare si a limbajelor de programare exista o legatura


absolut explicabila.

Din cele cinci generatii ale limbajelor de programare, le prezentam succint pe primele patru
grupe, urmand apoi prezentarea evolutiei generatiilor de limbaje, asa cum au fost tratate de
specialisti in acest domeniu.
- Limbaj masina
Aportul omului este in proportie de peste 90%.
Instructiunile si datele sunt reprezentate prin digiti binari (a serie de 1 si 0).
Programele puteau fi executate numai pe masina pentru care au fost scrise.

- Limbaj de asamblare
El are la baza un set de mnemonice care sunt reprezentari simbolice ale reprezentarile
masina.
Asamblorul translateaza aceste mnemonice in binar astfel incat sa poata fi intelese si
realizate de computer.
Ambele tipuri de limbaje sunt mai mult tehnice si flexibile dar foarte putin prietenoase.

- Limbje procedurale
Sunt numite si limbaje de nivel inalt, sunt flexibile si destul de prietenoase cu utilizatorul.
Nu depind de masina si, deci au un grad mare de portabilitate.

Instructiunile lor sunt cuprinse in liste de pasi sau proceduri si ne arata ce trebuie sa
facem si cum trebuie sa facem fiecare operatie.

Importanta acestor limbaje este recunoscuta prin aria lor de aplicabilitate: calcule stiintifice,
economice …etc.

62
Astfel, o sumara trecere in revista a celor mai reprezentative este necesara:

FORTRAN (FORmula TRANslation) este inca cel mai raspandit limbaj de


programare.
Aparut in 1956, a avut diferite versiuni de-a lungul timpului.
Implementarile pe diferite sisteme nu sunt identice si de aceea portabilitatea sa este relativ
coborata.
Pentru computerele personale (PC), produsul cel mai des utilizat este cel al firmei
Microsoft.

BASIC (Beginner`s All Purpose Symbolic Instruction Code) conceput in 1964 pentru
nespecialisti a cunoscut o explozie spectaculoasa in perioada `75 ÷ 80 odata cu aparitia
microinformaticii.
A cunoscut diferite versiuni, dar cele mai recente (Quick Basic al firmei Microsoft, Turbo
Basic al firmei Borland) sunt utilizate cu succes pentru dezvoltarea diferitelor aplicatii.

Cobol (Common Business Oriented Language) este regele informaticii de gestiune.


Dezvoltat in 1958, a cunoscut diferite versiuni, cele mai recente fiind implementate pe
microcalculatoare; de exemplu, Microsoft ofera un compilator sub sistemele de operare MS-DOS
si OS/2.

PASCAL, aparut in 1970 este un concurent serios al BASIC-ului deoarece are


implementate instrumentele de programare structurata.
De asemenea, el poseda facilitati de recursivitate a procedurilor si lucrul cu structuri de
date proprii complexe, cum ar fi: liste, tablouri, structuri dinamice.
Actualmente, exista versiuni pentru prelucrarea orientata pe obiecte.

C, creat in 1970 pentru scrierea unor parti ale sistemului de operare UNIX, are cateva
paradoxuri:
- este de nivel scazut, efectuand operatii rezervate in general limbajelor de
asamblare,
- este limbaj evoluat deoarece trateaza toate structurile utilizate in
programare,
- este structurat si permite descompunerea oricarei probleme intr0o suita
de sarcini elementare care genereaza module simple,
- nu dispune, in general, de functii de calcul si de I/O, acestea fiind
asigurate de o biblioteca vasta.
Versiunile actuale sunt normale sau profesionale (Turbo C, Borland) si sunt furnizate
impreuna cu un mediu complet de programare.

RPG (Report Program Generator) a fost introdus de IBM in 1964 pentru a genera
rapoarte economice si a tine la zi fisierele de date.
A cunoscut si el diferite versiuni ajungandu-se ca acesta sa extraga rapoarte dintr-un sistem
de baze de date.
Modula-2 dezvoltat de Niklaus Wirth (1980) este mai bun decat limbajul Pascal pentru
a rezolva probleme economice si poate fi utilizat ca instrument de dezvoltare a software-ului
aplicativ.
Deoarece este un limbaj relativ nou, aria lui de raspandire este destul de restransa.
Din aceasta generatie mai fac parte o serie de limbaje (ADA, PL/I, ….), compilatoarele si
interpretoarele.

63
Limbaje neprocedurale
Acestea cunosc o dezvoltare continua si viitoare.
Ele sunt de nivel foarte inalt, cu elemente imperative.

Programele sunt compuse din definitii descriptive primare ale unui set de relatii si/sau
functii.

Tot aceasta generatie contine si instrumente/medii de dezvoltare software.


Ele sunt pachete software complexe oferind utilizatorului nu numai un serviciu directionat
ci si facilitati suplimentare.

Pachetele nu mai pot fi clasificate strict si riguros, insa dam o clasificare de la simplu la
complex. Astfel exista:

- instrumente PC: dBASE IV, Framework, Supercalc, Symphony,….


- limbaje orientate pe problema: Intelect, Quick Query, SQL, ORACLE,

- generatoare de rapoarte: Gis, Marck IV, NOMAD,…
- sisteme de suport decizional si limbaje de planificare financiara: FCS,
Metaphor, Stratagem, Express, aplicatii de sistem,….
- generatoare de aplicatii pentru utilizatori: Focus, Fusion, Powerhouse,…
- generatoare de aplicatii pentru profesionisti: UFO, INFO, CSP,
Speedware…

PROLOG (PROgramming Logic) creat in anul 1973, este un limbaj destinat


realizarii sistemelor expert.
El nu este procedural ci descriptiv si i se prevede o larga raspandire odata cu aparitia
calculatoarelor din generatia a cincea.

LISP (LISt Processing Language) numit uneori „Limbaj Inteligent cu Stupide


Paranteze” are trei atuuri puternice:
- frumusetea formala a programelor,
- structuri variate si profunde,
- caracteristici proprii care il fac adecvat informaticii de viitor.
A inceput sa patrunda si pe calculatoare personale dar el se „simte” cel mai bine in
problemele de inteligenta artificiala (IA) si tratarea limbajelor naturale.

64
2. Limbajele de programare: cod-maşină, assembler, evoluate

Programele care convertesc un program scris de catre utilizator/programator intr-un limbaj


de programare, in alt limbaj se numesc translatoare.
Limbajul in care este scris initial programul se numeste limbaj sursa, iar limbajul la care
se face conversia se numeste limbaj tinta (limbaj destinatie).
In acelasi timp, programul scris in limbajul sursa se numeste program sursa, iar programul
care poate fi executat de procesor, dupa ce este translatat corespunzator se numeste program
obiect.
Daca ar exista un procesor care sa execute instructiunile continute de un program sursa,
atunci nu ar mai fi necesara translatarea.
Cand limbajul sursa este o reprezentare simbolica pentru un limbaj masina (numeric),
translatorul se numeste asamblor (assembler), iar limbajul sursa se numeste limbaj de asamblare.
Cand limbajul sursa este un limbaj de nivel inalt (C, C++, Java… etc) si limbajul destinatie
este fie limbajul masina, fie o reprezentare simbolica pentru acest limbaj, translatorul se numeste
compilator.

65
Limbajul de asamblare este un limbaj in care fiecare instructiune produce o singura
instructiune masina, existand o corespondenta directa “unu la unu” intre instructiunile limbajului
masina si cele ale limbajului de asamblare.
Limbajul cod-masina (pe scurt, limbaj masina) este o colectie de coduri exprimate in
hexazecimal si este singurul sistem de coduri care poate fi citit si executat de procesor.
Limbajul de asamblare este uneori folosit de unii programatori pentru ca este mult mai usor
de folosit deoarece este compus din nume simbolice si adrese simbolice si din o insiruire de
cifre cum este limbajul masina.
Instructiunile limbajului de asamblare au patru parti:

- camp de etichete – folosite pentru a da nume simbolice adreselor de memorie si


unor instructiuni executabile, pentru a permite saltul la instructiuni;
- camp operatie – opcode – codul instructiunii sau o comanda pentru asamblor;
- camp de operanzi;
- camp de comentarii.

Compilatoarele si asambloarele translateaza in general cate o procedura a unui program la


un moment dat; fiind mai multe proceduri intr-un program, toate procedurile trebuie “legate”
impreuna (referintele la adresele de memorie trebuie sa fie puse in concordanta), acest lucru
facandu-l un program numit editorul de legaturi.
Traducerea completa a programului sursa in program obiect necesita doua etape:

- compilarea sau asamblarea procedurilor sursa;


- editarea legaturilor pentru modulele obiect.
Prima etapa este realizata de compilator sau asamblor, iar cea de-a doua de catre editorul
de legaturi.
Fiecare procedura este translatata separat pentru a se putea interveni si modifica daca va fi
necesar, rezultand cate un modul pentru fiecare procedura.
Apoi, editorul de legaturi realizeaza legaturile pentru toate modulele, rezultand programul
obiect, asa cum arata schema de mai jos:

66
Pentru a “lega” modulele, editorul de legaturi le aduce in memoria interna pentru a forma
imaginea programului obiect, de a construi o imagine exacta a spatiului de adrese virtual al
programului si de a pozitiona toate modulele obiect la locatiile corecte.
Editorul de legaturi uneste spatiile separate de adresa, deoarece fiecare modul obiect
formeaza un spatiu separat de adresa; se compune tabela modulelor obiect, in care se specifica
numele modulului, lungimea si adresa de start a fiecaruia.
Tabela modulelor, consuderand ca avem patru module notate A, B, C, D arata asa:

Modul lungime Adresa de start


A 400 100
B 600 500
C 500 1100
D 300 1600

Modulele obiect contin sase parti (in general):

Prima parte contine numele modulului, anumite informatii necesare pentru editorul de
legaturi.

Partea a doua este o lista a simbolurilor definite de modul, pe care alte module le
pot apela, impreuna cu valorile lor; programatorul trebuie sa declare in limbaj de asamblare
care dintre simboluri sunt puncte de intrare (entry points).

Partea a treia contine o lista de simboluri care sunt utilizate in modul, dar care sunt
definite in alte module, impreuna cu o lista a instructiunilor masina care folosesc aceste
simboluri; programatorul in limbaj de programare indica ce simboluri sunt declarate ca
simboluri esterne (external symbols).

Partea a patra este lista instructiunilor si a unor constante necesare prelucrarii; aceasta
parte este singura care se incarca in memorie pentru a fi executata. Celelalte cinci parti sunt
utilizate de editorul de legaturi si apoi eliminate inainte de inceperea executiei.

Partea a cincia este dictionarul de relocare, necesar pentru calcularea unor adrese.

Partea a sasea este o indicatie de sfarsit de modul, folosit si pentru a descoperi


eventuale erori de citire a modulului.

Redam mai jos schema unui modul obiect:

67
Cele mai multe editoare de legaturi necesita aceste doua treceri, prezentate.
In prima trecere editorul de legaturi citeste toate modulele obiect si construieste o tabela a
lungimilor si numelor modulelor, si o tabela de simboluri, constand din toate punctele de
intrare si referintele externe.
In a doua trecere modulele obiect sunt citite, relocate si sunt editate legaturile in cate un
modul la un moment dat.

3. Evolutia limbajelor de programare

Referirea la limbajele de programare prin „generatii” ale lor este motivata, printre altele, si
de evidentierea cresterii puterii de prelucrare ale datelor.

Termenii de „prima” si „a doua” generatie de limbaje de programare nu au fost folosite


pana nu s-a precizat asa-zisa generatie a treia.

Prima generatie (1GL) - inainte de 1940 - limbaje de programare au existat inainte sa


apara computerele, constand din coduri (numerice si apoi alfa-numerice pentru limbajul de
asamblare) care puteau fi „citite” cu ajutorul unor dispozitive mecanice, fiecare avand o
anumita semnificatie.
Herman Hollerith a folosit pentru prima data (in 1890) cartele perforate pentru a reprezenta
un sistem de coduri (au fost folosite de serviciul de strangere si evidenta a taxelor).
68
Primele calculatoare, din primele decade ale secolului XX, foloseau sistemul de numeratie
zecimal pentru realizarea calculelor, datele fiind codificate prin pozitiile diferite ale unor repere
mecanice (roti dintate, parghii,…).
Cand s-a descoperit ca logica poate fi reprezentata si prin numere (0 si 1) nu numai prin
cuvinte (DA, NU), s-a trecut la folosirea sistemului binar in reprezentarea datelor si in
codificarea actiunilor ce trebuiau desfasurate intr-o anumita ordine.
Programarea era in realitate o codificare.
In anii `40 au aparut primele dispozitive de calcul realizate cu relee electromagnetice si
problema programarii a luat o alta turnura, aparand limbajele masina (serie de coduri care
realizau, fiecare in parte, anumite activitati), prefigurandu-se cea de-a doua generatie de limbaje
de programare.
Acum apare si conceptia revolutionara a lui von Neumann, care a considerat ca datele
trebuie introduse in memorie (in forma binara), dar si programul, constituit din secvente de
instructiuni reprezentate prin coduri in forma binara, trebuia introdus in memorie, in asa fel
incat s-a definit structura von Neumann a calculatorului (aceasta „structura” fiind denumita de
specialistii IBM cu termenul „arhitectura”, ramas in vigoare si acum).
Printre limbajele dezvoltate in aceasta perioada, au fost:

1943 – ENIAC - masina de calcul, pentru care setul de instructiuni masina a fost pus
la punct in anul 1948;
1949 – 1954 - au aparut seturi de instructiuni mnemonice, incepand cu C-10 pentru
calculatorul BINAC (devenit UNIVAC).

Aceasta generatie a fost ulterior reconsiderata ca fiind generatia limbajelor cod masina, iar
generatia a doua considerata generatia limbajelor de asamblare.
Limbajul cod masina este limbaj de „nivel scazut” (low level), cu un foarte scazut nivel
de abstractizare (scriere a instructiunilor intr-un fel care sa nu aibă legatura directa cu
calculatorul), fiind strict legat de modul de functionare al calculatorului.

Instructiunile in limbaj masina sunt direct executabile, deci nu este necesar compilatorul
pentru a traduce aceste instructiuni, pe cand instructiunile scrise in limbajele evoluate (high
level) nu pot fi executate decat daca sunt traduse de catre compilator si aduse intr-o forma
care sa poata fi executabila (programul sursa – scris intr-un limbaj oarecare este compilat
pentru a fi adus intr-o forma executabila, care se numeste program obiect).

Instructiunile erau introduse de la panoul central al calculatorului, prin manevrarea unor


intrerupatoare.
Avantajul acestui mod de programare era ca programul era executat rapid, fiind preluat si
executat direct de CPU.
Marele dezavantaj era ca acest limbaj era foarte greu de folosit, confuziile erau frecvente si
erorile pe masura.
Daca trebuia introdusa o noua instructiune in secventa de instructiuni deja constituita,
trebuiau mutate toate instructiunile de mai jos pentru a crea loc, ceea ce era foarte dificil.

A doua generatie (2GL) – anii `50, este generatia limbajelor de asamblare.


Termenul „asamblare” a fost introdus pentru a face distinctia intre generatia a treia si
primele doua generatii.
Instructiunile se puteau scrie si citi de catre un programator, iar programul astfel obtinut
trebuia tradus in instructiuni cod masina pentru a fi executabile.

69
Adresele de memorie erau reprezentate simbolic, astfel incat in zone diferite de memorie se
introduceau instructiunile, datele de intrare si datele rezultate dupa prelucrare.
Acest limbaj este specific fiecarui procesor, deci nu putea rula decat pe calculatoare din
aceeasi familie.
Limbajul de asamblare mai este folosit si acum pentru scrierea unor portiuni din
programele pe care le contine kernelul (esenta sistemului de operare) sau pentru scrierea unor
parti din sistemul de programe al compilatoarelor.

Generatia a treia (3GL) - este urmasa fireasca a generatiei a doua, de la care a preluat
structurarea logica a softului, construind limbaje de programare care s-au despartit de hard si
aveau o forma mai apropiata de limbajul uman.
Nivelul inalt (high level) al limbajelor indica distanta fata de caracteristicile calculatorului,
munca programatorului fiind independenta de tipul procesorului.
Instructiunile compuneau programul respectiv (programul sursa) care trebuia sa fie tradus in
limbajul cod masina pentru a fi executate.
Limbajele de programare aparute in aceasta perioada sunt:

- FORTRAN (1955),
- LISP (1958),
- COBOL (1958).

In aceeasi perioada a fost elaborat si limbajul ALGOL, care a impus noi concepte:

- blocuri complexe continand secvente de instructiuni si de date,


- fiecare bloc putea avea variabile, proceduri separate, invizibile pentru alte
blocuri,
- scrierea limbajului folosind notatii matematice, forma Backus-Naur (Backus-
Naur Form – BNF), pentru sintaxa, linie pastrata de celelalte limbaje
aparute ulterior.

Multe din programele scrise acum folosesc limbaje din a treia generatie, existand seturi de
programe de asistenta, care ajuta programatorul sa scrie instructiunile.
Alte limbaje aparute in aceeasi perioada (aproximativ) sunt: SIMULA – 1962, CPL – 1963,
BASIC – 1964, PL/I – 1964, BCPL – 1967 limbaj care a constituit baza dezvoltarii limbajului C.
In perioada 1967 ÷ 1978, a limbajelor de programare, s-au stabilit paradigmele fundamentale
ale limbajelor de programare.
Astfel limbajul SIMULA, inventat in anul 1962 cu intentia de a surclasa limbajul ALGOL,
a fost primul limbaj proiectat sa suporte programarea orientata obiect.

Generatia a patra (4GL) - (1970 ÷ 1990) o formeaza limbajele care tintesc dezvoltarea
software-ului comercial, avand un grad superior de abstractizare, o mai mare putere de
reprezentare si calcul (calculatoarele au devenit foarte performante sub aspectul hardului).
Se considera de catre istorici ai limbajelor de programare ca aceasta generatie a avut ca
scop principal pregatirea generatiei a cincea, care a impus concepte de mai mare abstractizare.

70
Deoarece metodele de programare tipice generatiei III de limbaje erau greoaie si oricand
supuse aparitiei erorilor, s-a cautat o metodologie care sa inlature sursa erorilor si sa faca din
programare o treaba mai putin complicata si care sa necesite un efort mai mic.
S-au investit mari sume pentru proiectarea de limbaje sistemice, care incorporau constructii
logice performante, interesul pentru programarea sistemelor (programarea la scara mare –
programming in the large) prin folosirea modulelor sau a unitatilor de cod organizationale la
scara mare fiind trendul acesyei perioade.
Miscarea RISC – Reduced Instructions Set Computers din arhitectura computerelor a dus la
concluzia ca hardul RISC trebuie sa fie proiectat pentru compilatoare, viteza marita a acestor
computere fiind baza dezvoltarii tehnologiei de compilare a limbajelor de foarte mare nivel.
Limbajele acestei generatii au fost comparate cu limbajele de programare specifice unui
domeniu: DSL - Domain-Specific Programming.
In anii `70, se foloseau maximum 72 de coduri pentru datele de intrare, obtinute prin
combinarile bitilor unui octet, suportul de informatie cel mai folost fiind cartela perforata.
Daca limbajele generatiei III urmareau codul procedural, in sensul ca limbajul definea
functii care urmareau secventa de instructiuni – procedura, stabilind „ce trebuie facut”, fara sa
puna problema datelor care urmau sa fie prelucrate, limbajele generatiei IV erau non-
procedurale.
Aceste limbaje puneau acccent pe „modul de a face” ceea ce trebuia facut, de aici
aparand noi concepte care au schimbat viziunea asupra softului.
Au aparut limbaje noi de programare cu o alta viziune asupra ideei de prelucrare a datelor
pe care limbajele din generatia III le mostenise.
Limbajul C, primul limbaj de programare sistemic, a fost dezvoltat de Laboratoarele Bell
intre anii 1969 ÷ 1973, limbajul Smaltalk – 1972 este limbajul care pune bazele limbajului
orientat obiect; limbajul Prolog – 1972, primul limbaj de programare logic.
In aceasta perioada s-au pus si bazele programarii structurate.
Toate limbajele mentionate au dus la aparitia unei multitudini de limbaje care au dezvoltat
principiile stabilite in aceasta perioada.
Alte limbaje importante aparute in aceasta perioada: Logo – 1968, Pascal – 1970, C – 1972,
Smaltalk – 1972, PROLOG – 1972, SQL – 1978.
In general aceste limbaje se grupeaza, dupa domeniul de folosire, astfel:

-de uz general: FoxPro, Clipper, DataFlex, IBM Rational EGL – Enterprise Generation
Language, Panther, Xbase++,….

-limbaje pentru secvente de baze de date: FOCUS, SQL, Progress 4GL, NATURAL,
Ingres 4GL,….
-generatoare de raport: Quest, RPG-II, LINC, ….

-analiza si manipularea datelor: DASL, IDL, LANSA, IGOR Pro, MATLAB, MARK-IV,
SQR, R, Ramis, …

-creatoare de GUI – Graphical User Interface: eDeveloper, Omnis Studio, OpenROAD, …

Generatia a cincea (5GL) - este compusa din limbaje de programare care se bazeaza pe
folosirea unor constrangeri aplicate programelor si nu folosind algoritmi care descriu
desfasurarea unui fenomen oarecare.
Scopul noilor limbaje de programare este rezolve problema data fara programator, prin
reutilizarea si dezvoltarea celor existente.

71
Este urmarita si dezvoltarea conceptelor legate de inteligenta artificiala, logica fuzzy si
retelele neuronale.
Nu au aparut noutati in limbajele imperative, dar s-au produs recombinari si maturari ale
ideilor vechi.
Toate schimbarile realizate au fost orientate obiect: Object-Pascal, Virtual Basic, Java…
Limbajul Java a inceput sa joace un rol important in abordarea programarii sistemelor
complexe.
Evolutia limbajelor de programare continua prin aplicarea lor in industrie si cercetare,
trendurile curente incluzand:

- mecanisme pentru adaugarea verificarii securitatii si sigurantei limbajelor: control


static
extins, control al fluxului de informatii,…
- metaprogramarea: accesul si folosirea sintaxei arborescente abstracte, tip arbore,
- integrarea cu bazele de date,
- dezvoltarea softului prin orientare – component, baza dezvoltarii ingineriei
programarii - software engineering.

In 1990, generatia V de limbaje era considerata a fi noul val al dezvoltarii software,


trecandu-se de la obiect-soft la component soft si aparand conceptul de ingineria programarii
– software engineering.
Se considera ca singurul limbaj care nu va putea fi inlocuit este limbajul cod masina, toate
celelalte ar putea fi inlocuite cu limbaje pentru dezvoltarea sistemelor
Instrumentele (tools) de lucru ale acestor limbaje constau din limbaje apartinand generatiei
IV, carora li se incorporeaza sisteme de legaturi (wizards) tip RAD – Rational Aplication
Development sau CASE – Computer Aided Software Engineering, elemente de asistenta grafica
care usureaza construirea codurilor.
Exemple ale limbajelor celei de-a cincea generatie de limbaje: PROLOG, Mercury, ICAD –
bazat pe limbajul LISP, C# (pronuntat Si – sharp), F#, Windows Power Shell,..

Chestionar

1. Cum definim limbajul de programare?

2. Care sunt componentele unui limbaj de programare?

3. Ce defineşte semantica?

72
4. Ce a impus crearea de noi limbaje de programare?

5. Care este caracteristica esenţial limbajelor procedurale?

6. Din ce sunt compuse programele scrise în limbaje neprocedurale?

7. Cum se defineşte compilatorul?

8. Ce motivează referirea la generaţiile de limbaje de programare?

Curs 8: Metode de programare

1. Metode de programare: introducere


2. Metode clasice de elaborare a produselor program
3. Programare orientată obiect

1. Metode de programare: introducere

In dezvoltarea software exista doua abordari ale scrierii programelor:

- marea programare sau programarea in mare (programming in the


large) si

73
- mica programare sau programarea in mic (programming in the small),
termenii aparand prima data intr-o carte scrisa de Frank De Remer si
Hans Kron, in anul 1970.

Exista o diferenta intre modul in care este creat un program si modul in care este creat un
sistem de produse program.

Programul este scris de un singur programator, in timp ce sistemul de produse program


este creat de o echipa consistenta de specialisti, deoarece se ocupa de proiecte mari din
industrie, a caror durata poate fi estimata la luni sau ani de zile.

De la grupurile implicate in derularea proiectului rezulta module de program cu interfete


pregatite sa permita interconectarea lor pentru a asigura functionalitatea sistemului intreg.
Deci, „programarea in mare” inseamna programe mai mici scrise de programatori diferiti,
ceea ce impune necesitatea de a avea limbaje de programare specializate pentru tipul de
„programare in mic”, si nu limbajul comun de programare care exista acum.
De asemenea, trebuie sa existe un limbaj pentru interconectarea modulelor asigurand astfel
functionarea sistemului.
Un limbaj proiectat pentru programare in mare este limbajul BPEL.
Programarea modulelor trebuie sa realizeze o buna coeziune interioara legaturi de cuplaj
foarte slabe care sa-i asigure un grad marit de independenta.
Pana cand un modul este terminat el ramane o abstractiune, dupa ce sunt terminate si
interfata este apta sa realizeze conexiunile dintre ele rezulta arhitectura finala a sistemului.
Programarea in mic semnifica lucrul unui singur programator sau a unui grup restrans de
specialisti, pentru o perioada de timp redusa: zile sau saptamani.
Se poate aborda si problema crearii unui prototip soft care sa poata fi reutilizat dupa unele
modificari, deoarece dezvoltarea rapida a softului este mai importanta decat stabilitatea
produsului soft.

Mediu de programare
Oricine studiaza programarea trebuie sa-si aleaga un mediu de programare (programming
environment) care face posibila programarea, dar si testarea programului.
Acest mediu de programare poate fi divizat in doua tipuri foarte diferite:

- mediul de programare integrat (integrated development environment- IDE) si


- mediul de programare pe linia de comanda (command-line environment).
Mediul de programare integrat este un program - interfata grafica care integreaza toate
aspectele programarii, plus unele facilitati (depanarea – debugger, constructor de interfata
vizuala, manager de proiect).
Astfel, programatorul isi scrie programul instructiune cu instructiune si este corectat de
fiecare cand are o eroare care afecteaza una sau mai multe instructiuni (el nu este singur, ci
are in „jurul” sau acest mediu care participa la munca lui).

Mediul de programare pe linia de comanda este constituit dintr-o colectie de de comenzi


care efectueaza partial ceea ce face primul tip de mediu de programare.

In general este recomandat pentru incepatori sa foloseasca un mediu de programare pe linia


de comanda, celalalt mediu fiind indicat pentru programatorii avansati, deoarece poate sa ajute
la conducerea unui proiect de mari dimensiuni.

74
De exemplu, pentru Java, toate mediile de programare necesita un compilator, programe de
editare de legaturi si o cale de a executa aplicatii tipice acestui limbaj.

1. Programarea declarativa – Declarative programming


Programarea declarativa este o metoda de programare care exprima logica prelucrarii datelor
fara a tine cont de fluxul de comenzi – instructiuni.

Limbajele care aplica principiul acesta descriu ceea ce programul trebuie sa indeplineasca
si nu modul (cum) in care indeplineste un anumit lucru.

Aceasta metoda este in contradictie cu metoda imperativa de programare care impune


descrierea si respectarea pas cu pas a unui algoritm, constituit in prealabil.
Programarea declarativa considera programele ca teorii ale logicii formale, iar prelucrarea ca
deductii realizate in spatiul logic.
Aceasta metoda a devenit cautata in vremurile actuale, ca o simplificare a programarii
paralele (executarea in paralel a mai multor programe simultan prin mai multe CPU ale unui
singur computer sau mai multe calculatoare cuplate, lucrand in paralel).
Uneori programarea declarativa este considerata a fi orice programare care nu este
imperativa, programele obtinute prin aceasta metoda descriind ce prelucrare a datelor trebuie
realizata si nu cum se prelucreaza datele.
In categoria limbajelor care apartin acestei metode sunt:

- programarea functionala,
- programarea logica,
- programarea folosind limbaje specifice unui domeniu (Domain-specific
languages).

Programarea functionala – Functional programming


Este metoda de programare care trateaza prelucrarea datelor ca o evaluare a unor functii
matematice si evita starile si fluctuatiile datelor.
Este scoasa in evidenta aplicarea functiilor matematice, in contrast cu programarea
imperativa care se bazeaza pe schimbarea starilor.
Functia depinde doar de valoarea argumentului [valoarea functiei F(x) va depinde numai de
valoarea pe care o are argumentul x] si pe aceasta constatare se bazeaza dezvoltarea
programarii functionale; aceasta nu a cunoscut forme comerciale, fiind folosita mai mult in
mediile academice.
Un limbaj care favoriza programarea functionala este LISP, desi acest limbaj se preteaza
mai multor metode de programare.
IPL- Information Processing Language este citat ca fiind primul limbaj pe care se
bazeaza programarea functionala.
Au aparut mai multe limbaje propice acestei metode de programare, dar sunt si limbaje
„universale” care pot fi folosite conform acestei metode de programare.

Programarea folosind limbaje specifice unui domeniu (Domain-Specific Language)

75
In dezvoltarea software un limbaj specific unui domeniu este un limbaj de programare
dedicat unui domeniu particular, si care nu poate fi folosit eficient in afara acestui domeniu,
acesta fiind principala lui caracteristica.
Conceptul nu este nou, au existat aproape in permanenta limbaje cu scop special (special-
purpose programming languages), dar expresia a devenit populara datorita aparitiei notiunii
de „modelare in domeniu specific” - domain-specific modeling, folosit in programarea orientata
obiect (OOP – object oriented programming), precum si in Ingineria programarii/Software
engineering.
Exemple de astfel de limbaje sunt; Logo pentru copii, Verilog si VHSIC – limbaje pentru
descriere hardware, limbajele R, S, Q pentru statistica, SQL pentru cozi in baze de date
relationale,…
Limbajele opuse (ca scop) sunt:

-limbajele cu scop general al programarii – general-purpose programming language,


ca C or Java,

-limbaj de modelare cu scop general – general-purpose modeling language, cum ar fi


UML- Unified Modeling Language.

Crearea un limbaj pentru un domeniu specific, cu software care sa-l ajute (compilatoare,
editoare de legaturi, biblioteci cu programe utilitare, …) poate fi binevenita daca limbajul
permite sa fie exprimate anumite probleme si solutiile acestor probleme mult mai clar decat
intr-un oricare alt limbaj cu scop general.

2. Programarea bazata pe fluxul de date – Dataflow programming


Aceasta metoda implementeaza principiile si arhitectura tipice fluxului de date si modeleaza
un program ca pe un graf al fluxurilor de date intre mai multe operatii.
Limbajul de programare a fluxului de date are caracteriticile unui limbaj functional si a
fost conceput sa aduca ceva functional intr-un limbaj potrivit mai mult pentru procesarea
numerelor.
Limbajul este directionat catre „modul cum se conecteaza lucrurile”, diferit de limbajul
imperativ care se ocupa de „modul in care se petrec lucrurile”.
Programarea calculatoarelor, in general, trebuie sa tina cont de notiunea de „stare”, definita
de valoarea la un moment dat a unor parametri variabili ai sistemului cercetat.
Multe limbaje de programare necesita o mare cantitate de date (informatii) pentru a opera
cu eficienta, informatii care sunt invizibile pentru programator.
Limbajele bazate pe fluxuri de date sunt proiectate considerand fluxul de date componenta
cea mai importanta a programului.
Limbajele mai vechi sunt concepute in ideea prelucrarii datelor prezentate la intrare si
depozitarea rezultatelor pentru a fi oricand extrase, prioritatea avand-o comenzile care
stabilesc cum se executa prelucrarile datelor.

Programele conforme cu metoda fluxului de date incep cu introducerea datelor, se stabilesc


parametrii liniilor de comanda si ilustreaza cum datele sunt folosite si modificate.
Operatiile asupra datelor constau in prelucrari ale unor „cutii negre” care au intrari si iesiri
definite explicit, in fiecare caz si care devin operationale numai cand toate intrtarile sunt valide
(si nu cand programul le intalnea, ca in prelucrarile tipice vechilor programe).

76
Cand o operatie s-a executat, programul cerceteaza lista de operatii pana gaseste prima
operatie care are toate intrarile valide si o selecteaza pentru a fi activa.
Limbajele bazate pe fluxul datelor au fost initial dezvoltate pentru a usura programarea
paralela, dar a capatat multa atentie din partea marilor laboratoare, astfel incat au aparut
diferite limbaje cu diferite performante.
Cel mai popular limbaj bazat pe flux de date este si cel mai practic, faimosul National
Instruments LabView, conceput pentru a usura interconectarea echipamentelor din laborator, dar
a devenit capabil de alte performante largindu-si domeniul de aplicabilitate.

3. Programarea imperativa – Imperative programming


Programarea imperativa este o metoda de programare in care o anumita expresie comanda
executia unei actiuni – operatii, programul imperativ continand secvente de astfel de comenzi.
Programarea imperativa este metoda opusa programarii declarative care stabileste „ce
trebuie sa faca” programul si nu „cum trebuie sa faca”.
Primele limbaje de programare au fost limbaje imperative, in care instructiunile erau foarte
simple, executate de un harwdare proiectat pentru acest lucru.

Structura imperativa s-a pastrat pana la aparitia programarii orientate obiect, care era
imperativa ca stil, dar avea posibilitatea de a lucra cu obiecte-soft.
Aparitia limbajului C++ in anul 1985, a marcat clar deosebirea intre conceptele
programarii, programarea orientata obiect devenind cea mai folosita metoda de programare
dupa anii `90.

4. Programarea procedurala – Procedural programming


Este considerata uneori sinonima cu programarea imperativa (specificand pasii programului
care trebuie realizati pentru a se ajunge la rezultatul dorit), dar este legata si de metoda de
programare structurata care este bazata pe conceptul „apel procedura” – procedure call
(procedura fiind tot o secventa de instructiuni care trebuie executate pas cu pas).

Orice procedura poate fi apelata oricand in oricare punct al programului principal, sau
chiar de o alta procedura.

Scopul programarii procedurale este de a desparti o lucrare (un job) in mai multe variabile,
structuri de date si subrutine, pe cand programarea orientata obiect tinteste sa separe un job in
mai multe obiecte, fiecare obiect avand proriile date si propriile metode- subrutine.
Distinctia dintre cele doua metode de programare consta in faptul ca programarea
procedurala foloseste proceduri pentru a opera asupra structurilor de date, pe cand programarea
orientata obiect leaga impreuna procedurile si structurile de date in cadrul obiectului, acesta
operand datele continute chiar in structura sa.

Redam o comparatie intre termenii folositi de programarea orientata obiect si programarea


procedurala:

Programare: orientare obiect procedurala

77
_____________ ___________
metoda functie
obiect modul
mesaj apel procedura
atribut variabila

2. Metode clasice de elaborare a produselor program

Din punct de vedere al liniilor de program, in general echivalente cu linia-instructiune, pot


exista programe medii (pana in 1000 de linii program) si programe mari, care contin zeci de
mii de linii de program.

Termenul de programare trebuie inteles ca presupune atat programarea propriu-zisa


(scrierea instructiunilor) cat si proiectarea algoritmului de programare, analiza amanuntita a
problemei ce trebuie rezolvata si detalierea ei pe etape ce se conditioneaza reciproc.

La executia unui program se pot distinge trei categorii de entitati care colaboreaza:

78
- setul de instructiuni sau procedura care specifica programul;
- procesorul care executa procedura;
- mediul de executare a programului, care constituie componenta pe care
procesorul o influenteaza direct.

Mediul este complet sub controlul programului si nu suporta schimbari decat in urma
etapelor din program executate.
Programul, odata apelat si intrat in executie, poate rula independent, dar trebuie sa se
supuna regulilor de functionare impuse de sistemul de operare.
Secventele de instructiuni nu fac decat sa translateze schema logica obtinuta prin analiza
problemei care trebuie rezolvata (numita uneori si algoritm) intr-o succesiune de instructiuni
apartinand limbajului de programare ales de programator.
Este vorba de o constructie liniara, de unde si denumirea de programare liniara.
Programele medii pot fi realizate de un singur programator, pe cand programele mari,
numite si pachete de programe sau sisteme de programe, sunt realizate de colective de
programatori, fiecare rezolvand portiuni de program – module program, de unde si tehnologia
programarii numita programarea modulara.
Nevoia de manevrabilitate a acestor module – program se lovea de un impediment:
instructiunea GO TO, prezenta in limbajul FORTRAN si apoi, in multe alte limbaje care au
urmat, instructiune care realiza un salt din programul de baza aflat in executie, la inceputul
unui alt program (numit subrutina) si dupa executarea subrutinei respective se intorcea la
programul initial, continuandu-se executia acestuia.
Acest salt impunea recalcularea adreselor de salt in functie de pozitia avuta de modulul
respectiv in memoria interna, lucru care ducea la o anumita dependenta a modulului de zona
de memorie in care a fost apelat pentru a intra in executie.
Problema aceasta si-a gasit o solutie in propunerea profesorului E. W. Dijkstra (1965) de la
Universitatea Tehnica din Eindhoven, Olanda de a se renunta la folosirea acestei instructiuni in
intocmirea programelor si la folosirea setului de structuri logice de comanda care se
compuneau din trei structuri logice de baza, plus unele variante.
Profesorul arata ca se pot obtine programe mai bune fara instructiunea GO TO:

Calitatea unui program este invers proportionala cu numarul de instructiuni GO TO pe


care le contine.

Cele trei structuri logice sunt:

- secventiala,
- alternativa,
- repetitiva (iterativa).
S-a demonstrat ca cele trei structuri pot exprima logic orice algoritm, deci pot fi folosite
fara sa mai fie nevoie de a apela la instructiunea de salt respectiva.
Un lucru foarte important este ca fiecare din aceste structuri, ca parte dintr-o schema
logica, areo singura intrare si o singura iesire.
Astfel a fost fundamentata programarea structurata.

Programarea structurata este caracterizata ca fiind:

- programarea fara GO TO,


- programarea de sus in jos (top-down programming),

79
- o maniera de a organiza si scrie programe astfel incat sa fie usor de
inteles si de modificat,
- un mod de a controla complexitatea prin teorie si disciplina.

Unii autori considera programarea structurata ca un ansamblu al tuturor metodelor de


programare cunoscute pana la aparitia ei (liniara si modulara).
Programarea structurata presupune o disciplina in activitatea de programare, indiferent de
nivelul la care se aplica: nivel micro, privind elaborarea unui algoritm, programatorul fiind
atent la structura fiecarui modul in parte, cerand claritate si ordine, precum si folosirea
structurilor mentionate; la nivel macro, privind programarea intregului sistem de programe, se
presupune practicarea proiectarii top-down, a programarii modulare si a celorlalte metode de
programare, cerand ordine in intreaga activitate si existenta unei structuri clare a intregii
aplicatiii, precizata prin diagrama de structura a aplicatiei.

Sunt autori care considera ca programarea structurata a fost primul pas catre realizarea
programarii orientata obiect, metoda moderna de programare, care iata, isi gaseste izvoarele
tot in perioada de inceput a informaticii, ca multe alte concepte moderne.

La inceputul anilor `70 au aparut doua concepte importante in directia fundamentarii


teoretice a metodelor de programare, unul care definea procedeul detalierii algoritmilor in pasi
succesivi (stepwise refinement) si altul, introdus de H. D. Mills, este conceptul de functie
pentru modelarea unui algoritm (1972).

Nu peste multa vreme, acest concept de functie va sta la baza constituirii limbajului C,
care prin varianta C++ a firmei de software Borland a fost sursa pentru limbajul Java,
limbajul orientat pe obiecte.

Programul nu mai este privit ca o suita, mai mare sau mai mica, de instructiuni ci este
identificat cu un produs; putem vorbi astfel de produs program (PP), termen care este
folosit de toti specialistii in informatica.

Un PP este rezultatul unui proces creativ uman, in care este inglobata o multime
eterogena de elemente: imaginatie si rigoare, cunostinte si experienta, inteligenta si tehnica de
calcul, care impreuna cu un computer efectueaza toate prelucrarile dorite de utilizator.

Dificultatea elaborarii PP rezida in caracterul logic, abstract al acestora, PP nefiind fabricat


ci dezvoltat.
Unic sau multiplu, simplu sau complex, orice produs program se dovedeste a fi
materializarea unei informatii, in cazul nostru materializarea muncii de programare.
Utilizatorii de calculatoare care cunosc un limbaj de programare pot si ei sa scrie programe
pentru a rezolva diverse probleme intalnite in activitatea lor profesionala, acestia fiind atât
realizatori de programe cat si utilizatori (de obicei singurii).
Putem clasifica produsele program astfel:

- produse generice (PPG), elaborate de companii de dezvoltare si care sunt vandute pe


piata libera, specificatiile sunt produse de departamentul de
marketing al companiei respective;

- produse program personalizate (PPP) , destinate unui client particular, specificatiile

80
acestora fiind baza contractului intre companie si client.

Notiunea de produs program priveste munca de programare, dar cu un caracter industrial si


avand urmatoarele particularitati:

- PP este destinat mai multor utilizatori independenti (poate fi cumparat);


- cea mai costisitoare etapa din ciclul de viata al PP este cea de intretinere;
- PP este in general de complexitate medie/mare;
- PP este rezultatul muncii de echipa;
- PP are o documentatie si exista posibilitatea invatarii modului sau de utilizare.

Exista PP cu domeniu larg de aplicare (generale) si PP elaborate la cerere, cu un domeniu


de aplicare mai ingust.
Termenul “programming in the large” - programare pe scara mare, introdus in 1976,
reflecta complexitatea activitatilor de realizare a unui astfel de program.
PP poate fi caracterizat de mai multi parametri, definiti in functie de complexitatea
activitatilor de realizare a unui astfel de program, dar si de modul in care corespunde scopului.
Orice PP trebuie sa satisfaca anumite anumite cerinte, dintre care prezentam pe cele mai
importante:

- eficienta/performanta: sa consume cat mai putine resurse (timp-procesor, spatiu-memorie,


dispozitive periferice lente…);
- siguranta in folosinta: conceperea corecta a algoritmilor si minimizarea greselilor in
programare;
- robustete: sa poata raspunde corect chiar daca datele de intrare au fost prezentate
deficitar;
- portabilitate: gama larga de sisteme de calcul pe care PP poate fi compilat/interpretat si
apoi executat;
- mentenanta: usurinta cu care un program poate fi modificat pentru a corespunde unor
cereri din partea clientilor, a se adapta unor noi conditii de lucru.

3. Programarea orientată obiect

Orientarea obiect si-a manifestat prezenta in cateva domenii ale tehnologiei informatiei, cum
ar fi:
- limbajele de programare,
- analiza si proiectarea sistemelor informatice,
- constructia sistemelor expert si chiar
- proiectarea bazelor de date.

Ideile de baza folosite in limbajele de programare orientate obiect pot fi identificate in


vechile limbaje ALGOL 60 si SIMULA 67, care au introdus conceptele de încapsulare si de
obiect soft.

81
Limbajul Smaltalk, propus de firma Xerox in anii 70, este prototipul limbajelor de
programare orietate obiect simbolice, care folosesc obiecte, clase si proprietatea de moştenire.
Limbajele C++ produs de Bell Laboratories si Objective C al firmei Productivity Tools
reprezinta extensii ale unor limbaje de succes.

Modelarea datelor de tip “entitate-relatie” si de tip semantic au anticipat metodele larg


acceptate astazi ale orientarii obiect.

In prezent, conceptele, notaţia si principiile pe care se bazeaza orientarea obiect, cum sunt:

- obiectele,
- clasele,
- abstractizarea procedurilor si a datelor,
- încapsularea,
- mostenirea,
- asociatia,
- comunicatia prin mesaje.
Metodele de organizare (generalizarea, apartenenţa….), au capatat o utilizare care depaseste
granitele diferitelor domenii in care orientarea obiect isi are originile.
Aparitia orientarii obiect se datoreaza mai multor nevoi de rezolvare a nemultumirilor create
de modul in care se proceda la rezolvarea diferitelor probleme folosind computerul.

Astfel, exprimarea inadecvata problemei: descrierea datelor in limbajele mai vechi este
nepotrivita pentru majoritatea problemelor, deoarece nu permite oglindirea fireasca, nealterata
a obiectelor din lumea reala (asa a aparut expresia orientare obiect).

Notiunea de obiect trebuie extinsa pentru a acoperi atat functionarea (ce stie sa faca
obiectul?) cat si dependentele (cui apartine?, cu cine seamana?); obiectul trebuie descris
arhitectural, prin proprietati care le exprima comportarea, detaliile structurale sau anumite
similitudini.
De asemenea, entitatile complexe trebuie sa-si afle corespondent in datele compuse.
In lipsa unor mecanisme de limbaj care sa admita o asemenea abordare, majoritatea datelor
se exprima prin tipuri numerice, iar corespondenta cu obiectele reprezentate se afla numai in
mintea programatorului

O alta nemultumire era legata de lipsa de robustete: diversitatea datelor de prelucrat, dar
si secventele de instructiuni se reduc toate la siruri de biti, posibilitatea aparitiei unei erori
fiind destul de mare.
In limbajele evoluate, datele isi conserva individualitatea, deoarece sunt referite prin nume
si nu prin adresa, iar compilatorului i se pot comunica prin declaratii corespondentele existente
intre nume si natura datelor, astfel compilatorul “stie” ca pentru orice data intalnita, ce fel de
marime reprezinta si ce fel de prelucrari (operatii) i se pot aplica, adica ii cunoste tipul,
caracterizat prin doua multimi: a valorilor pe care le pot lua entitatile sale si a operatiilor care
le sunt aplicabile.
Se produce o separatie mai clara intre diversele tipuri de date, prin repartizarea lor unei
entitati unice, care le va descrie corespunzator si care le va permite sa faca anumite operatii.
Este deja primul pas catre constituirea conceptului de obiect soft, urmand sa apara si
mijloacele prin care acesta va participa sau nu la anumite ”actiuni” pentru realizarea unor
scopuri bine definite; putem numi aceste mijloace limbajele de programare orientate (pe) obiect.

82
Limbajul de programare ALGOL a introdus abstractizari pentru instructiuni, iar Pascal pentru
date.

Abstractizarea presupune extragerea esentei si ignorarea detaliilor.

Programatorul opereaza cu date definite conform aplicatiei, fara a tine seama de amanuntele
reprezentarilor interne.
Ideea ascunderii informatiei, lansata cu peste un sfert de veac in urma de David Parnas
(1972), s-a putut pune in aplicare abia dupa introducerea modulelor, prin combinarea
abstractizarii cu controlul vizibilitatii: informatiile din partea de implementare se ascund (devin
invizibile in afara prin izolarea totala a acestei parti), lasand vizibila doar interfata.
Deoarece lumea inconjuratoare este plina de entitati - numite simplu obiecte - care au atat
proprietati descrise prin date, cat si comportari descrise prin metode, este firesc ca acestea sa
fie tratate unitar.
Conceptul care permite tratarea unitara a obiectelor este clasa, introdus de Dahl (1966) in
limbajul de programare SIMULA.
Datele abstracte au inceput sub forma de clasa, a aparut apoi notiunea de modul si apoi
totul s-a restrans la notiunea de obiect, programatorii orientandu-se catre acesta din urma:
programarea orientata obiect.

Datele unui domeniu sunt discretizate in entitati distincte si identificabile numite obiecte.

Obiect poate fi orice are sens in contextul unei anumite aplicatii (un paragraf intr-un
document, o fereastra pe ecran, o piesa de sah…).
Obiectele se disting prin insasi existenta lor, si nu prin descrierea proprietatilor lor, ele
putand fi concrete sau conceptuale.

Clasa este o abstractie care descrie un grup de obiecte cu proprietati similare, sub aspect
semanatic, al comportarii sau al relatiilor cu alte obiecte.

Grupand obiectele in clase, se retin proprietatile importante pentru aplicatie si se ignora


restul.
O entitate singura reprezinta o instanta de obiect, iar mai multe entitati similare reprezinta
o clasa de obiecte.
O clasa difera de un obiect obisnuit prin faptul ca are in datele sale de instanta o tabela
(instance method table), care defineste metodele la care instantele (obiectele) clasei raspund
(tabela este importanta deoarece un obiect reactioneaza numai la metodele care sunt prevazute
de clasa sa, fie introduse, fie mostenite de aceasta).

O operatie este o actiune efectuata de un obiect sau o transformare la care este supus
acesta.

Aceeasi operatie se poate comporta diferit in clase diferite; de exemplu, operatia de mutare
a ferestrelor pe ecran difera de mutarea pieselor de sah.

Metoda este o implementare particulara a unei operatii catre o anumita clasa.

Un operator polimorf poate avea mai multe metode de implementare, polimorfismul fiind
foarte important, deoarece genereaza flexibilitate.

83
Cand se apeleaza o metoda a unui obiect, se prefera criteriile polimorfice tocmai pentru
aceasta flexibilitate.
Atributele si operatiile pot fi partajate intre clase pe baza unei relatii ierarhice.
Clasele pot fi definite in mod general si apoi rafinate in sbclase din ce in ce mai detaliate.
Orice subclasa mosteneste (incorporeaza) proprietatile supraclasei, la care se adauga
propriile sale proprietati apecifice.
Posibilitatea de a grupa proprietatile comune mai multor clase intr-o supraclasa unica,
mostenind proprietatile, este unul din avantajele majore al orientarii obiect, deoarece redice
masiv repetitia in proiecte si programe.

Reutilizabilitatea nu mai este o simpla anexa a programarii, ci devine o atitudine


sistematica, care asigura claritatea conceptuala: deoarece diferite operatii sunt in esenta acelasi
lucru se poate introduce procedeul refolosirii, reducandu-se numarul cazurilor care trebuie
analizate si intelese.
Privita prin prisma orientarii obiect, o aplicatie este un obiect alcatuit dintr-o multime de
obiecte care coopereaza.
In ultimii ani, orintarea pe obiect a depasit clar hotarele programarii si a patruns in fazele
de modelare conceptuala, analiza, proiectare verificare a calitatii, intretinere, validare pentru
aproape orice produs program de mare anvergura.

Un model este abstractia unei entitati, pentru a o intelege inainte de a o construi,


abstractia referindu-se la examinarea selectiva a anumitor aspecte ale problemei, in functie de
scopul urmarit (numai scopul poate arata ce este important si ce nu).

Importanta modelarii consta in urmatoarele aspecte:

- testarea unei entitati fizice inainte de a o construi,


- usurarea comunicarii cu beneficiarii,
- vizualizarea, care poate duce la nasterea unor idei noi,
- reducerea complexitatii, acesta fiind si rostul principal, care le cuprinde si pe celelalte,
intrucat permite operarea cu sisteme prea complexe pentru a putea fi intelese direct.

Deci rolul modelului este de a ajuta sa intelegem, sa asimilam… complexitatea unuisistem


in intregul sau
Descompunerea problemei in subprobleme amplifica eficienta intelectului uman.

Putem spune ca orientarea obiect nu mai este doar o dominanta a programarii, ci s-a
faurit ca o paradigma , strategie si mentalitate.

Chestionar

1. Cum este abordată problema scrierii programelor?

84
2. Ce este mediul de programare integrat?

3. Cum se defineşte programarea declarativă?

4. Dar programarea bazată pe fluxul de date?

5. Cum a fost fundamentată programarea structurată?

6. Cum se defineşte produsul program?

7. Cum se clasifică produsele program?

8. Care sunt domeniile de manifestare ale orientării obiect?

Curs 9: Metode de dezvoltare a programelor

1. Metode de dezvoltare a programelor


2. Ciclul de viata al produselor program
3. Concepte de baza ale dezvoltarii produselor program

1. Metode de dezvoltare a programelor

Exista doua abordari diferite in dezvoltarea programelor, numite si paradigme de dezvoltare:

85
- paradigma structurata, predominanta in anii `80,
- paradigma orientata pe obiect, predominanta in anii `90.

Paradigma structurata se bazeaza pe abstractizarea notiunilor de procedura, functie si


structura de bloc din limbajele de programare, cum sunt ALGOL si Pascal.
Uneori aceasta paradigma se numeste functionala, deoarece sugereaza rezolvarea unei
probleme prin descompunere functionala.
Aceasta metoda pleaca de la comportamentul dorit al produsului program pe care il
descompune utilizand un procedeu de sus in jos (top-down), pana la obţinerea unor elemente
ce pot fi implementate direct.
Dezavantajul acestei metode consta in faptul ca rezultatele obţinute prin aplicarea ei sunt
puternic dependente de problema si au astfel un grad redus de reutilizabilitate, chiar şi la
problemele asemanatoare.

Paradigma orientata obiect inverseaza metodologiile structurate, accentul fiind pus pe


identificarea obiectelor din domeniul problemei si nu pe descompunerea functionala a
problemei.
Avantajul acestei metode: la orice nivel, in cadrul procesului de dezvoltare pot fi
identificate elemente reutilizabile.

Numim metoda de dezvoltare un triplet compus din:

- o notatie impreuna cu semantica asociata, destinata modelarii diverselor


aspecte ale problemei sau ale PP, in cadrul procesului de dezvoltare;
- o procedura/reteta de aplicare a acestei notatii;
- un criteriu de masurare a progresului si de stabilire a punctelor terminale.

In general metoda trebuie sa acopere activitatile (etape sau faze) de dezvoltare ale
procesului.
In cazul metodei structurate, accentul este pus pe prelucrari, cu alte cuvinte pe aspectul
dinamic al problemei.

In cazul paradigmei orientata obiect accentul se pune pe ce anume se prelucreaza, deci pe


aspectul static al problemei.

Metodele moderne de dezvoltare folosesc modele multiple ale problemei, pentru a nu


neglija nici unul dintre aceste aspecte, asa cum procedeaza metoda UML – Unified Modeling
Language.
In cazul metodelor de dezvoltare apartinand paradigmei orientate obiect, vom intalni
urmatoarele activitati:

- analiza orientata obiect, o metoda de analiza care examineaza cerintele


din perspectiva claselor si obiectelor identificate in cadrul vocabulaarului
domeniului problemei,

- proiectarea orientata obiect, o metoda de proiectare care cuprinde un


proces de decompozitie orientat pe obiect si o notatie pentru descrierea
atat a modelului logic si fizic, cat si a celui static si dinamic al

86
sistemului proiectat. Notiunea de descompunere orientata obiect se
defineste prin contrast cu decompozitia functionala, specifica metodelor
structurate, in care accentul se pune pe algoritmi si nu pe obiecte,

- programarea orientata obiect este o metoda de implementare (codificare)


in care programele sunt organizate sub forma unor colectii de obiecte
cooperante, fiecare obiect fiind o instanta a unei anumite clase, iar clasele
sunt membre ale unei ierarhii de clase construita pe baza unor relatii de
mostenire.

Se apreciaza ca orice metoda de dezvoltare orientata pe obiect are caracteristici majore si


minore, distinctia dintre major si minor fiind luata in sensul ca o caracteristica majora, spre
deosebire de ina minora, este esentiala pentru ca o metoda de dezvoltare sa apartina
paradigmei orientate pe obiect.
Aceste caracteristici sunt:

Caracteristici majore Caracteristici minore

Abstractizare Tipizare
Incapsulare Concurenta
Modularizare Persistenta
Ierarhizare

Abstractizare: abstractizarea desemneaza caracteristicile esentiale ale unei entitati prin care
ea se distinge de alte feluri de entitati, furnizand o delimitare clara a entitatii respective din
punctul de vedere al celui care o apreciaza din exterior.

Determinarea unei abstractizari corespunzatoare este esentiala in dezvoltarea orientata pe


obiect.

Incapsulare
Abstractizarea unei entitati precede implementarea acesteia.
Odata selectata modalitatea de implementare, detaliile acesteia trebuie considerate un secret
al abstractizarii, fiind ascunse pentru majoritatea clientilor entitatii respective.

Incapsularea este procedeul de ascundere a detaliilor unei entitati ce nu contribuie la


caracteristicile esentiale ale acesteia.

Incapsularea este numita uneori si ascunderea informatiei.

Abstractizarea si incapsularea se manifesta prin tratarea unei clase ca fiind compusa din
doua parti:
- interfata clasei de obiecte, ce constituie imaginea sa externa si care
corespunde incapsularii
- implementarea clasei, ce constituie imaginea sa interna si corespunde
incapsularii.

Modularizare

87
Este proprietatea unui sistem de a fi descompus intr-o multime coeziva de componente
cuplate intre ele, numite module.

Coeziunea este o masura a gradului de afinitate reciproca a modulelor unei modularizari.

Cuplajul este o masura a gradului de interconexiune a modulelor unei modularizari.


Se urmareste ca modulele sa fie cuplate cat mai slab, iar conexiunea lor sa fie cat mai
puternica.

Ierarhizare
Reprezinta gradarea sau ordonarea abstractiilor.
In paradigma orientata pe obiect, ierarhizarea se manifesta sub forma ierarhiilor definite de
relatia de mostenire intre clase si ierarhiile definite de relatia de compunere (agrgare) dintre
obiecte.

Tipizare
Caracterizeaza comportamentul unor entitati prin prisma operatiilor care pot manipula
entitatile respective.
In termenii paradigmei orientate pe obiect, un tip clasifica obiectele in concordanta cu
interfata acestora, in timp ce clasele o fac in concordanta cu implementarea asociata.

Concurenta
Este acea proprietate care distinge o entitate activa de o entitate pasiva.
In cadrul paradigmei orientate pe obiect, conceptul de obiect poate unifica abstractizarea
datelor si abstractizarea proceselor,
Un astfel de obiect se numeste obiect activ, problema putand fi abstractizata sub forma
unei multimi de obiecte, dintre care unele sunt active ai altele pasive.

Persistenta
Este acea proprietate a unei entitati de a transcende timpului (in sensul ca entitatea
continua sa existe si dupa ce creatorul iai inceteaza existenta) si/sau spatiului (in sensul ca
entitatea isi pastreaza identitatea chiar daca isi schimba locatia din spatiul de adrese in care
a fost creata).
Persistenta se refera mai ales la sistemele de baze de date orientate pe obiect.
Persistenta in raport cu coordonata spatiu este uneori necesara in sistemele distribuite.
2. Ciclul de viata al produsului program

Elaborarea unui produs program (PP), numita si ciclul de viata al unui produs program,
reprezinta multimea tuturor activitatilor, impreuna cu rezultatele asociate lor, care au ca efect
final obtinerea unui PP.

Aceste activitati includ:

Analiza cerintelor

88
Are ca obiectiv obtinerea unei descrieri cat mai complete a problemei de rezolvat si a
cerintelor impuse de catre mediul in care va functiona PP.
Rezultatul acestei activitati este specificatia cerintelor.

Proiectarea
Are ca obiectiv obtinerea unui model al PP care, daca este transpus intr-un limbaj de
programare, rezolva problema data.
Desi analiza cerintelor si proiectarea sunt privite deseori ca o introducere greoaie in
programare, scrierea instructiunilor fiind considerata „adevarata problema”, aceasta atitudine are
un efect negativ asupra calitatii unui PP.
Proiectarea se face la un nivel abstract, independent de detaliile de implementare, iar
rezultatul sau este concretizat intr-o specificatie tehnica sau proiect.

Implementarea
Are ca obiectiv transpunerea proiectului intr-un limbaj de programare.
Accentul este pus in primul rand pe obtinerea unui program bine documentat, fiabil, lizibil,
flexibil si corect si mai putin pe aspecte secundare ca obtinerea unui program foarte eficient
sau apliocarea unor trucuri de programare.
Rezultatul acestei activitati este un program executabil.
Activitatile: proiectare si implementare se grupeaza deseori sub denumirea generica de
dezvoltare.

Testarea
Este gresit sa se considere testarea ca etapa succesoare implementarii, deoarece acest lucru
ar insemna sa ne preocupam de ea numai dupa ce programul a fost implementat.
Corect este sa fie efectuata dupa fiecare activitate in parte, sub forma verificarii si validarii.
Verificarea: stabilirea corectitudinii tranzitiei din etapa i in etapa i + 1
Validarea: stabilirea faptului ca nu ne-am indepartat de cerintele stabilite initial.

Intretinerea
Are ca obiective indepartarea erorilor raportate in faza de exploatare a PP si evolutia PP
pentru a satisface eventuale cerinte noi.
Activitatile de intretinere se clasifica in:

- intretinere corectiva: inlaturarea erorilor,


- intrtinere adaptiva: adaptarea PP la schimbarile mediului in care opereaza
(hardware nou, o noua versiune a sistemului de operare sau a sistemului
de gestiune al datelor, etc.),
- intretinere perfectiva: adaptarea PP la noile cerinte ale utilizatorilor,
- intretinere preventiva: actualizarea documentatiei, imbunatatirea structurii
modulare, adaugarea de comentarii…etc. Are ca obiectiv imbunatatirea
mentenabilitatii viitoare.

Modele ale ciclurilor de viata ale unui produs program (PP)

Scopul elaborarii unui model al ciclului de viata al produsului program este optimizarea
diverselor atribute ale sale.

89
Deoarece nu exista un model general care sa permita simultan optimizarea tuturor
atributelor acestuia, s-au propus mai multe astfel de modele (vom relua prezentarea unora deja
cunoscute, dar din punctul de vedere al dezvoltarii PP, noua abordare a elaborarii PP. Nu mai
vorbim de programare, ci de dezvoltare).

Modelul liniar
Este un model al ciclului de viata al PP in care activitatile sunt ordonate liniar, sub forma
unei succesiuni de etape, fiecare etapa trebuind sa fie incheiata pentru a se putea trece la
urmatoarea.
Fiecare etapa este o realizata de o anumita categorie de specialisti:

- analisti: culeg cerintele, fac analiza de sistem,


- proiectanti: definesc arhitectura si structura PP,
- programatori: codifica rezultatul proiectarii (scriu programul intr-un limbaj de
programare ales),
- operatori: ruleaza programul.

Modelul liniar este figurat mai jos:

ANALIZA Se analizeaza cerintele utilizatorului, cerintele de sistem, si


cerintele software-ului

PROIECTARE Proiectare de ansamblu si de detaliu

CONSTRUCTIE Implementare/codificare, testare pe componenete, testare sistem

UTILIZARE Rulare, intretinere, evolutie desfasurate in ciclu

Avantajele modelului liniar:

- se pot stabili termene precise pentru terminarea fiecarei etape,


- se pot angaja specialisti pentru fiecare etapa in parte,
- ordonarea liniara usureaza planificarea,
- ordonarea liniara este agreata de manageri, fiind considerata practica,
- ordonarea liniara este potrivita pentru proiecte in care sunt implicati multi oameni,
- ordonarea liniara se potriveste metodologiilor clasice de
analiza/proiectare/implementare.

Dezavantaje:

- nu se poate reveni asupra deciziilor luate in etapele deja incheiate, deoarece nu


exista „feed-back” (iteratie),
- structura modelului in ansamblul ei este foarte rigida.

90
De exemplu, daca se descopera in faza de implementare erori in proiectare, nu se
reconsidera proiectarea, incercandu-se rezolvarea probelemelor prin solutii ad-hoc in faza de
implementare.

Modelul cascada
Se obtine din modelul liniar, prin introducerea unei activitati de verificare si validare (VV)
la sfarsitul fiecarei etape si a unor reveniri in etapele anterioare, in cazul in care VV nu
permite trecerea la etapa urmatoare.
Acest model a fost introdus de Royce in 1970. Mai jos prezentam structura acestui model:

Analiza cerintelor

VV

Proiectare

VV

Implementare

VV

Testare

VV

Intretinere

VV

Acest model are avantajul ca inlatura rigiditatea modelului liniar prin introducerea unor
legaturi de „feed-back” (iteratii).
Dezavantaje:

- daca in proiect sunt implicate resurse multe, iteratia poate fi dificila si costisitoare,
- coordonarea multor persoane in prezenta iteratiilor poate crea dificultati,
- repetarea anumitor etape poate lasa anumiti perticipanti la proiect in asteptare
- desi este un model foarte raspandit, este consuderat una din principalele cauze ale
aparitiei crizei software, deoarece incurajeaza dezvoltarea prin descompunere
functionala, nu ia in considerare evolutia si nu incurajeaza reutilizabilitatea,
ignora importanta datelor punand accent pe aspectul procedural.

91
Modelul evolutional
Se bazeaza pe ideea dezvolarii unei implementari initiale, prezentarea ei utilizatorului si
apoi rafinarea ei in versiuni ulterioare, pana cand se obtine un PP adecvat.
Prezentam mai jos structura acestui model:

Specificare Versiune
initiala

Decriere Dezvoltare Versiuni


generala intermediare

Validare
Versiune
finala

Exista doua modele evolutionale care difera prin obiective: modelul programarii
exploratorii si modelul prototipizarii.

Modelul programarii exploratorii


Are ca obiectiv lucrul cu beneficiarul pentru a-l ajuta sa inteleaga cerintele problemei.
In acest caz, PP este o unealta de explorare a universului problemei.
Acest model se utilizeaza in special pentru implementarea programelor de inteligenta
artificiala.
Acestea incearca sa simuleze inteligenta naturala, care la ora actuala nu este suficient
inteleasa, fiind astfel dificil de simulat.
Modelul prototipizarii
Are ca obiectiv intelegerea de catre contractor a cerintelor beneficiarului in scopul efectuarii
unei analize cat mai complete a cerintelor.
In acest caz, versiunile intermediare se numesc prototipuri.
Trasaturile specifice ale modelului prototipizarii sunt:

- este foarte potrivit pentru echipe mici de dezvoltare (sub 10 membri),


- este folosit la dezvoltarea aplicatiilor moderne interactive, in care o mare importanta
o are interfata cu utilizatorul,
- este potrivit pentru metodologia de dezvoltare orientata obiect,
92
- contine idea buna de rescriere completa a prototipului pentru acrea PP final,
- necesita lucru in echipa de calitate.

Avantajele acestui model sunt urmatoarele:

- inlatura complet modelul in cascada,


- modul de derulare este flexibil,
- raspunsul la schimbarile cerintelor este rapid,
- problemele aparute in cadrul unor etape se pot rezolva multumitor in cadrul altor
etape,
- in orice moment exista un PP functional, chiar daca este incomplet,
- se pot arata beneficiarului versiuni preliminare ale PP in vederea preluarii
feed-back-ului,
- este foarte potrivit pentru dezvoltarea interfetelor utilizator, parte componenta a
tuturor PP moderne,
- este agreat de programatori.

Dezavantajele acestui model sunt:

- calitatea proiectului este greu de mentinut ridicata datorita schimbarilor frecvente


(codul rezultat nu este perfect, structurarea este slaba….),
- gestiunea proiectului este dificila,
- nu exista termeneclare si progresul este greu de urmarit (are vizibilitate redusa),
- estimarea resurselor necesare (timp, oameni, efort) este greu de realizat,
- este greu de estimat cand se va termina elaborarea PP, oricand poate fi ceva de
adaugat,
- echipele de dezvoltare fiind mici, aplicatia va fi mica,
- necesita aptitudini si motivatii speciale din partea participantilor.

Modelul reutilizarii
Reprezinta de fapt o categorie de modele care incearca maximizarea si sistematizarea
refolosirii elementelor de analiza, proiectare si implementare deja existente, in scopul reducerii
elementelor noi necesare in elaboraea PP.
Aceste modele promoveaza ideea dezvoltarii aplicatiilor din componente software
reutilizabile.

3. Concepte de baza ale dezvoltarii produselor program

Obiect soft

In sens larg, un obiect este o entitate care se poate distinge de alte entitati si care are o
semnificatie in contextul aplicatiei pe care o dezvoltam.

Majoritatea obiectelor apartin uneia dintre urmatoarele categorii:

93
- tangibile: apartin lumii reale si in general corespund substantivelor din limbajul
natural,
- incidente (evenimente): ele modeleaza stari de lucruri care se petrec la un moment
dat
sau fenomene. Joaca un rol important in modelarea dinamica.
- interactiuni (legaturi): modeleaza interactiunile dintre obiecte,
- specificatii: definesc calitati ale unor definitii. Ele corespund metadatelor – date care
descriu alte date,
- fictive (intangibile): modeleaza entitati conceptuale abstracte,
- roluri: modeleaza calitatile diverselor obiecte perticipante la o interactiune.

Un obiect are trei caracteristici definitorii:

- stare: cuprinde toate proprietatile (de obicei statice) impreuna cu valorile curente
(de obicei dinamice) ale acestor proprietati.

O proprietate este o caracteristica distinctiva, calitate sau atribut al unui obiect si ea


contribuie la unicitatea obiectului respectiv.

Proprietatile sunt in general statice, in sensul ca nu se schimba in timp.


Proprietatile au valori, acestea putand fi valori simple sau alte obiecte.
Valorile sunt in general dinamice, in sensul ca se schimba in timp.

- Comportament: reprezinta modul in care un obiect actioneaza si reactioneaza, in


termenii schimbarilor de stare si transferurilor de mesaje.
Orice obiect poate actiona asupra altor obiecte si poate fi la randul sau actionat de alte
obiecte.
Se mai spune ca obiectul primeste mesaje si respectiv trimite mesaje sau ca un obiect
client (emitatorul mesajului) executa o operatie asupra unui obiect server (receptorul mesajului).

- Identitate: este acea proprietate a unui obiect prin care el se distinge de alte
obiecte.
Faptul ca un obiect are stare inseamna ca el ocupa spatiu fie in lumea
fizica, fie in memoria computerului.
Proprietatile (structura) si comportamentul obiectelor similare se definesc prin intermediul
clasei careia ii apartine obiectul.

Obiectele se mai numesc si instante ale clasei respective.


Relatii intre obiecte
O relatie intre doua sau mai multe obiecte cuprinde presupunerile pe care fiecare dintre
ele le face asupra celorlalte, incluzand operatiile care pot fi efectuate, impreuna cu comportamentul
rezultat.

Exista doua categorii de relatii intre obiecte

- relatii de legatura (utilizare),


- relatii de agregare (compunere, continere).

94
Un obiect colaboreaza cu alte obiecte prin intermediul relatiilor de legatura.
Prin intermediul unei legaturi, un obiect (clientul) apeleaza la serviciile altui obiect
(serverul).
Un obiect implicat intr-o astfel de relatie de legatura poate avea unul din urmatoarele
roluri:

- client: el poate executa operatiile altor obiecte, dar nici un obiect nu executa
operatiile sale,
- server: nu executa operatiile altor obiecte, in schimb alte obiecte apeleaza la
serviciile sale,
- agent: poate executa operatiile altor obiecte si alte obiecte apeleaza la serviciile
sale.
Atunci cand un obiect trimite un mesaj altui obiect cu care se afla intr-o relatie de
legatura, cele doua obiecte trebuie sa se sincronizeze intr-un anume fel.

Intr-o aplicatie strict secventiala, sincronizarea se realizeaza printr-un apel de procedura.

Pn aplicatiile care contin mai multe fire de executie, sunt necesare alte metode de
sincronizare.
Din acest motiv, obiectele se clasifica astfel:

- obiecte secventiale: sunt obiecte pasive a caror semantica este garantata in prezenta
unui singur fir de executie,
- obiecte blocante: sunt obiecte pasive a caror semantica este garantata in prezenta
mai multor fire de executie. Excluderea mutuala este realizata
prin colaborarea corespunzatoare a clientilor activi;
- obiecte concurente: sunt obiecte active a caror semantica este garantata in prezenta
mai multor fire de executie.

Relatia de agregare este relatia dintre o parte si un intreg, astfel incat sa fie posibila
accesarea tuturor partilor intregului.

Un obiect agregat (compus) este format dintr-un numar fix sau variabil de obiecte
componente.

Relatiile de agregare se pot clasifica in trei categorii:

- fixa: obiectul agregat este compus dintr-un numar fix de componente,


- variabila: obiectul agregat este compus dintr-un numar finit, dar variabil de
componente,
- recursiva: obiectul agregat are in componeneta obiecte de aceeasi clasa cu el
sau obiecte agregat care contin obiecte de aceeasi clasa cu el.

95
Alegerea dintre o relatie de legatura si o relatie de agregare in faza de proiectare trebuie
judecata atent, deoarece uneori agrgarea este mai buna decat relatia de legatura din cauza ca
utilizarea agregarii conduce la reducerea numarului de obiecte, iar alteori, relatia de legatura
este mai buna decat agregarea intrucat utilizarea legaturii conduce la un cuplaj mai slab intre
obiecte.

Clase

O clasa reprezinta o multime de obiecte care partajeaza aceeasi structura si acelasi


comportament.

Operatiile unei clase, numite si metode, se pot clasisfica in urmatoarele categorii:

- constructori: specifica modul de generare a noi obiecte apartinand structurii


respective.
Atunci cand gestiunea obiectelor se face explicit de catre programator, se pun in evidenta
prin contrast operatiile destructor, care au rolul de a elibera memoria alocata obiectelor, atunci
cand acestea nu mai sunt necesare;

- selectori: specifica modul cum se actualizeaza elementele care compun un obiect


compus;
- modificatori: specifica modul cum se actualizeaza elementele care compun un obiect
compus;
- recunoscatori: se folosesc pentru recunoasterea diverselor proprietati ale obiectelor
apartinand structurii respective;
- testori: se folosesc pentru compararea obiectelor apartinand structurii respective;
- iteratori: se folosesc pentru accesul sistematic la componentele unui obiect compus.

In limbajele de programare orientate obiect, cum este spre exemplu C++, identitatea unui
obiect se implementeaza de obicei prin adresa.

Orice obiect dispune de o proprietate „ascunsa”, a carei valoare este egala cu adresa din
memorie a obiectului respectiv.

Relatii intre clase


O relatie intre doua sau mai multe clase desemneaza fie o partajare a membrilor, fie o
conexiune semantica.
Exista urmatoarele categorii de realatii intre clase:

-relatii de mostenire,
-relatii de asociere (utilizare),
-relatii de istantiere.
Mostenirea
Este o relatie intre clase prin care o clasa (numita clasa derivata sau subclasa) partajeaza
structura si comportamentul uneia sau mai multor clase (numite clase de baza sau superclase).
In primul caz avem mostenire simpla si in al doilea caz avem mostenire multipla.
Prin intermediul unei relatii de mostenire o clasa derivata va mosteni proprietatile si
comportamentul clasei de baza.
Din acest motiv se mai spune ca o clasa derivata este o specializare a clasei derivate si
invers, clasa de baza este o generalizare a clasei derivate.

96
Asocierea
Desemneaza o dependenta semantica intre doua sau mai multe clase.
Relatia de asociere evidentiaza faptul ca obiectele unei clase – clasa asociata depind de unul
sau mai multe obiecte apartinand uneia sau mai multor clase – clase asociate.
Ea trebuie privita mai ales ca o relatie de utilizare (exploatare), in sensul ca, clasa
asocianta utililzeaza interfata, fie implementarea clasei/claselor asociate.

Instantierea
Se refera la posibilitatea definirii unor clase generice care prin instantiere ne conduc la
obtinerea de colectii de alte obiecte.

O clasa care modeleaza o colectie omogena sau neomogena de alte obiecte se numeste
clasa container.

Spre exemplu, putem defini o clasa container pentru reprezentarea unei multimi de angajati
prin instantierea unei clase generice pentru reprezentarea unei multimi.
Clasa rezultata va folosi drept parametru clasa de reprezentare a unui angajat.

Clase abstracte
Deseori clasa de baza a unei ierarhii de clase trebuie sa fie foarte generala si in
consecinta ea va contine foarte putini membri, detaliile fiind lasate pe seama claselor derivate.
La limita putem face clasa de baza atat de generala incat ea sa nu poata fi folosita pentru
crearea directa de obiecte.
Ea neavand instante, nu are sens sa-i implementam metodele, acestea actionand doar ca
sabloane (template) pentru metodele definite in clasele derivate.
O clasa abstracta defineste doar o interfata comuna minimala pentru toate clasele derivate din
ea.
Spre exemplu, putem defini o clasa abstracta pentru reprezentarea coceptului de vehicul si
o metoda virtuala pura pentru determinarea vitezei unui vehicul.
Prezenta sa are semnificatia ca orice vehicul, iniferent de tip, are viteza.
Intrucat nu putem determina cu exactitate aceasta viteza daca nu cunoastem tipul
vehiculului, aceasta metoda va fi redefinita pentru pentru fiecare tip de vehicul in parte in
cadrul clasei derivate corespunzatoare.
Spre exemplu putem avea o clasa derivata pentru conceptul de automobil si una pentru
conceptul de avion.

Polimorfism

Polimorfismul este modalitatea de a asocia aceluiasi mesaj semnificatii diferite, in functie


de tipurile parametrilor mesajului.

Polimorfismul este de urmatoarele tipuri:

- polimorfism ad-hoc,

97
- polimorfism pur,
- polimorfism parametric.

Polimorfismul ad-hoc se refera la posibilitatea ca o aceeasi operatie efectuata asupra unui


obiect sa aiba un comportament diferit in functie de argumentele operatiei.
Se realizeaza prin supraincarcare si legare statica.
Supraincarcarea inseamna ca aceeasi operatie poate avea definitii diferite, pentru tipuri
diferite ale argumentelor.
Legarea statica inseamna ca legatura intre apelul operatiei si operatia care va fi efectiv
executata este realizata la momentul compilarii programului, in functie de tipurile argumentelor.
Spre exemplu, sa consideram o clasa care reprezinta conceptul de vehicul.
Orice vehicul se caracterizeaza prin viteza de deplasare, care este un numar real pozitiv.
Intrucat majoritatea vehiculelor sunt automobile, este natural sa presupunem ca de obicei
viteza unui vehicul este de 80 km/h.
Un avion este un vehicul, dar a carui viteza este de 800 km/h.
In acest fel metoda de detrminare a vitezei unui avion suprascrie (redefineste) metoda
implicita de determinare a vitezei unui vehicul.

Polimorfismul pur se refera la posibilitatea ca o aceeasi operatie executata asupra unor


obiecte apartinand unor clase diferite, dar corelate printr-o aceeasi superclasa sa depinda de
tipul obiectelor respective.
Polimorfismul pur se realizeaza prin folosirea metodelor virtuale.

O metoda virtuala desemneaza o operatie care va fi apelata corect in orice situatie, in


functie de tipul obiectului asupra caruia este executata.

Metodele virtuale sunt implementate prin legare dinamica, acest lucru insemnand ca legatura
intre apel si operatia efectiv executat se realizeaza la momentul executiei.
Revenind la exemplul anterior, sa presupunem ca dorim sa determinam viteza unui vehicul
al carui tip nu-l cunoastem.
In cazul polimorfismului ad-hoc se va obtine viteza 80 km/h indiferent de tipul efectiv al
vehiculului respectiv.
Daca insa metoda de determinare a vitezei este virtuala si tipul vehiculului este avion, se
va obtine valoarea 800 km/h.

Polimorfismul parametric semnifica faptul ca tipurile argumentelor unei operatii sunt de


asemenea parametrii ai operatiei respective.
Pentru fiecare instantiere a acestor parametrii se va obtine o noua versiune a operatiei
respective.
Polimorfismul parametric se foloseste mai ales pentru implementarea unor clase container
dupa tipul elementelor.
Chestionar

98
1. Pe ce se bazează paradigma structurală ?

2. Dar paradigma orientată obiect ?

3. Cum se defineşte metoda de dezvoltare a software-ului ?

4. Cum se defineşte abstractizarea în cadrul orientării obiect ?

5. Care este scopul elaborării unui model ?

6. Cum se defineşte modelul liniar ?

7. Cum se defineşte obiectul soft ?

8. Care sunt categoriile de relaţii între obiecte?

Curs 10: Programarea bazelor de date

1. Bazele programarii în Microsoft Access. Introducere VBA – Visual Basic


for Applications.
2. Concepte esenţiale ale bazelor de date
3. Aplicaţie

99
1. Bazele programării în Microsoft Access. Introducere VBA – Visual Basic for
Application

Programarea bazelor de date automatizează anumite procese de prelucrare a bazelor de


date şi creează legături între obiectele din baza de date.
Programarea bazelor de date constituie, de fapt, procesul de stocare (folosind o modalitate
standard) a unei varietăţi de informaţii, astfel încât să fie posibilă o accesare şi o întreţinere
facilă a datelor.

Informaţiile stocate într-o bază de date, spre deosebire de un document creat cu un


procesor de texte, respectă de obicei un format standard.

Datele incluse în aceste resurse pot fi stocate cu uşurinţă în interiorul unei baze de date,
cum ar fi: Agendă telefonică, agendă de adrese, informaţii contabile, catalog de fişe de
bibliotecă….etc.
In Microsoft Access, programarea este procesul de adăugare de funcţionalităţi la baza de
date, utilizând:

- macro-instrucţiuni Access sau


- codul VBA – Visual Basic for Application.

Microsoft Access este un pachet de programe performant pentru bazele de date relaţionale,
facilitând crearea de baze de date complexe, cu acces partajat.
Este un program de gestionare a bazelor de date folosit pe scară largă.

Rolul principal al acestui program este de a accesa şi de a stoca datele.

Unul din cele mai apreciate calităţi ale acestui program este interfaţa grafică uşor de
înţeles, care permite crearea interogărilor, formularelor şi a rapoartelor, facilitate care lipseşte
din multe alte programe de acest gen.
În majoritatea aplicaţiilor de baze de date au loc foarte multe acţiuni pe care nu le vedem
pe ecran.
Calculele, validarea datelor, efectele grafice şi comunicarea între obiectele bazei de date
sunt tratate de secvenţe de cod scrise special pentru aceste operaţii şi memorate în module.

Dacă tabelele, interogările, formularele şi rapoartele reprezintă componentele principalele


ale unei baze de date Access, modulele constituie liantul care le uneşte.

Aceste secvenţe de cod scrise special pot apaţine sistemului Access şi se numesc macro-
comenzi, fiind generate de „generatorul de macro-comenzi”.
Macro-comenzile reprezintă o modalitate uşoară de gestionare a activităţilor de programare.
Se creează rapid legături între între obiectele bazei de date.
Argumentele pentru fiecare actiune se afişează în „Generatorul de Macrocomenzi”.

Dacă aceste secvenţe de cod sunt scrise folosind coduri VBA – Visual Basic Access (prin
intermediul Editorului Visual Basic) se numesc „cod VBA” sau „cod funcţie” sau
„procedură”.

100
Acţiunile macro-comenzilor Access reprezintă doar un subset de comenzi existente în VBA.
Dar, generatorul de comenzi (prin care se compun macro-comenzile Access) oferă o
interfaţă mai strucurată decât Editorul Visual Basic, permitând să se adauge programarea
pentru controale şi obiecte, fără să fie nevoie să se introducă codul VBA.
Macro-urile pot îndeplini multe funcţiuni, dar uneori sunt depăşite de situaţie şi atunci
folosim procedurile.
Iata câteva situaţii în care procedurile sunt inevitabile:

- Când avem multe macrouri în baza de date, aceasta este greu de întreţinut, pentru că
macrourile sunt obiecte separate de formulare sau rapoarte.
Procedurile scrise în Visual Basic sunt incluse în definiţia formularelor şi rapoartelor, astfel
că, atunci când un raport sau un formular este mutat dintr-o bază de date în alta, procedurile
legate de evenimente se mută automat odată cu el.

- Visual Basic dispune de multe funcţii încorporate, dar ne permite să construim şi funcţii
proprii.
Aceste funcţii sunt necesare atunci când vrem să facem calcule pentru care în Microsoft
Access nu există funcţii incorporate sau când calculele depăşesc capacitatea unei expresii.
Funcţiile create de noi în Visual Basic pot fi încorporate în expresii diferite.
- Cu funcţiile Visual Basic se pot masca anumite mesaje de eroare cu care un utilizator
nu ar şti ce să facă.
Cu funcţiile freate putem detecta când apare o eroare şi putem da un mesaj pe înţelesul
utilizatorului sau putem acţiona astfel încât să corectăm eroarea.

- Cu Visual Basic se poate acţiona asupra articolelor, câte unul pe rând, ceea ce cu
macrouri nu se poate face.

- În VBA se pot plasa valori pentru argumentele funcţiilor chiar în timpul rulării, ceea ce
nu se poate face cu argumentele unui macro; mai mult, funcţiile acceptă argumente sub formă
de variabile (există şi variabile obiect), ceea ce permite o achimbare dinamică a argumentelor
lor.

Codul VBA este conţinut în module de clasă ( module care conţin cod numai pentru
anumite obiecte Access: formulare, tabele, rapoarte), şi în module standard (care nu sunt
legate de obiecte specifice şi conţin cod „global”, care se utilizează în toată baza de date).

Modulele pot fi structurate pe funcţii şi subrutine.

Grupurile de funcţii şi subrutine scrise în limbajul standard Visual Basic Applications


asigură toate funcţionalităţile unei baze de date.

Când se înregistrează o procedură, aplicaţia creează un „proiect VBA”; acesta este un


container care include atât documentul utilizat pentru crearea procedurii cât şi un obiect
special, numit modul, care conţine instrucţiunile procedurii.
O procedură obişnuită are următoarele elemente:

- sub: este un cuvănt cheie care marchează începutul unei proceduri (subrutine); de aici
numele procedurilor – proceduri Sub;

101
- numele procedurii: după cuvântul Sub se scrie numele ales al procedurii, urmat de
paranteze rotunde pentru valori de intrare sau argumente;

- comentariile: folosite numai pentru prezentare;

- instrucţiunile procedurii: seria de instrucţiuni; liniile de cod în VBA sunt doar texte;

- End Sub: aceste cuvinte marchează finalul procedurii.

Astfel, structura unei proceduri VBA este:

Sub NumeProcedura (argument 1, argument 2, ……)


[instrucţiuni VBA]
End Sub

Unitatea de bază pentru programarea în VBA este procedura, reprezentată de un bloc de


cod dintr-un modul.

Există două tipuri de proceduri:

- Sub procedura şi
- Function procedura: funcţii definite de utilizator.

O procedură Function nu poate să modifice mediul de lucru, dar poate retutna o valoare.
Structura unei astfel de proceduri Function este arătată mai jos:

Function NumeProcedura (arg 1, arg 2, ….)


[instrucţiuni VBA]
NumeProcedută = valoareDeRăspuns
End Sub

Practic, prin includerea modulelor de cod într-o baza de date, aceasta se transformă dintr-un
depozit de stocare a informaţiilor într-o aplicaţie, adică un mediu în care utilizatorii efectuează
operaţii cu datele.
Aşa cum s-a precizat mai sus, modulele Access sunt de două tipuri:

- module standard, de sine stătătoare, care au atribute, nume şi pot exista


independent de orice obiect din baza de date;

- module de clasă: sunt containere cu proceduri asociate obiectelor de pe formulare


sau rapoarte. Ele se copiază sau se şterg odată cu formularul sau obiectul de care aparţin.

Obiectele Access (formulare, rapoarte, tabele) şi controalele (butoane şi casete de text) au


proprietăţi eveniment variate la care se poate ataşa macro-comenzi sau proceduri.

102
Evenimentul este o acţiune recunoscută de un obiect (cum ar fi un clic de mouse), pentru
care se poate prevedea un cod (procedură) cu care obiectul să răspundă în caz că acea
acţiune se produce.

Fiecare proprietate eveniment se asociază cu un anumit eveniment (clic – mouse, deschidere


formular, modificare a datelor, etc).
Evenimentele pot fi provocate şi de factori externi: evenimente sistem, macro sau proceduri
ataşăte la alte evenimente.
Baza de date devine tot mai complexă prin adăugarea de macro-uri sau proceduri mai
multor priprietăţi eveniment ale mai multor obiecte, existând posibilitatea de a rezolva totul prin
programarea bazelor de date.
Alegerea unui macro sau a unei proceduri depinde de modul cum s-a ales implementarea
bazei de date.
Dacă baza de date este partajată cu alte persoane, fiind amplasată pe un server, este bine
de evitat de folosit VBA din motive de securitate.
VBA nu este compatibil cu caracteristica de „public” a retelei Web, trebuind folosite
macrocomenzi.

Macrocomenzile sunt necesare pentru următoarele acţiuni:

- atribuirea unei acţiuni (sau set de acţiuni) unei taste: se creează un grup de
macrocomenzi numit Autokeys;

- efectuarea unei acţiuni (set de acţiuni) când se deschide prima dată o bază
de date, etc.

Principalele acţiuni şi rolul îndeplinit de macrocomenzi sunt redate în lista următoare:

AddMenu: adaugă un meniu în bara de meniu a unui formular sau raport;


Beep: emite un sunet de avertizare;
Copy Object: creează o copie a bazei de date;
Delete Object: şterge un obiect specificat sau selectat;
Echo: ascunde sau afişează rezultatul acţiunii unei macrocomenzi;
FindRecord: caută prima sau următoarea înregistrare care îndeplineşte o anumită
conditie
MsgBox: determină apariţia unei casete de mesaj;
OpenForm: deschide un formular într-unul din modurile specifice: Design View,
Datasheet, Print Preview, Form View;
OpenQuery: deschide sau lansează în execuţie o interogare;
OpenTable: deschide un tabel într-una din modalităţile posibile;
OpenReport: deschide un raport;
PrintOut: tipăreşte obiectul specificat;
RunCode: lansează în execuţie o procedură VBA;
RunMacro: lansează în execuţie o macrocomandă.

Privitor la VBA, o caracteristică importantă a sa este faptul că este un limbaj de


programare orientat obiect.

103
Obiectele VBA sunt doar o modalitate comodă de stocare şi de ascundere într-un program
a datelor şi a codului sursă.

VBA este un mediu de programare proiectat special pentru comenzile (procedurile) din
aplicaţii.
VBA permite să se înregistreze proceduri şi atasarea acestora la butoane, fie în interiorul
unui document, fie într-un meniu sau într-o bară de instrumente.

În loc să se scrie un program care să manevreze unele valori ale datelor, se poate
încapsula datele şi codul care le manevrează într-un obiect; pentru a folosi datele înglobate va
trebui doar să fie permis accesul la obiect.

Printre obiectele VBA se numără butoane, elemente de meniu, domenii de celule din
foile de calcul şi chiar foile întregi, aproape tot ce se poate vedea pe ecran în timp ce
rulează aplicaţia reprezintă obiecte.

Descrierea unui obiect apare lângă numele obiectului, în fereastra DataBase, când se dă
clic pe Deatails în View Meniu.

O clasă de obiecte este o referinţă către un tip general sau o clasificare de obiecte; de
exemplu, fiecare celulă sau domeniu de celule dintr-o foaie de calcul reprezintă un obiect
Range, un exemplu al clasei Range.

În cazul în care sunt combinate toate obiectele unei anumite clase, acel grup este cunoscut
ca o colecţie; toate foile de calcul se găsesc în colecţia Sheets, care include toate tipurile de
foi dintr-un registru de lucru (foaie de calcul, diagramă, modul, casetă de dialog).
Property sheet (foaia de proprietăţi) este o fereastră care utilizează pentru a vizualiza sau
modifica diferite obiecte: tabele, interogări, câmpuri, rapoarte, pagini de acces la date şi
controale.

Datele unui obiect se numesc proprietatea acelui obiect.

Cele mai multe proprietăţi pot fi citite, dar nu toate pot fi scrise sau modificate.
În descrierea fiecărui obiect se găseşte o listă a proprietăţilor care i se aplică.

Cu VBA se pot efectua următoarele acţiuni:

- utilizarea funcţiilor predefinite (de exemplu, funcţia IPmt - pentru plata


dobânzii) sau crearea de funcţii noi;

- crearea sau manipularea obiectelor; folosind VBA se pot manipula toate


obiectele din baza de date;

- efectuarea de acţiuni la nivel de sistem: verificarea existenţei unui fişier


pe computer, schimbul dinamic de date (DDE – Dynamic Data Exchange)
pentru a comunica cu alte programe bazate pe Microsoft Windows (cum
ar fi Excel) şi să se apeleze la funcţii în biblioteca cu legare dinamică,
DLL – Dynamic Linked Library a sistemului Windows.

Mediul Visual Basic for Applications

104
Începând cu Microsoft Office `97, s-a încercat standardizarea programării tuturor
componentelor Microsoft Office.
Limbajul în care s-a realizat acest lucru este Visual Basic for Applications (VBA).
Mediul standard de programare în VBA este Visual Basic Editor.
Totuşi, din dorinţa de a menţine compatibilitatea cu codurile scrise pentru Access în
versiunile anterioare, pentru Access s-a făcut o excepţie şi ca urmare, în Access programarea
se face cu ceea ce se numeşte Code Builder.
Visual Basic Editor poate fi lansat din Access (ca şi din Word, Excel, Power Point).
După construirea bazei de date, este construită o aplicaţie VBA care permite examinarea,
modificarea şi suplimentarea informaţiei stocate în baza de date.
VBA conţine un „motor” complet de baze de date, care reprezintă în esenţă, o aplicaţie de
baze de date cu autoconţinere.
În realitate, motorul pentru baze de date folosit de Visual Basic 6 (de exemplu) este acelaşi
cu cel care operează „în fundal” în cadrul programului Microsoft Access.

De aceea,, Microsoft Access şi VBA folosesc exact aceleaşi fişiere (cele cu extensia .mdb)
şi acelaşi format de fişier.

De asemenea, o aplicaţie creată cu Access poate partaja acelaşi fişier ca un program VBA,
cu condiţia ca facilităţile de acces să fie corect configurate.
Spre deosebire de un procesor de texte sau alte aplicaţii dotate cu interfeţe utilizator, o
bază de date lucrează, de regulă, „în fundal”.
Orice interfaţă vizibilă de către utilizator este cel mai adesea construită pentru o anumită
aplicaţie.

Funcţionalitatea bazei de date este asigurată de un program denumit motorul bazei de


date.

Deşi multe programe pot fi scrise în Microsoft Access folosind limbajul VBA, sistemul
Visual Basic este mai puternic; acesta permite compilarea unei aplicaţii finalizate care poate fi
instalată pe un sistem fără a impune executarea fundaţiei Microsoft Access, destul de mare sub
aspect dimensional.
Visual Basic este mai puternic şi conţine numeroase instrumente, care nu se află în
Microsoft Access, care simplifică procesul de creare a unei aplicaţii pentru bazele de date.
Cel mai important dintre acestea este Data control, care reprezintă o componentă vizibilă
ce asigură conectivitatea la un fişier tip bază de date şi la informaţiile conţinute în acesta.

2. Concepte esenţiale ale bazelor de date

Vom relua, pe scurt, noţiunile importante referitoare la bazele de date:

O bază de date reprezintă o colecţie de date înrudite, care se referă la un anumit subiect
sau obiectiv, împreună cu unstrumentele folosite pentru manipularea acestor date

105
Baza de date conţine următoarele elemente (aceste elemente ale bazei de date se numesc
obiecte Access):

- tabelul (table) - colecţie de date înrudite, stocate pe linii şi coloane; este compus
din coloane (domenii) de date (câmpuri) şi inregistrări (record), linia din cadrul tabelului
care conţine toate datele referitoare la un anumit element, numită şi tuplu;

- formular (form) - un obiect Access care afişează informaţiile dintr-un tabel intr-un
format diferit de cel al tabelului (altfel decât pe linii şi coloane); este folosit pentru
introducerea şi vizualizarea datelor dintr-un tabel, înregistrare cu înregistrare; foarte important
pentru formulare este că nu trebuie să conţină toate câmpurile unui anumit tabel;

- interogare (query) - un obiect Access care stochează întrebări cu privire la datele


stocate în baza de date; răspunsul la interogare poate fi utilizat pentru a manipula datele dintr-
un tabel, cum ar fi stergerea unei înregistrări sau vizualizarea datelor dintr-un tabel, care
îndeplinesc anumite criterii;

- raport (report) - un obiect Access care stochează detalii pentru afisarea sau
tipărirea datelor în mod organizat; permite rezumarea informaţiilor unei baze de date într-un
format potrivit pentru tipărire.

Dezvoltarea de aplicaţii de baze de date de mari dimensiuni este în acelaşi timp un fapt
banal, dar şi un fapt deosebit.
Banalitatea constă în faptul că un procent semnificativ din efortul de dezvoltare de aplicaţii se
îndreaptă spre acest domeniu.
Extraordinarul se leagă de complexitatea deosebită a acestor aplicaţii, care implică echipe mari de
proiectanţi, necesită atât experienţă în domeniu cât şi adaptarea la condiţii mereu noi.
Şi nu în ultimul rând, reprezintă o mare responsabilitate.
Cu toate că industria de software cunoaşte o adevărată explozie, cu toate că suntem literalmente
bombardaţi cu sute şi sute de aplicaţii din ce în ce mai complexe şi mai specializate, încă nu a fost
„inventat” un pachet software care să satisfacă necesităţile generale ale unei întreprinderi.
Chiar dacă ne restrângem pretenţiile la partea numită de obicei „de gestiune economică”, un astfel
de software nu se întrezăreşte la orizont, cu toate că în linii mari, toate întreprinderile funcţionează pe
aceleaşi principii.
Există pachete „de gata” care satisfac anumite nevoi specifice dar, la noi ca şi în alte părţi, elemente
specifice primează şi în consecinţă marea majoritate a întreprinderilor preferă să-şi construiască „la
comandă” sistemul informatic.

Un sistem de gestiune a bazelor de date (SGBD) este un mecanism al cărui principiu fundamental
constă, la modul cel mai general, în aşa-zisa abstractizare a datelor stocate pe suport.
Există trei nivele de abstractizare, corespunzând celor trei modele ale datelor: fizic, conceptual şi
logic.
- Modelul fizic (sau intern) priveşte datele aşa cum sunt ele stocate pe suport şi
reprezintă nivelul zero al abstractizării;
- Modelul conceptual priveşte datele prin semnificaţia lor reală;
- Modelul logic (sau extern) priveşte datele prin prisma utilizatorului final.

106
Pentru o baza de date pot exista mai multe modele logice, în funcţie de diversele categorii de
utilizatori finali.
Mecanismele de „proiecţie” între aceste nivele asigură ceea ce se cheamă de obicei independenţa de
date, adică stabilitatea aplicaţiilor la modificări în modul fizic de stocare a datelor.

Proiectarea aplicaţiilor de baze de date implică din această perspectivă două etape iniţiale extrem
de importante: proiectarea logică şi respectiv implementarea fizică a modelului de date. Modelul de
date formează fundaţia întregului sistem de aplicaţii ce va exploata baza de date.

Proiectarea logică (logical design) se referă la stabilirea modelului conceptual al bazei de date
care este în mare măsură independentă de SGBD-ul particular care va fi utilizat. Rezultatul acestei
etape a proiectării este un document care va cuprinde definiţia detaliată a structurilor de date ce vor fi
implementate împreună cu toate elementele de semantică asociate acestor structuri.
Implementarea fizică (physical implementation) constă în transpunerea pe SGBD-ul specific a
modelului conceptual realizat în etapa anterioară.
Concretizarea acestei etape constă într-un script (o listă de comenzi) realizat în limbajul
de descriere a datelor (DDL – Data Description Language) utilizat de SGBD-ul ales. Rolul
acestuia este să creeze şi să iniţializeze baza de date cu streucturile corespunzătoare celor
descrise în etapa anterioara.
Acest script se mai numeşte schema bazei de date şi va fi utilizat ca referinţă în proiectarea
aplicaţiilor propriu-zise.
Această etapă este extrem de complexă şi de importantă, deoarece ea stabileşte o serie de elemente
care vor influenţa funcţionalitatea, extensibilitatea şi, într-o destul de mare măsură, performanţa
ansamblului de aplicaţii care va fi dezvoltat. Metoda cea mai utilizată în această etapă este
cea a diagramelor Entitate – Relaţie (ER - Entity – Relationship).

Entităţile reprezintă abstractizări ale lucrurilor reale, fie ele concrete sau imateriale.
Ele pot corespunde unor persoane, obiecte, locuri, documente, concepte, etc.
Ceea ce interesează în proiectarea unei baze de date sunt doar tipurile de entităţi implicate în
activitatea modelată.
Identificarea acestora şi corecta lor evidenţiere este o problemă care ţine în mare măsură de
experienţa şi chiar de „flerul” proiectantului.
Cu toate acestea, câteva reguli pot fi folositoare.
Simplitatea este cea mai importantă.
Este preferabil să lucrăm cu mai puţine entităţi decât cu prea multe, deoarece pe parcursul
dezvoltării proiectului cele omise îşi vor cere cu siguranţă drepturile, în schimb cele inutile nu vor cere
explicit să fie excluse, complicând şi mai mult o activitate care numai de complexitate nu duce lipsă.
O altă regulă de bun simţ este denumirea lor cât mai clară şi sugestivă, deoarece aceste nume tind
să se perpetueze până în detaliile aplicaţiilor.
Este evident că entităţile nu pot cuprinde singure întreaga informaţie ce trebuie administrată
şi nici nu pot fi concepute ca „insule informaţionale”.

O bună parte din informaţia semnificativă legată de activitatea modelată se află tocmai în
relaţiile care există între entităţi.

Există trei clase principale de relaţii:


107
- relaţii one - to - one;
- relaţii one – to – many: cazul cel mai comun;
- relaţii many – to – many.

Modelul relaţional se bazează pe o modalitate unică de stocare, atât pentru entităţi cât şi
pentru relaţii între acestea: totul se stochează în tabele.

Primul pas în determinarea tabelelor este deci foarte clar: fiecărei entităţi îi va corespunde o
tabelă.

Dacă numele entităţilor a fost judicios stabilit, este de dorit ca tabelele să păstreze numele
entităţilor.
Totuşi, numele prea lungi nu sunt de dorit (de exemplu, tabela corespunzătoare entităţii
DEPARTAMENT o vom numi DEPT).
Problemele apar la stabilirea tabelelor care să stocheze relaţiile.
Teoretic, orice relaţie poate fi stocată într-o tabelă separată (care să conţină cheile prin care se face
legarea liniilor), dar la modul practic se recurge adesea la combinarea în aceeaşi tabelă a informaţiilor
referitoare la o entitate cu informaţii corespunzătoare unei relaţii.
Este din nou un pas în care experienţa şi flerul proiectantului are un cuvânt greu de spus.
Dacă s-a stabilit modul de stocare a relaţiilor între enităţi, acest pas nu pune probleme
speciale.
Raportul privind specificarea cerinţelor oferă informaţii suficiente pentru acest pas.
Din nou se cere multă atenţie la stabilirea unor denumiri sugestive pentru coloane şi la stabilirea
unei modalităţi consistente şi uniforme de notare (nu datorită unor constrângeri formale, ci pentru a
asigura proiectului un plus de claritate).
De pildă se pot folosi nume unice pentru aceeaşi informaţie, sau se pot utiliza prefixe stabilite pe
baza numelor tabelelor.

Unul dintre principiile fundamentale ale modelului relaţional este unicitatea liniilor unei
tabele.

O coloană sau o combinaţie de coloane care identifică în mod unic o linie este numită cheie
primară a tabelei.

Există situaţii în care există mai multe astfel de coloane sau combinaţii de coloane.
În aceste cazuri cheia primară este aleasă în funcţie de relevanţa lor în cazul specific al activităţii
modelate.

Celelalte chei posibile se cheamă chei candidate.

Atributul unei tabele care ia valori din domeniul unei chei primare a altei tabele se numeşte cheie
străină (stocarea relaţiilor între entităţi se face prin perechi formate dintr-o chei primară şi o cheie
străină).
În practică se evită în cele mai multe situaţii cheile primare formate din mai multe coloane în cazul
tabelelor corespunzătoare unor entităţi (aşa-numitele „nomenclatoare”), prin introducerea unui cod
anume creat care să joace rolul de cheie primară (de pildă „marca” pentru angajaţi, codul pentru
produse, etc).
Este important în acest caz să se stabilească o metodologie unitară şi coerentă de codificare,
deoarece o codificare defectuasă poate crea probleme enorme în exploatarea bazei de date.

108
Există mai multe metode răspândite, de cele mai multe ori bazate pe o combinaţie de informaţii,
cum ar fi de pildă o literă corespunzătoare unei anumite clasificări cu un cod numeric care să forţeze
unicitatea.
O tehnică utilă este stabilirea unei aşa-numite „cifre de control”, generată pe baza unui algoritm,
astfel încât riscurile de a introduce un cod greşit (care să „cadă” peste unul existent) să fie cât mai mici.

3. Aplicaţie

Lansarea programului Access se face prin selectarea opţiunii Microsoft Access din meniul
PROGRAMS (în care se intră prin clic pe butonul START).
Închiderea programului : se alege opţiunea EXIT din meniul FILE.

109
Crearea unei baze de date noi se poate face utilizând opţiunile casetei de dialog
Microsoft Access care apare în momentul în care lansezi aplicaţia sau utilizând comanda
New din meniul File.
Crearea unei baze de date prin intermediul casetei de dialog Microsoft Access presupune
parcurgerea următoarelor etape:

- Lansează în execuţie programul Access;


- Programul afişează caseta de dialog prezentată în imaginea următoare. În acest punct poţi
alege să deschizi o bază de date deja existentă, să creezi o nouă bază de date goală sau să lansezi
Database Wizard. Pentru cea de a doua opţiune selectează Blank Access Database.

- Se deschide caseta de dialog File New Database în care introduci numele bazei de date.

110
- Apasă butonul CREATE şi în acest moment baza de date va fi creată iar pe ecran apare
fereastra corespunzătoare acestei baze de date.

Crearea unei baze dedate utilizând comanda New din meniul File presupune parcurgerea următoarelor etape:
- Alege din meniul FILE opţiunea NEW;
- În caseta de dialog NEW selectează pictograma DATABASE şi se apasă butonul OK.

- În caseta de dialog FILE NEW DATABASE alege unitatea de disc şi folder-ul în care se
doreşte creeză baza de date şi specifică numele bazei de date.

- Apasă pe butonul CREATE


111
DESCHIDEREA UNEI BAZE DE DATE

Pentru a deschide o bază de date creată anterior trebuie să parcurgi următorii paşi:
- Selectează din meniul FILE, opţiunea OPEN.
- Dacă fişierul nu este în folder-ul curent caută folder-ul în care a fost salvată anterior baza de
date.
- Execută dublu clic pe fişier sau selectează-l şi apasă butonul OPEN pentru a-l deschide.

În Microsoft Access 2003, butonul OPEN din caseta de dialog OPEN are o listă derulantă:

- OPEN READY-ONLY – împiedică salvarea modificărilor din baza de date;


- OPEN EXCLUSIVE – împiedică alt utilizator să lucreze cu baza de date pe care ai
deschis-o;
- OPEN EXCLUSIVE READY-ONLY – aplică ambele restricţii.

112
Chestionar

1. Care este rolul programării bazelor de date?

2. Care este rolul principal al programului Microsoft Windows?

3. Care sunt componentele principale ale bazei de date Access?

4. Ce reprezintă macrocomenzile?

5. În ce este conţinut codul VBA?

6. Cum se defineşte procedura?

7. Care este structura unei proceduri VBA?

8. Care sunt tipurile de proceduri VBA?

9. Care sunt tipurile de module Access?

10. Cum se defineşte evenimentul?

11. Care sunt acţiunile pentru care sunt necesare macro-urile?

12. Care sunt obiectele VBA?

13. Cum definim proprietatea unui obiect?

14. Cum se asigură funcţionalitatea bazei de date?

113
Curs 11: Tabele: crearea tabelelor, lucrul cu tabele

1. Crearea tabelelor
2. Lucrul cu tabele

1. Crearea tabelelor

Tabelele asigură într-adevăr cadrul de lucru pentru orice bază de date; nu numai că
păstrează datele introduse în baza de date, ci sunt proiectate astfel încât să poată fi stabilite
relaţii între diferite tabele ale bazei de date.

Tabelele sunt foi de calcul tabelar ale unei baze de date, care organizează pe linii şi
coloane, datele afişate pe ecran.

Înainte de a începe crearea tabelelor unei baze de date este bine:

- să se analizeze datele pentru a stabili relaţiile dintre acestea;

- să se prelucreze şi să se separe datele pentru a putea crea tabele cât mai mici şi cât
mai uşor de înţeles de către cei care vor lucra cu ele;

- să se precizeze cum pot fi folosite facilităţile programului Microsoft Access;

Pentru a crea un tabel se urmăresc următorii paşi:

În fereastra DATABASE, execută dublu-clic pe opţiunea Create Table in Design View. Se deschide
modul de vizualizare Table Design.

114
Tastează un nume de câmp în primul rând din coloana Field Name, apoi apasă tasta TAB pentru a
trece în coloana Data Type.

- Când treci la coloana Data Type, apare o listă derulantă. Deschide lista derulantă şi selectează un
tip de câmp (vezi secţiunea Tipuri de date şi formate).

Notă: 1. Numele câmpurilor din Access pot avea o lungime de cel mult 64 de
caractere şi pot conţine spaţii precum şi alte caractere, cu excepţia punctului (.), a
semnului de exclamaţie (!), a accentului grav (`) sau a parantezelor drepte.

Notă: 2. Evită simbolurile $, % sau # în numele de câmpuri, pentru că unele


dintre acestea au anumite semnificaţii în programul Access.

- Apasă tasta TAB pentru a trece în coloana Description şi introdu o descriere a câmpului (operaţie
facultativă).
- În jumătatea inferioară a casetei de dialog, vezi panoul Field Properties pentru tipul de câmp
pe care l-ai selectat. Poţi face orice modificări doreşti (vezi secţiunea Tipuri de date şi formate).
- Dacă ai mai multe câmpuri de introdus, repetă paşii anteriori.
- Execută clic pe butonul CLOSE (X) al ferestrei Table Design.
- Când eşti întrebat dacă vrei să salvezi modificările operate în tabel, execută clic pe Yes. Apare
caseta de dialog Save As.

- Tastează un nume pentru tabel în caseta Table Name şi apoi execută clic pe OK.
115
- În final, tabelul va apărea în fereastra DATABASE, în secţiunea TABLES.

Datele care vor fi conţinute de acest tabel se introduc în felul următor:


- Execuţi dublu-clic pe numele tabelului. Acesta se va deschide în modul de vizualizare Datasheet View.
- Vei introduce datele în coloanele corespunzătoare conform tipului ales pentru câmpul respectiv.

SALVAREA TABELELOR

Etape:

- Vei alege din meniul FILE opţiunea SAVE sau vei apăsa pe butonul SAVE de pe bara de
instrumente standard.
- Pe ecran va apărea caseta SAVE AS în care vei specifica numele tabelei şi în final vei apasă OK.

116
Notă: Vizualizarea ulterioară şi modificarea structurii unui tabel se va face
prin selectarea acestuia şi apăsarea pe butonul DESIGN.

Creează baza de date PERSONAL.DBF care să conţină tabela SALARIATI cu următoarea


structură:

Tabela SALARIATI va avea conţinutul afişat pe pagina anterioară.

TIPURI DE DATE

Fiecare câmp trebuie să fie de un anumit tip, pentru ca Access să ştie cum să-i trateze conţinutul.
Tipurile sunt următoarele:
- TEXT – secvenţă simplă de caractere care poate include cifre, litere şi simboluri. Un câmp
text poate conţine până la 255 de caractere.
- MEMO – text simplu, obişnuit, exceptând faptul că nu stabileşti o lungime maximă de câmp,
aşa că poţi tasta aproape orice cantitate de text (64.000 de caractere).

117
- NUMBER – destinat pentru valori întregi sau fracţionare.
- DATE/TIME – o dată calendaristică sau o oră.
- CURRENCY – un număr formatat ca o valoare monetară.
- AUTONUMBER – Access îl completează automat cu numere consecutive, pentru fiecare
înregistrare.
- YES/NO – poate primi valori logice de tipul YES/NO, TRUE/FALSE sau ON/OFF.
- OLE OBJECT – câmp capabil a primi ca valoare un obiect (ex. imagine); obiectul poate fi
legat sau inserat.
- HYPERLINK – o legătură la o locaţie Web.
- LOOKUP WIZARD – îţi permite să creezi o listă selectând o valoare din alt tabel sau lista
de valori într-o casetă combinată, pentru fiecare înregistrare. Este o caracteristică avansată.

TIPURI DE FORMATE

În afară de tipul său, fiecare câmp are opţiuni de formatare pe care le poţi configura. Acestea apar
în jumătatea inferioară a casetei de dialog, în zona Field Properties.
Opţiunile de formatare se modifică în funcţie de tipul câmpului.
Cele mai importante tipuri de formate:
- FIELD SIZE – Numărul maxim de caractere pe care-l poate introduce un utilizator în acest
câmp (se aplică doar câmpurilor de tip Text).
- FORMAT – O listă derulantă cu formatele disponibile pentru acel tip de câmp. De asemenea,
poţi crea formate personalizate.
- DECIMAL PLACES – Pentru câmpurile numerice, poţi stabili numărul implicit de poziţii
zecimale pe care le poate afişa un număr.
- DEFAULT VALUE – Dacă, în mod obişnuit, un câmp conţine o anumită valoare, poţi
introduce acea valoare aici pentru a economisi timp. Va apărea în fiecare nouă înregistrare şi vei putea
să o înlocuieşti în rarele ocazii când nu este valabilă.
- REQUIRED – Alege YES şi NO pentru a comunica programului ACCESS dacă i se permite
unui utilizator să lase acel câmp necompletat.

STABILIREA CHEII PRINCIPALE

Fiecare tabel ar trebui să aibă cel puţin un câmp a cărui valoare este unică pentru fiecare
înregistrare (câmp cheie principală).
Acest câmp este util pentru a identifica în mod unic fiecare înregistrare.
Pentru a stabili o cheie principală trebuie să parcurgi următorii paşi:

- Deschide tabelul afişând structura acestuia.


- Selectează câmpul care vrei să fie cheie principală.

118
- Alege din meniul EDIT opţiunea PRIMARY KEY.

COMUTAREA ÎNTRE MODURILE DE VIZUALIZARE DESIGN ŞI DATASHEET

Când lucrezi cu tabele, sunt disponibile două moduri de vizualizare: DESIGN şi DATASHEET.
O metodă simplă de a comuta între ele este executarea unui clic pe săgeata orientată în jos de lângă
butonul VIEW de pe bara de instrumente. Apoi selectează modul de vizualizare dorit din lista
derulantă care apare.

O altă metodă de a comuta între modurile de vizualizare este următoarea:


- Deschide meniul VIEW.
- Selectează TABLE DESIGN sau DATASHEET, în funcţie de modul de vizualizare în
care vrei să comuţi.

EDITAREA TABELELOR

După crearea tabelelor, acestea pot fi modificate ulterior efectuând operaţiile de mai jos.

ADĂUGAREA CÂMPURILOR

Poţi adăuga un câmp în modul de vizualizare TABLE DESIGN astfel:


- Execută clic pe selectorul de înregistrări (pătratul gri de la stânga numelui câmpului)
pentru a selecta câmpul în faţa căruia doreşti să apară noul câmp.
- Selectează din meniul INSERT opţiunea ROW sau apasă tasta INSERT. Apare un rând
gol în lista FIELD NAME.

119
- Introdu un nume, un tip, o descriere şi celelalte informaţii legate de formatare.

ŞTERGEREA CÂMPURILOR

Etape:
- Comută în modul de vizualizare TABLE DESIGN, dacă nu eşti în acest mod.
- Selectează un câmp.
- Din meniul EDIT selectează opţiunea DELETE ROWS sau apasă tasta DELETE.

ASCUNDEREA CÂMPURILOR

Dacă nu vrei să utilizezi un câmp la un moment dat, dar vei avea nevoie de el mai târziu, este mai
bine sa îl ascunzi decât să-l ştergi.
Ascunderea unui câmp are două avantaje:
- Dacă ai introdus înregistrări, poţi păstra toate datele pe care le-ai introdus în acel câmp.
- Proprietăţile câmpului, pe care le-ai configurat atunci când ai creat câmpul, rămân
neschimbate, aşa că nu trebuie să le introduci din nou.
Ascunderea unui câmp se face astfel:
- Comută în modul de vizualizare DATASHEET, dacă nu eşti în acest mod.
- Selectează câmpurile pe care vrei să le ascunzi.
- Selectează din meniul FORMAT opţiunea HIDE COLUMNS, sau execută clic-dreapta
pe coloanele respective şi selectează HIDE COLUMNS. Coloanele dispar.

120
Pentru a face să reapară coloanele trebuie să parcurgi paşii următori:
- Selectează din meniul FORMAT opţiunea UNHIDE COLUMNS. Apare caseta de
dialog UNHIDE COLUMNS. Câmpurile care au semn de bifare lângă ele nu sunt ascunse; câmpurile
fără semn de bifare sunt ascunse.

- Execută clic pe caseta de validare a fiecărui câmp pe care vrei să-l reafişezi.
- Execută clic pe butonul CLOSE.

ŞTERGEREA TABELELOR

Etape:
- În fereastra DATABASE, execută clic pe tipul de obiect TABLES.
- Selectează tabelul pe care vrei să-l ştergi.

- Selectează din meniul EDIT opţiunea DELETE sau apasă tasta DELETE.
- Apare un mesaj care te întreabă dacă eşti sigur că vrei acest lucru. Execută clic pe YES.

121
2. Lucrul cu tabele de date

INTRODUCEREA ÎNREGISTRĂRILOR

Etape:
- Execută clic în celula în care vrei să introduci date şi tastează-le.
- Apasă tasta TAB pentru a trece la câmpul următor şi tastează noua valoare.

- Continuă să apeşi tasta TAB până când ajungi la ultimul câmp. Când apeşi tasta TAB în
ultimul câmp, punctul de inserare se mută în primul câmp din următorul rând, unde poţi începe o nouă
înregistrare.
- Continuă să introduci înregistrări până termini.

DEPLASAREA ÎNTR-UN TABEL

Principalele scurtături de la tastatură care se utilizează pentru deplasarea în interiorul unui tabel sunt:

Explicaţie Scurtătura
Câmpul următor TAB
Câmpul anterior SHIFT+TAB
Ultimul câmp din înregistrare END
Primul câmp din înregistrare HOME
Acelaşi câmp din următoarea ↓
înregistrare
Acelaşi câmp din înregistrarea ↑
anterioară
Acelaşi câmp din ultima înregistrare CTRL+↓
Acelaşi câmp din prima înregistrare CTRL+↑
Ultimul câmp din ultima înregistrare CTRL+END
Primul câmp din prima înregistrare CTRL+HOME

122
TIPĂRIREA UNUI TABEL

Pentru tipărirea unui tabel ai la dispoziţie două variante:


- Prima variantă:
- Deschide tabelul.

- Execută clic pe butonul PRINT de pe bara de instrumente. Tabelul este tipărit.

- Cea de a doua variantă:


- Alege din meniul FILE opţiunea PRINT. În caseta de dialog PRINT configurează
opţiunile de tipărire.

ÎNLOCUIREA CONŢINUTULUI UNEI CELULE

Etape:
- Selectează celula executând clic pe aceasta. (dacă vrei să fie selectat întregul conţinut,
poziţionează indicatorul mouse-ului pe marginea din stânga a celulei astfel încât indicatorul să devină
un semn „+”, apoi execută clic).
- Tastează noile date care le înlocuiesc pe cele vechi.

123
SELECTAREA ÎNREGISTRĂRILOR

În afară de selectarea anumitor celule dintr-o înregistrare, dacă vrei să lucrezi cu o întreagă
înregistrare trebuie să efectuezi operaţiunea de selecţie.
Pentru a realiza acest lucru, executa clic pe pătratul gri de la stânga înregistrării. Întreaga
înregistrare apare evidenţiată (litere albe pe fond negru).

INSERAREA DE NOI ÎNREGISTRĂRI

Noile înregistrări sunt inserate automat. Când începi să tastezi o înregistrare, apare un nou rând sub
ea, aşteptând o altă înregistrare, aşa cum se vede în figura de mai sus.
Nu poţi să inserezi noi înregistrări între cele existente. Acestea trebuie să fie introduse la sfârşitul
tabelului.

ŞTERGEREA ÎNREGISTRĂRILOR

Etape:
- Selectează înregistrările pe care vrei să le ştergi.
- Execută una din următoarele acţiuni:
- Apasă tasta DELETE.
- Selectează din meniul rapid opţiunea DELETE RECORD
- Selectează din meniul EDIT opţiunea DELETE
- Selectează din meniul EDIT opţiunea DELETE RECORD.

124
MUTAREA ŞI COPIEREA DATELOR

Etape:
- Selectează câmpurile, înregistrările, celulele sau zonele de text pe care vrei să le muţi sau
copiezi.
- Deschide meniul EDIT şi selectează CUT (pentru mutare) sau COPY (pentru a copiere).
- Poziţionează punctul de inserare acolo unde vrei să inserezi materialul copiat sau tăiat.
- Alege din meniul EDIT opţiunea PASTE.

125
FORMATAREA TABELELOR

MODIFICAREA LĂŢIMII COLOANELOR SAU A RÂNDURILOR

Una dintre cele mai uzuale metode de ajustare a lăţimii coloanelor sau a rândurilor se efectuează
astfel:
- Poziţionează indicatorul mouse-ului între două nume de câmpuri (capete de coloana) sau
între două rânduri. Astfel încât acesta să se transforme într-o linie orizontală cu săgeţi orientate la
stânga şi la dreapta.

- Execută clic şi ţine apăsat butonul mouse-ului şi apoi trage marginea coloanei sau a
rândului.
- Eliberează butonul mouse-ului în momentul în care rândul sau coloana au dimensiunea
dorită.

MODIFICAREA FONTULUI ŞI A DIMENSIUNII TEXTULUI

Daca vrei să modifici aspectul conţinutului tabelului trebuie să parcurgi următorii paşi:
- Din meniul FORMAT, alegi opţiunea FONT. Apare caseta de dialog FONT.

- Aplică opţiunile de formatare dorite (tip, dimensiune, stil).


- Apeşi OK.

Notă: Formatările se aplică asupra întregului conţinut al tabelului.


126
CREAREA RELAŢIILOR ÎNTRE TABELE

DEFINIREA RELAŢIILOR

Relaţia între două tabele este necesară, în general, pentru construirea interogărilor care acţionează
asupra acestor table (deşi relaţia s-ar putea construi şi când se construieşte interogarea).

TIPURI DE RELAŢII:

Relaţia One-To-Many – Este cea mai frecventă în proiectarea bazelor de date ACCESS şi are
următoarele caracteristici:
- Dacă T1 (Tabela CLIENTI) şi T2 (Tabela Operatii) sunt două tabele în care există o
relaţie One-To-Many atunci:
- Tabela T1 este tabela primară iar T2 este tabela legată.
- Cheia de legătură din tabela primară trebuie să fie declarată cheie primară.
- Tabela legătură poate avea cheie primară dar diferită de cea de legătură.
- Fiecărei înregistrări din tabela One îi corespunde 0, 1 sau mai multe înregistrări din
tabela Many;
- Fiecărei înregistrări din tabela Many îi corespunde cel mult o înregistrare din tabela
One.

Relaţia One-To-One – Este utilizată mai rar în proiectarea bazelor de date ACCESS şi are
următoarele caracteristici:
- Cheile de legătură din ambele tabele sunt chei primare; fiecărei înregistrări din una din
tabele îi corespunde cel mult o înregistrare din cealaltă.
- Una din tabele este primară iar cealaltă legată.

Relaţia Many-To-Many - Este nerecomandată în baze de date ACCESS dar existentă în realitate.
Doua tabele se află în relaţia Many-to-Many dacă fiecărei înregistrări din prima tabelă îi
corespunde 0,1 sau mai multe înregistrări din a doua şi invers.
În ACCESS astfel de relaţii pot fi introduse prin crearea unei a treia tabele, numită de legătura (de
joncţiune) cu existenţa a două relaţii de tip One-to-Many.
Pentru a putea explica modul în care funcţionează relaţiile am creat o bază de date BANCA.
127
Această bază de date conţine următoarele tabele:

- Tabela CLIENTI:

- Această tabelă are următorul conţinut:

- Tabela SOLD:

- Această tabelă are următorul conţinut:

128
- Tabela DENMONEDA:

- Aceasta tabela are următorul conţinut:

- Tabela DENOPERATII:

- Această tabelă are următorul conţinut:

- Tabela OPERATII:

129
- Această tabelă are următorul conţinut:

Etapele creării relaţiilor sunt:


- Deschizi baza de date (în cazul nostru BANCA).
- Din meniul TOOLS alegi opţiunea RELATIONSHPS.

130
Pe ecran apare fereastra RELATIONSHIPS care are următoarea formă:

Notă: Dacă caseta de dialog SHOW TABLE nu apare, apasă butonul


SHOW TABLE de pe bare de instrumente.

Selectează tabelele între care vrei să creezi relaţii şi apasă butonul ADD. Aceste tabele vor fi introduse
în fereastra RELATIONSHIPS.
Exemplu:
- Creează în continuare o relaţie One-To-Many între tabelele CLIENTI şi OPERATII. Pentru
a realiza acest lucru selectează în caseta de dialog SHOW TABLE cele două tabele şi inserează-le în
fereastra RELATIONSHIPS. În tabela CLIENTI selectează câmpul CodClient.

- Poziţionează cursorul pe câmpul CodClient (tabela CLIENTI), „agată-l” cu mouse-ul şi


trage-l peste câmpul CodClient (tabela Operatii). Pe ecran apare caseta de dialog
EDIT RELATIONSHIP în care poţi să specifici caracteristicile relaţiei.

131
Această fereastră are următorii parametrii:
- ENFORCE REFERENTIAL INTEGRITY – unei înregistrări din tabela
primară (CLIENTI) îi corespunde cel puţin o înregistrare din tabela legată (OPERATII).
- CASCADE UPDATE RELATED FIELDS – în acest caz, modificarea unei
valori pe câmpul CodClient (din tabela CLIENTI) înseamnă modificarea automată a tuturor valorilor
respective şi în tabela OPERATII.
- CASCADE DELETE RELATED RECORDS – în acest caz, ştergerea unei
înregistrări din tabela primară presupune ştergerea tuturor înregistrărilor din tabela legată.
- În final, vei apăsa butonul CREATE şi pe ecran fereastra RETAIONSHIPS va
arăta astfel:

Observaţie:
În imaginea de mai sus observi că lângă tabelul CLIENTI (câmpul CODCLIENT) apare cifra 1 iar
lângă tabelul OPERATII (câmpul CODCLIENT) apare simbolul ∞ . Aceste simboluri apar în relaţiile
în care caracteristica integritate referenţială („ENFORCE REFERENTIAL INTEGRITY”) este
activată. Simbolul ∞ înseamnă mulţi – indicând faptul că mai multe înregistrări din acest tabel pot să
corespundă unei singure înregistrări (simbolul 1) din tabelul legat.
Exemplu:
Să se creeze următoarele relaţii în baza de date BANCA:

132
SORTAREA, FILTRAREA ŞI INDEXAREA DATELOR

SORTAREA DATELOR

Etape:
- Deschide tabela pe care vrei să o sortezi;
- Plasează punctul de inserare în câmpul pe care vrei să-l sortezi.

- Execută clic pe butoanele Sort Ascending sau Sort Descending . Înregistrările


sunt sortate după câmpul selectat.

Înainte de sortare:

După sortarea după câmpul NUME:

Notă: Pentru a aranja înregistrările în ordinea în care se aflau în momentul


iniţial, selectează din meniul RECORDS opţiunea REMOVE FILTER/SORT.

FILTRAREA DATELOR

Un filtru este o restricţie care se pune înregistrărilor unei tabele, unei forme sau unui raport
pentru a afişa doar anumite înregistrări specificate.
În această lecţie vom analiza doar filtrele la nivel de tabelă.
Filtrarea este utilă în acele cazuri în care vrei să înlături multe înregistrări, astfel încât să poţi vedea
doar pe cele care te interesează. Filtrarea micşorează temporar numărul de înregistrări afişate, conform
criteriilor de selecţie.
133
FILTRAREA DATELOR PRIN SELECŢIE

Filtrarea prin selecţie este cea mai simplă metodă de filtrare, dar înainte de a o utiliza, trebuie să
localizezi o apariţie a valorii pe care doreşti să o conţină înregistrările filtrate.
Pentru a filtra prin selecţie vei parcurge următorii paşi:
- Într-un câmp vei găsi o apariţie a valorii pe care vrei să o conţină toate înregistrările
filtrate.
- Selectează valoarea.

- Execută clic pe butonul FILTER BY SELECTION de pe bara de instrumente


sau selectează din meniul RECORDS opţiunea FILTER şi apoi FILTER BY SELECTION.
Exemplu: filtrează tabela OPERATII astfel încât să fie afişaţi doar clienţii cu codul 101.
Înainte de filtrare:

După filtrare:

Notă: Renunţarea la condiţia de filtrare se face prin apăsarea pe butonul

REMOVE FILTER .

134
FILTRAREA DATELOR PRIN FORMULAR

Este o metodă de filtrare mult mai puternică decât filtrarea prin selecţie.
Cu Filter by Form poţi aplica mai multe criterii de filtrare simultan.
De asemenea, poţi configura filtre „sau”, care găsesc înregistrări ce îndeplinesc oricare din criteriile
stabilite. Poţi chiar să introduci expresii logice („mai mare decât” o anumită valoare).
Etape:
- Deschide tabela pe care vrei sa o filtrezi în modul de vizualizare DATASHEET.

- Execută clic pe butonul FILTER BY FORM sau din meniul RECORDS, alege
opţiunea FILTER şi apoi FILTER BY FORM. Apare un formular gol semănând cu o foaie de date
goală, cu o singură linie de înregistrare.

- Execută clic pe câmpul pentru care vrei să stabileşti un criteriu. Apare o săgeată orientată
în jos pentru o listă derulantă. Execută clic pe săgeată şi selectează din listă o valoare sau poţi tasta
valoarea direct în câmp.

- Dacă vrei să stabileşti o condiţie „sau”, execută clic pe eticheta OR de la baza ferestrei şi
vei introduce criteriul alternativ.

- În final se apasă pe butonul APPLY FILTER pentru a aplica filtrul.

Notă: În exemplul de mai sus am aplicat un filtru pentru clienţii care au


codul 101 sau 102.

135
În final, rezultatul filtrării este următorul:

Notă: Eliminarea filtrului o vei face prin apăsarea pe butonul

REMOVE FILTER situat pe bara de instrumente.

136
INDEXAREA DATELOR

Indexurile accelerează căutările, catalogând conţinutul unui anumit câmp. Câmpul cheie principală
este indexat în mod automat. Dacă însă cauţi, sortezi sau filtrezi în mod frecvent utilizând un alt câmp,
poţi să creezi un index şi pentru acel câmp.

Notă: Nu poţi indexa un câmp ale cărui date sunt de tip Memo, Hyperlink sau
obiect OLE.

Etapele indexării:
- Deschide tabelul în modul de vizualizare DESIGN.
- Selectează câmpul pe care vrei să-l indexezi.
- În pagina etichetei GENERAL, execută clic pe câmpul INDEXED.

Din lista derulantă a câmpului INDEXED, selectează fie YES (Duplicates OK) fie YES (No
Duplicates), în funcţie de conţinutul câmpului care poate fi sau nu unic pentru fiecare înregistrare.

Salvează modificările şi închide tabelul.

Notă: Nu poţi face nimic deosebit cu un index. Indexul nu este un obiect, aşa
cum sunt tabelele, bazele de date sau interogările. Rolul indexului este de a accelera
căutările dar nu are funcţiile sale independente.

137
Chestionar

1. Cum definim tabelele?

2. Care este rolul tabelelor?

3. Ce acţiuni se întreprind înainte de crearea tabelelor?

4. Care sunt tipurile de date folosite de Access?

5. Care este semnificaţia câmpului cheie principală?

6. Ce moduri de vizualizare sunt disponibile când se lucrează cu tabelele?

7. Cum definim filtrul?

8. Care este importanţa indexărilor?

138
Curs 12: Queries: cereri

1. Cereri de selecţie
2. Cereri CROSSTAB, cereri de acţiune

1. Cereri de selecţie

O interogare (cerere) este o întrebare pe care o putem pune unui tabel sau unor tabele de
baze de date.
Interogările, în general, permit specificarea:

-câmpurilor de tabel care apar în interogare;


-ordinea câmpurilor din interogare;
-criteriile de filtrare şi de sortare pentru fiecare câmp din tabel.

Interogarea (cererea) permite chestionarea bazei de date, folosind diverse criterii care pot
sorta, filtra şi rezuma datele tabelului.
Interogările reprezintă un instrument performant pentru analizarea şi rezumarea informaţiilor
din baza de date.
Access oferă mai multe metode prin care te ajută să restrângi domeniul informaţiilor pe care le
cauţi, inclusiv prin sortare şi filtrare.
Cel mai flexibil mod de a sorta şi filtra date este cererea iar cel mai important fapt este că le poţi
salva şi utiliza pentru a crea tabele, pentru a şterge înregistrări sau pentru a copia înregistrări într-un
alt tabel.
Cererile îţi permit să specifici:
- Câmpurile pe care vrei să le vezi;
- Ordinea în care trebuie să apară câmpurile;
- Criteriile de filtrare pentru fiecare câmp;
- Ordinea în care vrei să fie sortat fiecare câmp.
Rezultatul unei cereri este o tabelă virtuală.

139
CERERI DE SELECŢIE

CREAREA CERERILOR DE SELECŢIE

Cererile de selecţie sunt obiecte Access care solicită baza de date să răspundă anumitor întrebări
formulate de utilizator.
Crearea cererilor de selecţie se face în felul următor:

- Selectează fişa de opţiuni QUERIES din fereastra DATABASE.

- Apasă butonul NEW, apoi selectează opţiunea DESIGN VIEW.

140
Adaugă din caseta de dialog SHOW TABLE, în spaţiul de lucru al constructorului de cereri
(Queries Builder), tabelele sau cererile care stau la baza noii cereri; În cazul în care între tabelele
respective există relaţii, acestea se păstrează şi în cazul interogărilor.

- Închide caseta de dialog SHOW TABLE; apare o machetă prin intermediul


căreia se poate proiecta cererea.

Notă: În situaţia în care, din diverse motive, caseta de dialog SHOW TABLE nu se
deschide automat, se apasă butonul SHOW TABLE .

- Vei alege câmpurile în zona FIELD.

- În zona SORT vei specifica câmpul (câmpurile) după care va fi sortată cererea.

141
- În final se apasă pe butonul VIEW de pe bara de instrumente pentru a vedea
rezultatul interogării.

Exemplu:
În cererea de mai sus am introdus câmpurile NUME, PRENUME (Tabela CLIENTI), CANT
(Tabela OPERATII), DENMON (Tabela DenMoneda) şi DENOP (Tabela DenOperatii).

Rezultatul interogării este următorul:

SELECTAREA UNEI COLOANE

Etape:
- Deschide o cerere în modul DESIGN.
- Apasă pe bara superioară a câmpului respectiv şi câmpul va fi selectat.

142
ŞTERGEREA UNEI COLOANE

Etape:
- Selectează coloana;
- Apasă tasta DELETE.

MUTAREA UNEI COLOANE

Etape:
- Selectează coloana;
- Cu indicatorul mouse-ului poziţionat în selectorul de coloane trage coloana în locul dorit.

INSERAREA UNEI COLOANE

Etape:
- Selectează coloana;
- Din meniul INSERT alege opţiunea COLUMNS.

143
AFIŞAREA PROPRIETĂŢILOR UNUI CÂMP DIN CERERE

Etape:
- Selectează coloana;

- Apasă butonul PROPERTIES aflat pe bara de instrumente. Pe ecran va fi


afişată caseta PROPERTIES.

EXEMPLE

Exemplul 1 – cerere pentru afişarea salariaţilor care nu sunt şefi.


Utilizează baza de date PERSONAL (tabela SALARIATI).
Proiectarea cererii arată astfel:

Notă: 1. Primul câmp al cererii este un câmp calculat având numele „NUME
SI PRENUME”; valoarea unui astfel de câmp este dată de o expresie (concatenarea
prenumelui cu numele).
144
Notă: 2. Câmpurile calculate sunt neactualizabile, adică nu se pot face
modificări în interiorul acestora, modificări care să se reflecte şi în tabelele ce compun
cererea respectivă.

Notă: 3. Câmpul SEF este trecut în cerere numai pentru a fi pusă condiţia de
filtrare (FALSE) asupra lui; nefiind bifat în linia SHOW, nu este prezent în rezultatul
cererii.

Rezultatul cererii este:

Exemplul 2 – cerere de selecţie cu sortare după două câmpuri.


Utilizează baza de date PERSONAL (tabela SALARIATI).
Îmi propun o afişare a salariaţilor sortaţi după funcţie şi, în cadrul aceleiaşi funcţii, după nume însă
ordinea de afişare să fie mai întâi numele şi apoi funcţia.

Proiectarea cererii arată astfel:

145
Notă: S-a utilizat câmpul nume de două ori, a doua oară acesta nefiind afişat.

Rezultatul cererii este următorul:

Exerciţiul 3 – cerere de selecţie cu utilizarea opţiunii „OR”.

Vei utiliza baza de date PERSONAL (tabela SALARIATI).


Vor fi afişaţi doar angajaţii care au funcţia de inginer sau medic din tabela SALARIATI iar sortarea
să se facă ascendent după câmpul NUME.

Proiectarea cererii arată astfel:

146
Rezultatul cererii este următorul:

Exemplul 4 – cerere de selecţie cu utilizarea unei anumite condiţii.


Vei utiliza baza de date PERSONAL (tabela SALARIATI).
Vor fi afişaţi doar angajaţii care au salariul „mai mare sau egal” cu 4.000.000 lei.
Ordonarea se va face ascendent după câmpul MARCA.
Proiectarea cererii arată astfel:

147
Rezultatul cererii este următorul:

Exemplul 5 – cerere de selecţie cu utilizarea unui câmp calculat.


Vei utiliza baza de date PERSONAL (tabela SALARIATI).
În tabela SALARIATI se va introduce un câmp AVANS (Numeric – Long Integer) după câmpul
SALARIUL şi se va completa cu valori.
Vom încerca să calculăm prin intermediul unei cereri lichidarea care i se cuvine salariatului după
formula: LICHIDARE=SALARIUL-AVANS. Sortarea se va face după câmpul MARCA ascendent.

Proiectarea cererii arata astfel:

Rezultatul cererii este următorul:

În cel de-al doilea exemplu vom încerca să indexăm salariul cu 20%.


148
Proiectarea cererii arată astfel:

Rezultatul cererii este următorul:

149
CERERE DE SELECŢIE FOLOSIND FUNCŢII DE AGREGARE

Cu funcţiile de agregare putem obţine diverse statistici pe valori de câmpuri.


Principalele funcţii de agregare sunt:
SUM – sumă
AVG – medie
MIN – minimul
MAX – maximul
FIRST – prima înregistrare
LAST – ultima înregistrare

În exemplul de mai jos vom calcula suma, media, minimul şi maximul tuturor salariaţilor care nu
sunt şefi.
Proiectarea cererii arată astfel:

Rezultatul cererii este următorul:

150
CERERE DE SELECŢIE FOLOSIND FUNCŢII DE AGREGARE PE GRUPURI DE ÎNREGISTRĂRI

În exemplul următor vom încerca să obţinem anumite date statistice referitoare la înregistrări
grupate după câmpul FUNCTIA care nu sunt şefi.
Proiectarea cererii arată astfel:

Rezultatul cererii este următorul:

Observaţie:
După cum observi s-a folosit funcţia GROUP BY pentru gruparea valorilor în câmpul FUNCTIA.
Poţi să specifici şi grupurile pe care vrei să le afişezi astfel:

151
Iar rezultatul va fi următorul:

CERERE DE SELECŢIE PARAMETRICE

Cererile de selecţie parametrice sunt cereri în care condiţia se poate schimba de la o execuţie la
alta.
În condiţie pot fi introduse câmpuri inexistente pentru care sistemul cere valori.

În cererea de mai jos se pot selecta salariaţii de o anumită funcţie.

În momentul rulării cererii, pe ecran apare o fereastră prin intermediul căreia ţi se cere să introduci
parametrul dorit (în cazul nostru FUNCTIA).

Apeşi OK şi rezultatul execuţiei cererii este:

152
2. Cereri CROSSTAB, cereri de acţiune

Sunt cereri care realizează suma, media, numărarea sau alte tipuri de totaluri şi apoi grupează
rezultatul pe două tipuri de informaţie (row headings şi column headings).
Exemplu:
Creează baza de date VANZARI.
Să se creeze în această bază de date, tabela AgentiVanzari cu următoarea structură:

Conţinutul tabelei să fie cu următorul:

Să se creeze şi tabela Vanzari cu structura:

153
Conţinutul tabelei să fie cu următorul:

Între tabela AgentiVanzari şi Vanzari creează o relaţie One-To-Many de forma:

Creează o cerere de tip CrossTab având sursa formată din tabelele Vanzari şi AgentiVanzari.

Proiectarea cererii arată astfel:

Notă: Introducerea rubricii CrossTab se face alegând din meniul QUERY


opţiunea CROSSTAB QUERY.
154
În cererea de mai sus am grupat valorile câmpurilor NUME şi CATPROD şi am utilizat funcţia
SUM pentru câmpul VANZARI.
În rezultatul final câmpul NUME va reprezenta liniile tabelului rezultat, câmpul CATPROD
coloanele tabelului rezultat iar câmpul VANZARI va reprezenta valorile acestui tabel.
Rezultatul interogării este următorul:

Cereri de acţiune
O cerere de acţiune este o cerere care face schimbări la una sau mai multe înregistrări printr-o
singură operaţie.
Există patru tipuri de cereri de acţiune:
- Cereri UpDate (de actualizare).
- Cereri Delete (de ştergere).
- Cereri Append (de adăugare).
- Cereri Make Table (de creare de tabele).

CERERI UPDATE

Acest tip de cerere face schimbări globale la un grup de înregistrări în una sau mai multe tabele.
În exemplul de mai jos vei încerca indexarea salariului tuturor medicilor din baza de date
PERSONAL (tabela SALARIATI) cu 20%.
Proiectarea cererii arată astfel:

Introducerea rubricii CrossTab se face alegând din meniul QUERY opţiunea UPDATE QUERY.

155
După proiectarea cererii trebuie parcurse următoarele etape:

- Apasă butonul RUN aflat pe bara de instrumente.


- Pe ecran apare caseta de confirmare a modificărilor respective.

- Daca apeşi YES, modificările respective se vor produce în tabela (tabelele)


respectivă.
- Dacă vrei să vezi modificările pe care le-ai efectuat apasă pe butonul
DATASHEET .

Rezultatul execuţiei cererii este următorul:

CERERI MAKE TABLE

Acest tip de cerere creează o tabelă din datele uneia sau a mai multor tabele.
În exemplul următor creează prin intermediul unei cereri de tip MakeTable, având ca sursă baza de
date PERSONAL (tabela SALARIATI), o tabelă SALNOU care să conţină doar câmpurile Marca,
Nume, Functia, Sef şi AreSefPe.

156
Creează o cerere noua cu câmpurile specificate.
Etape:

- Din meniul QUERY alege opţiunea MAKE-TABLE QUERY.


- În caseta de dialog Make Table tastează numele noului tabel (SalNou) şi apasă
OK.

- În final, apasă butonul RUN . Pe ecran apare caseta de dialog de confirmare


a tabelei SALNOU.

- Apasă butonul YES şi noua tabelă (SalNou) va fi creată.

CERERI APPEND

Acest tip de cerere adaugă un grup de înregistrări din una sau mai multe tabele la sfârşitul uneia
sau a mai multor tabele.
Pentru a construi o cerere de tip APPEND creează mai întâi o tabelă SAL cu aceeaşi structură ca şi
SALARIATI.

157
COPIEREA STRUCTURILOR TABELELOR

Etape:
- În fereastra bazei de date PERSONAL selectează tabela SALARIATI.

- Execută secvenţele EDIT => COPY şi EDIT => PASTE.


Apare caseta de dialogPASTE TABLE AS, bifează opţiunea STRUCTURE ONLY şi apasă OK.

- În fereastra DATABASE apare noua tabelă. O deschizi şi o completezi cu


următoarele date:

Notă: Aceste date vor fi introduse la sfârşitul tabelei SALARIATI prin


intermediul unei cereri APPEND.

158
CREAREA CERERILOR APPEND

Etape:
- Creezi o cerere nouă având ca sursă tabela SAL.

- Alege din meniul QUERY optiunea APPEND QUERY. Pe ecran apare caseta de
dialog APPEND.

- În caseta TABLE NAME alegi numele tabelei în care vor fi copiate noi
înregistrări şi apeşi OK.

- Execută cererea apăsând pe butonul RUN .

- În caseta de dialog de confirmare apeşi butonul OK.

159
- Înregistrările vor fi adăugate în tabela SALARIATI.

CERERI DELETE

Şterge una sau mai multe înregistrări din una sau mai multe tabele.
În exemplul următor ştergi înregistrările inserate în exemplul anterior (MARCA>=200) prin
intermediul unei astfel de cereri.

Etape:
- Creează o cerere care are ca sursă tabela SALARIATI şi selectezi câmpul
MARCA cel pe care vei pune criteriul de ştergere.

160
- Alegi din meniul QUERY, opţiunea DELETE QUERY.
- Inserezi criteriul de ştergere.

- Apasă butonul RUN .


- În caseta de dialog de confirmare se apasă OK.

161
Chestionar

1. Cum definim interogarea?

2. Ce specificări permit cererile?

3. Ce sunt criteriile de selecţie?

4. Care sunt funcţiile de agregare?

5. Ce se obţine folosind funcţiile de agregare?

6. Ce sunt cererile de selecţie parametrice?

7. Cum se definesc cererile CROSSTAB?

8. Cum definim cererea de acţiune?

9. Care sunt tipurile de cereri de acţiune?

10. Care este rolul cererilor UPDATE?

11. Ce crează cererea de tip Mke Table?

12. Ce realizează cererea APPEND?

162
Curs 13: Crearea formularelor şi rapoartelor

1. Formulare
2. Rapoarte

1. Formulare

O aplicaţie tipică Windows afişează unul sau mai multe ecrane pline cu obiecte - meniuri,
butoane, liste derulante, casete de editare, etc. – cu care utilizatorul va interacţiona pentru a
controla evoluţia programului.
Obiectele de pe suprafaţa acestor ecrane vor reacţiona într-un mod specific sub acţiunea
anumitor evenimente întreprinse de utilizator sau declanşate de o anumită secţiune a
programului.
Totuşi, răspunsul acestor obiecte la acţiunea utilizatorului este uneori unul standard pentru
tipul de obiect asupra căruie s-a acţionat, şi chiar inadecvat cerinţelor utilizatorului.
Pentru a produce un program de calitate, codul trebuie ataşat evenimentului vizat.
De exemplu, evenimentul „Click” al unui buton de comandă ar putea să conţină o singură
instrucţiune VBA: „End”.
Atunci când se va executa un click pe acest buton, va fi declanşat codul asociat acestui
eveniment astfel încât programarea se va încheia.

O aplicaţie Microsoft Access are următoarea structură:

Aplicaţia: ------→ Formulare (Forms)


I ↓
I → Controale
I-------→ Rapoarte (Reports)
I ↓
I → Controale
I-------→ Ecrane (Screen)
I
I-------→ Comenzi (DoCmd)

În Microsoft Access formularele şi rapoartele şi controalele alcătuiesc bazele vizuale ale


unei aplicaţii Windows.
Aspectul şi funcţionalitatea acestor controale pot fi controlate şi îmbunătăţirea proprietăţilor
(care determină caracteristicile unui obiect) şi metodelor (care reprezintă procedurile sau
funcţiile care informează un obiect în legătură cu modul de a efectua o anumită acţiune).
Modificarea proprietăţilor şi metodelor unui obiect poate fi modificată cu ajutorul liniilor de
cod folosindu-se notaţia cu punct.

Proprietatea este un atribut nominalizat al unui obiect programabil; ea defineşte


caracteristicile unui obiect (dimensiuni, culoare, poziţia pe ecran,…) sau modul în care se
comportă un obiect.

163
Pentru a defini un obiect nu sunt suficiente proprietăţile acestuia, deoarece nu sunt
singurele sale caracteristici.
Definirea completă a obiectului presupune şi enumerarea activităţilor pe care obiectul le
poate realiza; metoda este o procedură asociată sau încorporată, un bloc de de instrucţiuni în
cod VBA, care poate fi invocat pentru a asocia o anumită acţiune unui anumit obiect
(metodele trebuie să fie asociate unui obiect pentru a se afla într-un anumit context)

Sintaxa pentru stabilirea proprietăţii unui obiect este (notaţia cu punct):

Obiect.Proprietate = Valoare

Lucrul în cod presupune lucrul cu foarte multe variabile, proprietăţi şi metode fiind
necesare unele reguli pentru numele acestora, astfel încât să se poată recunoască rapid tipul
obiectului la care se face referire.
Convenţia unanim acceptată este aceea de a acorda un prefix din trei litere mici; în felul
acesta se ştie la ce tip de obiect se face referire:

Obiect VBA Prefix

Formular (Form) -------------------------------------- Frm


Buton de comandă (Command Button) ------ Cmd, btn
Etichetă (Label) ------------------------------------- Lbl
Casetă de text (TextBox) ------------------------- Txt
Bare de derulare (ScrollBar) -----------------------Hsb, vsb
Meniu (Meniu) -------------------------------------- Mnu
Butoane de opţiuni (OptionButton) --------------- Opt
Casetă de validare (CheckBox) -------------------- Chk
Casetă de listare (ListBox) ------------------------- Lst
Casetă combinată (ComboBox) ---------------------- Cbo
Cadru (Frame) -------------------------------------------Fra
Imagine (Image) ---------------------------------------- Img
Figura geometrică (Shape) ---------------------------- Shp
Linie (Line) --------------------------------------------- Lin
Orologiu (Timer) --------------------------------------- Tmr

O metodă foarte bună pentru introducerea datelor în tabele este crearea de formulare. Cu ajutorul
unui formular, poţi aloca exact atât spaţiu cât este necesar pentru fiecare câmp şi poţi introduce
informaţii în mai multe tabele simultan.
În general, fiecare formular afişează o singură înregistrare la un moment dat.
Poţi crea un formular în trei moduri:
- Autoforms oferă foarte rapid formulare care conţin toate câmpurile într-un singur
tabel.
- Form Wizard te ajută să creezi un formular furnizându-se o serie de casete de
dialog din care poţi alege câmpurile şi stilul pentru formular.

164
- Creând un formular pornind de la zero, ai la dispoziţie o grilă de machetare în care
plasezi câmpuri. Este modul cel mai dificil, dar asigură cel mai bun control.

CREAREA FORMULARELOR CU AUTOFORM

Cel mai simplu mod de a crea un formular se face cu ajutorul caracteristicii AUTOFORM. Acesta
pune câmpurile dintr-un singur tabel într-un formular; este modul cel mai puţin flexibil, dar este foarte
convenabil.
Etape:
- Din fereastra DATABASE, execută clic pe tipul de obiect FORMS.
- Execută clic pe butonul New.

- Pe ecran apare caseta de dialog NEW FORM.

- Deschizi lista derulantă de la baza casetei de dialog şi alegi tabelul sau interogarea
pe care o utilizezi ca sursă a datelor din formular.
- Apeşi butonul OK. Apare formularul pentru introducerea datelor.
- În final se salvează formularul cu numele dorit.

165
Notă: Formularul pe care-l obţii cu AutoForm s-ar putea să nu fie prea
arătos. Etichetele de câmp pot fi trunchiate şi câmpurile pot fi apropiate. În acest caz
închide formularul fără să-l salvezi şi încearcă din nou cu Form Wizard.

CREAREA FORMULARELOR CU FORM WIZARD

Etape:
- Din fereastra DATABASE, execută clic pe tipul de obiect FORMS.
- Execută dublu-clic pe opţiunea CREATE FORM USING WIZARD. Apare
caseta de dialog Form Wizard.

- Din lista derulantă TABLES/QUERIES, alegi un tabel sau o interogare din care
să selectezi câmpuri (În mod prestabilit este selectat primul tabel în ordine alfabetică)
- Execută clic pe un câmp din lista AVAILABLE FIELDS pe care vrei să îl
introduci în formular şi apoi execută clic pe butonul Next > pentru a muta câmpul în
lista SELECTED FIELDS.
- Repetă pasul anterior până când selectezi din acel tabel toate câmpurile pe care
vrei să le incluzi.

Notă: Dacă vrei să incluzi câmpuri din alte tabele sau cereri, selectează-le
din lista TABLES\QUERIES.

166
- Execută clic pe NEXT pentru a continua. Ţi se cere să alegi o machetă: Columnar,
Tabular, Datasheet sau Justified. Execută clic pe fiecare buton pentru a
previzualiza machetele. (Columnar este cea mai uzuală). După ce ai ales macheta
dorită apasă NEXT.

- Ţi se cere să alegi un stil. Execută clic pe fiecare stil din listă pentru a-l
previzualiza; execută clic pe NEXT după ce ai ales un stil.

- Introdu un titlu pentru formular în caseta de text din partea de sus a casetei de
dialog.

167
- Execută clic pe butonul FINISH.
- În final apare formularul pregătit pentru introducerea datelor.

CREAREA FORMULARELOR GOALE

Cel mai performant, dar şi cel mai dificil mod de a crea un formular constă în utilizarea modului de
vizualizare FORM DESIGN.
Acest mod îţi permite să stabileşti exact unde anume să plasezi fiecare câmp şi cum să-l formatezi.
Etape:
- În fereastra DATABASE, execută clic pe tipul de obiect FORMS.

168
- Execută clic NEW. Apare caseta de dialog NEW FORM.

- Execută clic pe DESIGN VIEW.


- Selectează un tabel sau o interogare din lista derulantă de la baza casetei de
dialog.

- Apasă OK. Apare o fereastra Form Design.

ADĂUGAREA CONTROALELOR LA UN FORMULAR

Etape:
- Afişează lista FIELDS dacă aceasta nu este vizibilă prin apăsarea pe butonul
FIELD LIST sau alege din meniul VIEW opţiunea FIELD LIST.
- Trage cu mouse-ul un câmp din lista de câmpuri în zona DETAIL a raportului.

169
DEPLASAREA CONTROALELOR DE CÂMP

Etape:
- Dacă nu eşti deja în modul de vizualizare FORM DESIGN, treci în acest mod.
- Execută clic pe numele unui control pentru a-l selecta. Apar mânere de selecţie în
jurul lui. Poţi selecta mai multe controale, ţinând apăsată tasta SHIFT în timp ce
execuţi clic pe fiecare.
- Poziţionează indicatorul mouse-ului astfel încât acesta să se transforme într-o
palmă.

- Execută clic şi ţine apăsat butonul stâng al mouse-ului cât timp vei trage controlul
într-o altă poziţie.

DEPLASAREA CONTROALELOR ŞI A ETICHETELOR ÎN MOD INDEPENDENT

Etape:
- Execută clic pe controlul care vrei să fie selectat.
- Poziţionează indicatorul mouse-ului pe mânerul de selecţie aflat în partea din
stânga sus, astfel încât să se transforme într-un deget arătător.

- Trageţi controlul într-o altă poziţie.

Exemplu:

170
Să se creeze următoarea formă:

Notă: Executarea formei se face prin apăsarea pe butonul VIEW de pe


bara de instrumente sau din meniul VIEW opţiunea FORM VIEW.

Forma va arăta astfel:

VIZUALIZAREA ANTETURILOR ŞI A SUBSOLURILOR DE PAGINĂ

Pe lângă zona DETAIL pe care ai utilizat-o până acum mai există şi alte zone:
- FORM HEADER şi FORM FOOTER – sunt zone care se repetă în partea
de sus sau de jos a formularului, cum ar fi titlul formularului în partea de sus
sau o notiţă de copyright în partea de jos.

171
După executare forma va arăta astfel:

Notă: Adăugarea antetelor şi a subsolurilor de pagină se face, selectând din


meniul VIEW opţiunea FORM HEADER/FOOTER.

- PAGE HEADER şi PAGE FOOTER – sunt zone care se repetă în partea


de sus sau de jos a fiecărei pagini a formularului atunci când îl tipăreşti.

Notă: Pentru a afişa aceste două zone trebuie să selectezi din meniul VIEW
opţiunea PAGE HEADER/ FOOTER.

172
Formularul va arăta astfel:

ADĂUGAREA ETICHETELOR

Pentru a putea adăuga formularului titluri, subtitluri, text explicativ şi altele trebuie să adaugi în
formular un obiect care se numeşte etichetă.

Notă: În cazul în care bara de instrumente nu este afişată, alege opţiunea


TOOLBOX din meniul VIEW sau execută clic pe butonul TOOLBOX de pe bara
de instrumente.

Etape:
- Execută clic pe instrumentul LABEL din caseta de instrumente. Indicatorul
mouse-ului se preschimbă în litera A cu un semn plus lângă ea.

- Trasează un chenar în interiorul formularului şi introdu textul dorit.


- Execută clic oriunde în afara controlului pentru a termina operaţia sau apasă
ENTER.

173
FORMATAREA ETICHETELOR

După ce ai plasat toate informaţiile într-un formular (controalele pe care vrei să le incluzi şi
etichetele pentru afişarea oricărui titlu sau text explicativ), următorul pas este să faci formularul mai
atrăgător.
Toate instrumentele de formatare de care ai nevoie sunt pe bara de instrumente Formatting.
Pentru a formata un control, selectează-l şi apoi execută clic pe instrumentul de formatare adecvat.

MODIFICAREA ORDINII DE DEPLASARE CU TASTA TAB

Când introduci date într-un formular, apasă tasta Tab pentru a te deplasa de la un control la altul, în
ordinea în care sunt afişate în formular.
Dacă muţi şi rearanjezi controalele, ordinea de deplasare cu tasta Tab nu se modifică automat.
Pentru a ajusta ordinea de deplasare cu tasta Tab trebuie să parcurgi următorii paşi:

- Alege din meniul VIEW opţiunea TAB ORDER. Apare caseta de dialog
TAB ORDER.
- Alege secţiunea pentru care vrei să schimbi această ordine.
- Apar controalele în ordinea de deplasare cu tasta Tab. Pentru a modifica ordinea,
execută clic pe control şi trage-l în sus sau în jos în listă.

- Pentru a stabili rapid ordinea de deplasare pe baza poziţiei curente a controalelor


în formular (de sus în jos), execută clic pe butonul Auto Order.
- Execută clic pe OK.

174
2. Rapoarte

Tabelele şi formularele furnizează diverse căi de introducere şi a înregistrărilor în baza de


date, iar interogările permit sortarea şi filtrarea datelor din baza de date.

Raportul este un obiect al bazei de date care este proiectat pentru a rezuma datele şi a
oferi un rezulltat tipărit al infirmaţiilor din baza de date - un raport Access.

Se poate crea un raport în mai multe feluri, de la simplu la complex.


Un AutoReport, cea mai simplă posibilitate, ia toate înregistrările dintr-un tabel şi
furnizează un rezumat gata de a fi tipărit.
Report Wizard, o posibilitate intermediară, este tot simplu de utilizat dar necesită mai multe
decizii pentru a selecta câmpurile şi structura raportului.
Cea mai dificilă metodă de creare a unuiraport este construirea unui raport pornind de la
zero, în modul de vizualizare Report Design.

CREAREA UNUI RAPORT CU AUTOREPORT

Pentru a crea un raport folosind AutoReport, urmează paşii:

- Deschide baza de date care conţine tabelul sau interogarea pe baza căreia vrei să
creezi raportul.
- Execută clic pe eticheta REPORTS din fereastra DATABASE şi apoi pe butonul
NEW. Apare caseta de dialog NEW REPORT.

- Selectează din lista derulantă tabelul sau interogarea pe baza căreia vrei să
construieşti raportul.
175
- Selectează AUTOREPORT: COLUMNAR sau AUTOREPORT: TABULAR.

- Execută clic pe OK şi raportul apare în modul PRINT PREVIEW. Raportul va


arăta astfel:

CREAREA UNUI RAPORT CU REPORT WIZARD

Report Wizard asigură un compromis acceptabil între uşurinţa de utilizare şi flexibilitate. Cu


Report Wizard, poţi utiliza mai multe tabele şi interogări şi poţi alege o machetă şi un format pentru
raportul tău.
Etape:
- Deschizi baza de date care conţine tabelul sau interogarea pentru care vrei să creezi
un raport.

176
- Execută clic pe eticheta Reports din fereastra Database. Pe ecran apare caseta de dialog
Report Wizard.

- Din lista derulantă Tables/Queries, selectează un tabel sau o interogare din care
vrei să incluzi câmpuri.

- Execută clic pe un câmp din lista Available Fields şi apoi pe butonul pentru
a muta câmpul în lista Selected Fields. Repetă acest pas pentru a selecta toate
câmpurile dorite sau execută clic pe pentru a muta toate câmpurile deodată.

177
- Dacă vrei, selectează un alt tabel sau o altă interogare din lista Tables/Queries şi
repetă pasul anterior. Tabelele pe care le alegi trebuie să aibă relaţii între ele, astfel
încât datele să coincidă în raport.

- Când ai terminat de selectat câmpurile, execută clic pe NEXT. Apare prima casetă
de dialog Report Wizard.

- Dacă vrei gruparea înregistrărilor după oricare din câmpurile pe care le-ai selectat,
execută clic pe câmp şi apoi pe butonul . Poţi selecta mai multe niveluri de
grupare, în ordinea pe care o vrei. Apoi execută clic pe Next pentru a trece mai
departe.

- Aplicaţia Wizard te întreabă ce ordine de sortare vrei să utilizezi. Dacă vrei


înregistrări sortate, deschide lista derulantă de sus şi selectează un câmp după care
vrei ca sortarea să se efectueze. Selectează cel mult patru sortări din listele derulante.

178
- În mod prestabilit, sortarea este în ordine crescătoare (de la A la Z). Execută clic
pe butonul de lângă casetă pentru a schimba ordinea de sortare în descrescătoare (de
la Z la A), daca vrei.
- În următoarea casetă de dialog vei alege o opţiune de machetare din secţiunea
LAYOUT.
- Alege orientarea pentru raportul tipărit din secţiunea ORIENTATION.
- Apasă NEXT.

- În următoarea casetă de dialog a aplicaţiei Wizard, alege un stil de raport. Sunt


afişate mai multe; execută clic pe unul pentru a vedea o mostră.

- Apasă NEXT când eşti mulţumit de alegerea făcută.

179
- Ţi se cere un titlu de raport. Vei introduce un titlu în caseta de text Report şi
execută clic pe FINISH pentru a vedea raportul în modul PRINT PREVIEW.

TIPĂRIREA RAPOARTELOR ÎN MODUL PRINT PREVIEW

Când creezi un raport, fie cu Report Wizard, fie cu Autoreport, acesta apare în modul
Print Preview. De aici poţi să-l tipăreşti direct, dacă eşti mulţumit de rezultat sau poţi să treci în modul
de vizualizare Report Design pentru a face modificări.
Dacă vrei să tipăreşti raportul şi să specifici diverse opţiuni de tipărire, alege din meniul FILE
opţiunea PRINT…. Pe ecran apare caseta de dialog PRINT.

Daca vrei să obţii rapid o copie tipărită, execută clic pe butonul PRINT de pe bara de
instrumente.

180
INTRAREA ÎN MODUL DE VIZUALIZARE REPORT DESIGN

Etape:
- Execută clic pe eticheta REPORTS.

- Execută clic pe raportul pe care vrei să-l vizualizezi.


- Execută clic pe butonul DESIGN. Apare raportul în modul de vizualizare
DESIGN.

Raportul conţine următoarele zone:

- REPORT HEADER – conţine titlul raportului;


- PAGE HEADER – conţine etichetele de coloană ale raportului;
- DETAILS – afişează lista câmpurilor alese pentru a fi tipărite în aceste coloane;
- PAGE FOOTER – conţine o formula care va afişa data şi ora curentă.

181
LUCRUL CU CONTROALELE DIN RAPORT

Lucrul cu controalele din raport în modul de vizualizare Report Design este similar cu modul de
lucru cu controalele în modul Form Design.
Selectarea controalelor se face executând un clic pe control. În jurul său apar mânere de selecţie.
Mutarea obiectelor – se selectează obiectul respectiv, apoi poziţionează indicatorul mouse-ului
deasupra unei laturi a chenarului astfel încât acesta să se transforme într-o palmă deschisă şi neagră.
Apoi execută clic şi trage controlul în noua poziţie.
Redimensionarea obiectelor – selectează obiectul, apoi poziţionează indicatorul mouse-ului
deasupra unui mâner de selecţie şi trage-l pentru a redimensiona obiectul.
Formarea obiectelor de text – utilizează listele derulante Font şi Font Size de pe bara cu
instrumente pentru a alege fonturi, apoi utilizează butoanele Bold, Italic sau Underline de pe bara cu
instrumente pentru a aplica anumite atribute. Poţi adăuga, de asemenea, linii şi imagini în rapoarte, la
fel ca în formulare.

ADĂUGAREA ŞI ŞTERGEREA CONTROALELOR

Etape:
- Dacă nu vezi lista Field, vei alege din meniul View opţiunea Filed List sau execută
clic pe butonul Field List de pe bara de instrumente. Apare o casetă mobilă, care
afişează o listă cu toate câmpurile din tabelul pe care-l utilizezi.

- Trage orice câmp din lista de câmpuri în raport, unde devine un control – în mod
prestabilit, o caseta de text. Plasează-l oriunde vrei în zona Detail.

Notă: Pentru a şterge un control acesta va fi selectat şi prin apăsarea tastei


DELETE va fi şters.

182
ARANJAREA NOILOR CONTROALE

Când adaugi un control în raport, de fapt adaugi două lucruri – o etichetă şi o casetă de text. Aceste
două elemente sunt legate: eticheta descrie caseta de text, iar caseta reprezintă câmpul care va fi
utilizat. Poţi modifica textul din etichetă fără să afectezi caseta de text.
În mod prestabilit, când muţi caseta de text, o urmează şi eticheta. Dacă poziţionezi indicatorul
mouse-ului pe chenarul casetei de text şi indicatorul se transformă într-o palmă deschisă, acesta este
semnalul că, atunci când vei trage caseta de text, eticheta o va urma.
În orice caz, poţi deplasa şi separat caseta de text şi eticheta. Vei observa că în colţul din stânga sus
al fiecărui control există un mâner de selecţie (pătrat) care este mai mare decât celelalte. Când
poziţionezi indicatorul mouse-ului pe acest pătrat, cursorul devine o mână cu degetul arătător întins. În
acest moment poţi să execuţi clic şi să tragi fiecare obiect separat de celalalt.

ADĂUGAREA ETICHETELOR

Poţi, de asemenea, să adaugi separat etichete, cu text suplimentar, care nu sunt neapărat asociate cu
un anumit câmp.
Etape:

- Execută clic pe butonul Label de pe bara de instrumente Toolbox.


- Execută clic oriunde în raport şi tastează textul etichetei.
- După ce ai terminat, execută clic oriunde în afara etichetei.

Notă: În cazul în care bara de instrumente Toolbox nu este afişată, poţi apăsa
pe butonul Toolbox de pe bara de instrumente standard sau poţi alege din meniul
VIEW, opţiunea TOOLBARS şi apoi TOOLBOX.

183
Chestionar

1. Care este structura aplicaţiei Microsoft Access?

2. Ce reprezintă metodele?

3. Cum definim proprietatea?

4. Ce presupune definirea completă a obiectului?

5. Care este rolul formularelor?

6. În câte moduri se poate crea un formular?

7. Care este rolul etichetei?

8. Cum definim raportul?

184
Bibliografie

Steve Johnson: „Access 2007” , Editura Teora, 2008.

Cornel Ignat, Carmen Petre: „Initiere în Access”, Editura Arves, 2002.

Dan Rahmel: „Programarea bazelor de date cu Visual Basic 6, în 24 de ore” Editura Teora, 2000.

185

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