Documente Academic
Documente Profesional
Documente Cultură
Baze de date
1
Cuprins
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
Bibliografie
3
Curs 1: Sisteme informaţionale
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).
Fiecare sistem are un comportament specific, determinat de natura elementelor din care
este compus şi de relaţiile dintre ele.
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:
- echipamente (hardware),
- programe (software),
- comunicaţii,
- baza ştiinţifică şi metodologică,
- baza informaţională.
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).
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.
7
2. Structura sistemelor informatice
- subsisteme,
- aplicaţii,
- unităţi funcţionale sau proceduri logice.
Pentru programatori sunt relevante incă două nivele, inferioare unităţii funcţionale:
Î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.
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ă.
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.
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:
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.
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.
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.
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.
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.
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.
12
Chestionar
2. Dar sistemul?
13
Curs 2: SGBD - Sisteme de gestiune a bazelor de date
În general, când se proiectează un sistem informatic, din punct de vedere fizic există trei
paşi care trebuie parcurşi:
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.
- 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);
- 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ă;
- 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.
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:
- operatori de bază şi
- operatori auxiliari.
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:
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:
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.
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.
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 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.
Pentru fiecare proprietate a entităţii izolate se asociază un atribut care este elementul de
descriere a entităţii.
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ă.
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.
- Tipul unui grup de date: ansamblu format din lista identificatorilor folosiţi şi
descrierea articolelor şi a grupurilor de date.
- Zona: subdiviziune a memoriei externe, identificabilă printr-un nume care poate stoca
Înregistrări.
20
Aceste limbaje pot fi de sine stătătoare sau grefate pe un limbaj de programare general.
Î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 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.
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
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:
- 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.
- 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.
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:
23
Chestionar
1. Care sunt paşii care trebuie parcurşi când se proiectează un sistem informatic?
9. Ce reprezintă un model?
24
Curs 3: SGBD - descriere funcţională ( I )
1. Obiectivele SGBD
2. Componentele SGBD
1. Obiectivele SGBD
- 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 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.
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ă.
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:
O tranzacţie este o unitate logică de tratament, care, aplicată la o stare coerentă a bazei,
generează o nouă stare coerentă (modifică baza).
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;
- formă de editare.
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.
28
2. Componentele SGBD
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.
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:
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.
31
Chestionar
32
Curs 4: SGBD: descriere funcţională ( I )
1. Sarcinile SGBD
2. Diagrama entitate relaţie
1. Sarcinile SGBD
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.
- 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.
- 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:
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.
- în modul asistat de sistem: utilizatorul alege diferite variante din mai multe puse la
dispoziţie de sistem,
34
La o aceeaşi bază de date, gestionată de un SGBD, se pot utiliza mai multe LMD, în
funcţie de:
Pentru a se uşura munca programatorilor sunt puse la dispoziţia acestora anumite facilităţi:
- integrarea mai multor elemente de program (ferestre, meniuri, funcţii, proceduri, etc),
construite şi testate independent, într-o unitate nouă de program;
35
4. Protecţia informaţiilor din baza de date, care cuprinde:
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.
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:
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
Obiectele de acelaşi tip constituie o entitate, iar legătura între două entităţi defineşte o
relaţie (asociere).
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
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
Observaţii:
39
- Entităţile (scrise cu litere mari, în general) devin tabele în modelele relaţionale.
- 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:
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.
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ă.
- Cardinalitatea relaţiei, adică numărul de tupluri aparţinând unei relaţii este răspunsul
la întrebări de tipul:
Exemplu:
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.
- Pentru fiecare atribut trebuie specificat numele, tipul fizic, valori posibile, valori
implicite, reguli de validare.
42
Chestionar
43
Curs 5: Baze de date orientate obiect (BDOO)
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.
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.
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.
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.
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.
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:
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 bazei BDOO constă din toate clasele care au fost definite pentru o aplicaţie
particulară.
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.
- bazele de date şi
- limbajele orientate obiect.
În funcţie de combinarea acestor două tehnologii, există diferite moduri pentru a concepe
un SGBDO.
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.
- programele utilitare,
- limbaje (de definire, de manipulare, de cereri, interfeţe),
- gestiunea obiectelor
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.
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.
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:
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:
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.
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:
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.
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.
56
UAL 1
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:
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:
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):
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
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.
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):
59
Chestionar
5. Dar deplasament?
6. Ce înseamnă program?
60
9. Cum se definesc computerele RISC şi CISC?
11. Care sunt structurile logice care formează baza programării structurate?
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.
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.
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).
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:
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.
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.
Pachetele nu mai pot fi clasificate strict si riguros, insa dam o clasificare de la simplu la
complex. Astfel exista:
64
2. Limbajele de programare: cod-maşină, assembler, evoluate
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:
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:
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.
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.
Referirea la limbajele de programare prin „generatii” ale lor este motivata, printre altele, si
de evidentierea cresterii puterii de prelucrare ale datelor.
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).
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:
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, …
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:
Chestionar
3. Ce defineşte semantica?
72
4. Ce a impus crearea de noi limbaje de programare?
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.
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:
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.
Limbajele care aplica principiul acesta descriu ceea ce programul trebuie sa indeplineasca
si nu modul (cum) in care indeplineste un anumit lucru.
- programarea functionala,
- programarea logica,
- programarea folosind limbaje specifice unui domeniu (Domain-specific
languages).
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:
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.
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.
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.
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.
77
_____________ ___________
metoda functie
obiect modul
mesaj apel procedura
atribut variabila
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:
- 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.
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.
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.
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.
80
acestora fiind baza contractului intre companie si client.
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.
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.
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.
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.
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.
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.
Putem spune ca orientarea obiect nu mai este doar o dominanta a programarii, ci s-a
faurit ca o paradigma , strategie si mentalitate.
Chestionar
84
2. Ce este mediul de programare integrat?
85
- paradigma structurata, predominanta in anii `80,
- paradigma orientata pe obiect, predominanta in anii `90.
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.
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,
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.
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.
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.
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.
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:
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:
Dezavantaje:
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
Validare
Versiune
finala
Exista doua modele evolutionale care difera prin obiective: modelul programarii
exploratorii si modelul prototipizarii.
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.
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.
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.
- stare: cuprinde toate proprietatile (de obicei statice) impreuna cu valorile curente
(de obicei dinamice) ale acestor proprietati.
- 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.
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.
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.
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
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 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
- polimorfism ad-hoc,
97
- polimorfism pur,
- polimorfism parametric.
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.
98
1. Pe ce se bazează paradigma structurală ?
99
1. Bazele programării în Microsoft Access. Introducere VBA – Visual Basic for
Application
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:
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ă.
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.
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).
- 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;
- instrucţiunile procedurii: seria de instrucţiuni; liniile de cod în VBA sunt doar texte;
- 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:
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:
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.
- 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.
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.
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ă.
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.
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.
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;
- 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.
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.
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:
- 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.
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ă:
112
Chestionar
4. Ce reprezintă macrocomenzile?
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.
- 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;
Î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.
- 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.
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.
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.
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:
118
- Alege din meniul EDIT opţiunea PRIMARY KEY.
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.
EDITAREA TABELELOR
După crearea tabelelor, acestea pot fi modificate ulterior efectuând operaţiile de mai jos.
ADĂUGAREA CÂMPURILOR
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.
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
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).
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
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ă.
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.
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:
- Tabela SOLD:
128
- Tabela DENMONEDA:
- Tabela DENOPERATII:
- Tabela OPERATII:
129
- Această tabelă are următorul conţinut:
130
Pe ecran apare fereastra RELATIONSHIPS care are următoarea formă:
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.
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.
Înainte de sortare:
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.
După filtrare:
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.
135
În final, rezultatul filtrării este următorul:
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.
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
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:
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
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:
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.
Notă: În situaţia în care, din diverse motive, caseta de dialog SHOW TABLE nu se
deschide automat, se apasă butonul SHOW TABLE .
- Î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).
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.
Etape:
- Selectează coloana;
- Cu indicatorul mouse-ului poziţionat în selectorul de coloane trage coloana în locul dorit.
Etape:
- Selectează coloana;
- Din meniul INSERT alege opţiunea COLUMNS.
143
AFIŞAREA PROPRIETĂŢILOR UNUI CÂMP DIN CERERE
Etape:
- Selectează coloana;
EXEMPLE
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.
145
Notă: S-a utilizat câmpul nume de două ori, a doua oară acesta nefiind afişat.
146
Rezultatul cererii este următorul:
147
Rezultatul cererii este următorul:
149
CERERE DE SELECŢIE FOLOSIND FUNCŢII DE AGREGARE
În exemplul de mai jos vom calcula suma, media, minimul şi maximul tuturor salariaţilor care nu
sunt şefi.
Proiectarea cererii arată astfel:
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:
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:
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 momentul rulării cererii, pe ecran apare o fereastră prin intermediul căreia ţi se cere să introduci
parametrul dorit (în cazul nostru FUNCTIA).
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ă:
153
Conţinutul tabelei să fie cu următorul:
Creează o cerere de tip CrossTab având sursa formată din tabelele Vanzari şi AgentiVanzari.
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:
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:
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.
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.
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.
161
Chestionar
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.
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)
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:
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.
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.
- 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.
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.
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.
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.
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.
Exemplu:
170
Să se creeze următoarea formă:
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ă: 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ă.
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.
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.
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ă.
174
2. Rapoarte
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.
- 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.
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.
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.
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.
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.
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.
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.
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:
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
2. Ce reprezintă metodele?
184
Bibliografie
Dan Rahmel: „Programarea bazelor de date cu Visual Basic 6, în 24 de ore” Editura Teora, 2000.
185