Sunteți pe pagina 1din 3

Prof. univ. dr. mat. Alexandru A.

Popovici
9 CERINŢE ŞI STANDARDIZARE PT. SGBD-urile OBIECTUALE

9.1 Strategii şi cerinţe pentru realizarea SGBD-urilor obiectuale


Bazele de date obiectuale (BDO) / orientate spre obiecte (OO) — pt proiectare-fabricare asistate de
calculator, sisteme informatice pt. birotică sau pt. geografie-cartografie.
SGBDO — unirea funcţionalităţii SGBD-urilor „clasice” cu programarea OO (POO).
Limbaje pt. SGBDO — persistenţa obiectelor, gestiunea tranzacţiilor, controlul concurenţei şi refacerii.
Strategii pt. construire: a) extinderea unui limbaj pt. BD, prin capacităţi de POO;
b) extinderea unui limbaj de programare (persistentă) prin capacităţi pt. BD;
a) ⇒ limbajele OQL pt. BDO şi SQL3 pt. BD relaţional-obiectuale; b) ⇒ Java cu Java Data Objects.
Manifestul SGBD-urilor OO (1989) — 13 caracteristici obligatorii (pt SGBD şi OO) + 5 opţionale:
a) pt. SGBD: 1) asigurarea persistenţei, 2) gestiunea memoriei auxiliare, 3) controlul concurenţei, 4)
asigurarea refacerii BD prin derularea tranzacţiilor greşite, 5) posibilitatea interogărilor imediate;
b) pt. OO, prin suport pt.: 6) obiecte compuse şi complexe, 7) identitatea obiectelor, 8) încapsularea
obiectelor, 9) tipuri şi clase de obiecte, 10) ierarhii de tipuri şi clase, 11) moştenire simplă, 12)
supraîncărcarea şi legarea dinamică a metodelor, 13) extensibilitatea mulţimii tipurilor.
c) opţionale, prin suport pt.: moştenirea multiplă, controlul tipurilor şi al interferării lor, distribuirea în
reţea, tranzacţii de proiectare, versiuni.

9.2 Standardul ODMG pentru SGBD-urile obiectuale


9.2.1 Componentele OM, ODL, OQL şi OML ale standardului
Grupul pt. gestiunea datelor obiectuale (ODMG) — organizaţie non-profit (1991), pt. SGBDO
portabile pe diferite platforme de calcul. Utilizatori
Standarde: ODMG 1.0 (1993), ODMG 3.0 (1999) — preluat de OMG.
Componentele lui ODMG 3.0:
Interfaţa cu utilizatorii
a) modelul obiectelor (OM) — UML dezvoltat prin proiectarea unui profil şi
adăugarea unor elemente, cf. cu MOF şi UCL;
b) limbajele de specificare a obiectelor: ODL OIL OQL
— limbajul pt. definirea obiectelor (ODL), pt. schema BD, bazat pe OM OML
şi pe limbajul OMG pt. definirea interfeţelor obiectelor (IDL), din CORBA;
— limbajul pt. schimburile de obiecte (OIL), pt. salvarea rapidă în Smalltalk C++ Java

memoria auxiliară şi încărcarea din unul sau mai multe fişiere (nou);
c) limbajul pt. interogarea obiectelor (OQL) — de tip declarativ Gestionarul de obiecte
(neprocedural), bazat pe SQL2;
d) limbajele pt. manevrarea datelor (OML) — proiecţii ODL pe limbajele
Smalltalk, C++ şi Java + mecanisme de invocare a lui OQL. BDO
Interfaţa cu utilizatorii — pt. dialog, gestionarul de obiecte — pt. identificarea
şi persistenţa obiectelor, concurenţa tranzacţiilor.
Avantaje: — transportabilitatea SGBDO între platforme de calcul (prin compatibilitatea cu standardele
OMG pentru obiecte şi intermediari de obiecte);
— compatibilitatea (prin OQL) cu SGBDR şi înlăturarea „nepotrivirii de impedanţă” (între
limbajul declarativ de interogare şi limbajele procedurale de programare a aplicaţiilor);
— posibilitatea folosirii aceleiaşiBDO, de către aplicaţii scrise în diverse OML-uri.

1
9.2.2 Definirea obiectelor şi ODL
Tipuri (după conţinut): — de literale/valori (asemănătoare constantelor);
— de obiecte (asemănătoare variabilelor).
Tipuri (după formă): — atomice (nedecompozabile şi nestructurate);
— colecţii (compuse, dar nestructurate);
— structuri (compuse şi structurate, cu un conţinut determinat).
Prin combinare ⇒ 6 grupări de tipuri: literale atomice şi obiecte atomice etc.
Tipurile atomice/primitive: — întreg (scurt sau lung, cu sau fără semn),
— real (simplă sau dublă precizie),
— logic (octet sau boolean),
— alfanumeric (caracter sau şir de caractere),
— enumerare (cu elemente diverse).
Tipuri de colecţii: — conţin un nr. arbitrar de elemente nedeterminate, de orice tip;
— sunt parcurse cu ajutorul unui iterator (indice).
Categorii: — cu elemente simple/perechi,
— cu/fără posibilitatea de duplicare a elementelor;
— ordonate (parcurse doar secvenţial, de la un capăt la celălalt) sau neordonate.
5-6 tipuri de colecţii: — mulţime (neordonată, fără duplicare);
— listă (ordonată, fără duplicare);
— pachet (neordonat, cu duplicare);
— vector (ordonat, cu duplicare);
— dicţionar (secvenţă ordonată de chei, perechi de atribute şi valori, fără duplicare);
— tuplul (ca dicţionarul, dar nu neapărat cu chei).
Tipuri de structuri: dată (an, lună, zi), timp (ora, min., sec.), marcaj temporal, interval, structură.
Proprietăţi: — atribute (cu nume şi tipuri care nu privesc clasele);
— legături între tipuri (1:1, 1:n, m:n); au de obicei valoarea unui identificator de obiect (OID).
Clasele de obiecte se definesc prin: — numele clasei;
— elementele clasei (atribute, legături, metode);
— cheia de acces opţională (1- n atribute);
— extensia (mulţimea numelor obiectelor existente în clasă).
Legătura 1:1 a obiectelor O1 , O2 : — legătura directă l1 către O2 (obligatorie), cu un tip şi numele lui O2 ;
— legătura inversă l −21 , a lui O2 către O1 (opţională).
Legăturile 1:1 — clase ca tipuri în ambele direcţii; 1:m — un tip de mulţime în partea de 1 (pt. fiecare
componentă) şi un tip de clasă în partea de m; m:n — tipuri de mulţime în ambele părţi.
Legăturile > 2 — simulate prin „clase de conectare” (cu obiecte reprezintând tupluri ale obiectelor conectate).
Operaţii — descrise prin semnături (nume op.; nume, moduri, tipuri de argumente; nume excepţii; tipuri de
valori returnate); pot fi supraîncărcate.
Excepţii — obiecte cu tipuri şi ierarhii; definesc reacţiile la eventualele erori de execuţie ale operaţiilor.
Specificaţie — proprietăţile şi operaţiile ce pot fi invocate relativ la instanţe.
Implementarea tipului/clasei — structurile de date, excepţiile şi operaţiile ce operează asupra lor.
Tipul/clasa — câte o singură specificaţie; tipul — mai multe implementări; clasa — o implementare.
Interfaţă — comportamentul abstract pt. tip (prin supratip, extensie/instanţe, chei (OID pt. fiece instanţă)).
Meta-date: — obiecte interogabile; descrieri ale altor obiecte din sistem;
— se referă la: — meta-obiecte (module, operaţii, excepţii, constante, proprietăţi, tipuri);
— raza de acţiune (ierarhia denumirilor meta-obiectelor);
— specificatori (pt. atribuirea unor denumiri contextuale);
— operanzi (tipurile fundamentale pentru toate valorile din BD).
Persistenţa obiectelor — „ortogonală” (nu depinde de tipul datelor şi de programul care le manevrează).
Bază de date obiectuală: — stochează ob. persistente şi autorizaţii de partajare a lor, între ob. şi aplicaţii.
— se întemeiază pe o schemă conceptuală (cu definiţiile tuturor tipurilor folosite, prin limbajul ODL).
Tranzacţii — unităţi logice de lucru, ce transformă BDO dintr-o stare coerentă în alta.
Controlul concurenţei tranzacţiilor — bazat pe încuieri standard, folosind metode pesimiste (v. Curs 5).

2
9.2.3 Interogarea obiectelor şi OQL
Interogarea obiectelor — descrisă prin algebră obiectuală (cu operatori, ca în algebra relaţională).
OQL — limbaj declarativ şi funcţional; extindere a lui SQL2, cu suport pt. modelul obiectelor.
Interogare: — expresie de un anumit tip, ce poate face referire la atributele şi la metodele ierarhiilor de clase;
— are ca rezultat obiecte persistente (simple sau complexe).
Posibilităţi: — utilizarea parametrilor şi sub-interogărilor;
— redenumirea atributelor obiectelor;
— utilizarea polimorfismului, relativ la atributele şi metodele claselor;
— legarea târzie/dinamică (la execuţie) a metodelor;
— ordonarea (cresc./descresc.) sau gruparea rezultatelor, în raport de valoarea unui atribut;
— agregarea datelor (prin sume, medii etc).
Un obiect nedefinit (necunoscut) se notează prin obiectul simplu (nedecompozabil) null.
Forme de interogare: — nume de întindere al unei clase (persistent, pt. regăsirea obiectelor din clasă);
— obiect denumit (regăsirea obiectului respectiv);
— selectare (returnarea unui literal cu un tip, cu o întindere şi satisfăcând o condiţie).
Interogările denumite pot servi ca perspective (views) ale utilizatorilor (ca în SGBD-urile „clasice”).
Puncte de intrare în BDO — nume de obiecte persistente, interogări, sau extensii ale unor clase.
Expresii de cale — pt. navigare (accesul la obiecte, pornind de la un anumit punct de intrare)
— succesiuni de identificatori de obiecte (OIDs), dar nu cu nume de colecţii;
— pt. urmărirea mai multor căi, se pot folosi subinterogări cu expresiile respective de cale.
Operaţii asupra obiectelor (de către interogări, prin apelarea metodelor acestora):
— constructori (pt. creări),
— modificatori (pt. actualizări).
Metodă invocată: — cu un tip returnat, valid pt. expresia în care apare şi diferit de tipul null;
— poate returna un obiect complex, ce poate fi traversat ca şi când ar fi o legătură;
— dacă este o metodă suprascrisă ⇒ implementare determinată prin legarea ei târzie.

9.2.4 Manevrarea obiectelor şi OML


Manevrarea obiectelor — prin limbajele pt. manevrarea obiectelor (OML), obţinute din unirea ODL
şi OQL cu limbajele Smalltalk, C++ şi Java (şi cu extensii pt. manevrarea tranzacţiilor şi gestionarea BD).
Smalltalk OML: — persistenţa obiectelor se transmite prin referire;
— clasele şi operaţiile sunt proiectate direct (când este posibil) în clase şi metode std.;
— instrucţiunile Smalltalk pot apela interogările OQL (dar nu şi invers);
C++ OML: — persistenţa obiectelor se transmite prin moştenire;
— gestionarea obiectelor se face prin două categorii de identificatori;
— accesul la membrii colecţiilor se poate face secvenţial;
— întreţinerea extensiilor claselor se face automat;
— instrucţiunile C++ şi interogările OQL se pot apela reciproc.
Java OML: — instanţele claselor exist. pot deveni persistente, fără schimbarea codului sursă al programelor;
— persistenţa obiectelor se transmite prin referire;
— gestionarea obiectelor se face printr-o singură categorie de identificatori.
Observaţii: a) recomandările manifestului SGBD-urilor OO şi cerinţele standardului ODMG au diverse
variante de implementare (riguroase sau laxe).
b) limbajul OQL s-a impus în domeniul SGBDO (ca şi SQL în SGBD relaţionale).