Sunteți pe pagina 1din 31

Baze de date orientate obiect

Modelul Orientat Obiect


Modelul de date orientat-obiect marcheaz trecerea la

generaia a treia de baze de date (dup generaia


bazelor de date ierarhice i reea i a celor relaionale),
aducnd n plus deschidere pentru aplicaiile cu baze
de date, independen logic a datelor fa de
programe, posibilitatea de reutilizare a obiectelor etc.
Ofer rezultate bune pentru probleme complexe i n
special dac volumul datelor de tip multimedia
reprezint mai mult de jumtate din volumul total de
date stocat.

Componentele modelului
structura modelului de date orientat-obiect -

reprezentnd totalitatea elementelor caracteristice


claselor de obiecte;
operatorii care acioneaz asupra structuriireprezentnd totalitatea operaiilor de definire i de
comunicare dintre obiecte;
restriciile de integritate - reprezentate de
constrngerile impuse obiectelor n ceea ce privete
starea sau comportamentul acestora.

Structura modelului de date


orientat-obiect
Definirea obiectelor se face prin prisma conceptului de

clas de obiecte: date+comportament


Variabilele care caracterizeaz clasa de obiecte poart
denumirea de atribute
Operaiile care definesc comportamentul obiectului
poart denumirea de metode.

Structura modelului de date


orientat-obiect
Obiectele sunt caracterizate: printr-un nume, un

identificator unic (OID Object IDentifier), o durat


de via prin care se determin dac obiectul este
persistent sau tranzient, o interfa public prin care
acesta se poate accesa i o implementare privat prin
care se ascund utilizatorului o parte din elementele sau
comportamentul obiectului

Structura modelului de date


orientat-obiect
Caracteristicile fundamentale ale obiectelor:
ncapsularea: un obiect trebuie s aib interfaa complet
separat de implementare;
Polimorfismul: abilitatea limbajelor orientate-obiect de a
folosi aceeai denumire pentru operaii diferite. Se poate
folosi suprancrcarea i suprascrierea;
Motenirea: proprietatea unui obiect de a-i deriva
datele i funcionalitatea dintr-un alt obiect. Astfel se
definete o relaie ntre clase: clasa printe -> clasa(e)
derivat(e).

Structura
Legturile dintre obiecte se realizeaz implicit prin

modul de construire al obiectelor i pot fi:


Ierarhice sunt cele n care clasa de obiecte reprezint

structura de baz a modelului, fiecare obiect avnd un


identificator unic i aparinnd unei clase;
De referin sunt realizate pe baza identificatorului unic
de obiect:

Simple;
De asociere;
De compunere;
De agregare.

Operatorii
Operatorii modelului de date orientat-obiect au rolul de a

aciona asupra structurii obiectelor din baza de date.


Acetia au la baz mesajele ca unic mod de a permite
obiectelor s comunice ntre ele i cuprind operaii precum:
actualizarea claselor prin care sunt realizate operaiile
de adugare, modificare, tergere asupra definiiilor de
clase.
actualizarea metodelor prin care pot fi realizate
operaiile de adugare, modificare, tergere de metode;
actualizarea atributelor prin care sunt realizate
operaiile de adugare, modificare, tergere asupra
datelor;

Operatorii
actualizarea

ierarhiei de clase, realizat pe baza


proprietii de motenire;
realizarea
legturilor dintre clase (compunere,
partiionare etc.);
actualizarea instanelor claselor, deci a obiectelor,
realizat prin metode specifice care schimb starea
intern a obiectului. Astfel de metode sunt constructorii,
cu rol de a crea instane noi ale unei clase de obiecte,
destructorii, cu rol de tergere a obiectelor existente i
metode de modificare a strii obiectelor.

Object Definition Language ODL


Prin ODL se descriu clase de obiecte (denumite

generic tipuri de obiecte), se definesc atribute, relaii


dintre clase i specificaii ale metodelor, definirea
extins a acestora nefiind permis prin acest limbaj.

Exemplu ODL

interface Persoana
{
attribute string nume;
attribute date data_nastere;
attribute Adresa oras;
int calculeaza_varsta();
}

interface Angajat : Persoana //indic relaia de motenire dintre clase


{
attribute int salariu_incadrare;
relationship Departament lucreaza inverse Departament::angajati;
float calculeaza_salariul();
}

interface Departament
{
attribute string denumire;
attribute Adresa cod_postal;
relationship Set<Angajat> angajati inverse Angajat::lucreaza
int numara_angajati();
int salariu_total();
}

Object Query Language - OQL


Operaiile de actualizare a obiectelor, enunate

anterior, i gsesc corespondent n operaiile


limbajului de interogare a obiectelor OQL.
Este o extensie a limbajului relaional de interogare
(Structured Query Language - SQL), avnd aceeai
putere descriptiv.

Exemplu OQL
Considerm ang o instan a clasei Angajat. Astfel,

obiectul ang va avea acces la urmtoarele atribute i


metode: ang.nume, ang.data_nastere, ang.adresa.oras,
ang.calculeaza_varsta(), ang.salariu_incadrare,
ang.calculeaza_salariul(), ang.lucreaza.denumire,
ang.lucreaza.adresa.oras,
ang.lucreaza.numara_angajati(),
ang.lucreaza.salariu_total().

Exemplu OQL selectie


SELECT nume: ang.nume,
salariu: ang.calculeaza_salariul(),
adresa_serviciu: ang.lucreaza.adresa.oras
FROM Angajat ang
WHERE ang.lucreaza.denumire="IT"

Exemplu OQL jonctiune


SELECT nume: ang.nume,
salariu: ang.calculeaza_salariul(),
adresa_serviciu: dep.adresa.oras
FROM Angajat ang, Departament dep
WHERE dep.denumire="IT
Obs: In acest caz rezultatul este identic cu cel de la

selectie

Restrictiile de integritate
identificatorul unic (Object Identifier - OID), care asigur integritatea

referirii la acesta. Un OID nu este un pointer spre obiect, ci o referire


logic ctre acesta. Astfel un obiect poate exista la adrese diferite, ns
identificatorul va avea aceeai valoare de-a lungul duratei de via a
obiectului;
protocolul specificat prin definirea clasei din care face parte, astfel, un
obiect poate rspunde doar la acele mesaje permise de clasa de care
aparine sau de clasele aflate n aceeai ierarhie cu aceasta, respectnd
dependenele ierarhice;
ncapsularea, accesul la obiect este limitat la folosirea protocolului de
mesaje definit pentru clasa din care acesta face parte;
restricii de referenialitate, n cazul n care clasele de obiecte prezint
legturi de asociere, de compunere sau de agregare.

Baze de date orientate obiect


Reprezint un ansamblu de clase de obiecte:
organizat pe trei niveluri de structurare a datelor
(conceptual, logic, fizic);
coerent, conform restriciilor de integritate i a
legturilor dintre date, care rezult din modelul de date
orientat-obiect;
structurat, conform modelului de date orientat-obiect;
cu redundan minim i controlat, asigurat prin
modelul de date orientat-obiect;
accesibil mai multor utilizatori n timp real.

Caracteristici BDOO
tratarea unitar a entitilor, realizat prin modelarea n cadrul

obiectelor att a datelor ct i a aplicaiilor;


asigurarea comunicrii att ntre date, ct i ntre programe;
simplificarea structurii de date care asigur uurin n utilizare i o
portabilitate ridicat a sistemelor rezultate;
modelarea i stocarea flexibil a obiectelor din lumea real, ceea ce
permite abordarea domeniilor complexe i utilizarea diferitelor tipuri
de date;
integrarea descrierii structurale i comportamentale a entitilor ceea
ce confer obiectelor un aspect dinamic;
ierarhizarea i motenirea proprietilor claselor, ceea ce ofer
posibilitatea realizrii de operaii i prelucrri complexe asupra datelor.

Obiective generale BDOO


minimizarea redundanei datelor;
independena datelor fa de programe;
asigurarea integritii datelor;
asigurarea securitii datelor;
partajarea datelor ctre mai muli utilizatori simultan.

Obiective specifice BDOO


ncapsularea i independena datelor stocate;
puterea de modelare superioar a datelor;
posibilitile de deducie superioar;
luarea n considerare a aspectelor dinamice, prin

integrarea descrierii structurale i comportamentale a


obiectelor.

Arhitectura pe trei niveluri

Avantaje BDOO
reflect mai fidel elementele complexe ale lumii reale;
pot fi utilizate pentru aplicaii complexe din domenii care implic modelarea
prin obiecte mari, multidimensionale;
produc aplicaii cu baze de date deschise i flexibile, cu avantajele care rezult
din caracteristicile implementate pentru obiecte (motenirea, ncapsularea,
persistena, reutilizarea etc.);
ofer scalabilitate prin stocarea i prelucrarea de volume foarte mari de date, de
o mare complexitate i de orice tip (clasic, multimedia etc.);
ofer extensibilitate prin utilizarea de clase de obiecte care pot fi extinse
datorit proprietii de motenire;

ofer posibilitatea reutilizrii codului;


asigur independena total, fizic i logic, a datelor fa de programe;
aplic tehnici de distribuire i reutilizare att la nivel de date ct i la nivel de
programe.

Limitari BDOO
piaa de utilizare rmne nc redus, chiar i la

aproape 30 de ani de la apariie;


nu exist o fundamentare teoretic la fel de solid
precum n cazul modelului relaional;
nu exist un model orientat-obiect unanim acceptat de
specialiti i niciun limbaj de programare standardizat,
precum limbajul SQL pentru modelul relaional;
domeniile de aplicabilitate ale bazelor de date
orientate-obiect sunt domenii de ni, aplicaiile
tranzacionale rmnnd cele mai rspndite.

Diferene n structura
modelelor de date
Modelul de date orientat-obiect

Modelul de date relaional

Ierarhie de clas

Schema bazei de date

Clas de obiecte

Relaie

Instan de clas (obiect)

Tuplu

Variabil de instan

Atribut

Metod

Identificator de obiect

Cheie unic

Diferene n operaiile
modelelor de date
Modelul de date orientat-obiect

Modelul de date relaional

Definirea, tergerea i modificarea unei clase sau


variabile instan
Definirea, tergerea sau modificarea metodei

Definirea, tergerea sau modificarea unei relaii


sau a unui cmp
-

Crearea unei instane de clas (ex: crearea unui


obiect individual)
Transmitere/primire de mesaje

Adugarea unui tuplu ntr-o relaie

Jonciune (doar n OQL)

Jonciune

Proiecie (doar n OQL)

Proiecie

ncapsulare

Modificri n ierarhia de clase

Exemplu in Oracle
CREATE OR REPLACE TYPE departamente_o AS OBJECT (
id_departament NUMBER,
denumire_departament VARCHAR2(50),
id_manager NUMBER,
STATIC FUNCTION calculeaza_statistici(p_id_dep NUMBER)
RETURN NUMBER );
CREATE TABLE departamente_t OF departamente_o;
INSERT INTO departamente_t
SELECT d.id_departament, d.denumire_departament, d.id_manager
FROM departamente d ;

Exemplu in Oracle
CREATE OR REPLACE TYPE angajati_o AS OBJECT(
ID_ANGAJAT NUMBER(6),
PRENUME
VARCHAR2(20),
NUME
VARCHAR2(25),
EMAIL
VARCHAR2(25),
TELEFON
VARCHAR2(20),
DATA_ANGAJARE DATE,
ID_FUNCTIE VARCHAR2(10),
SALARIUL
NUMBER(8,2),
COMISION
NUMBER(2,2),
ID_MANAGER NUMBER(6),
ID_DEPARTAMENT NUMBER(4),
MEMBER FUNCTION calculeaza_bonus RETURN NUMBER,
MEMBER FUNCTION calculeaza_taxe RETURN NUMBER,
MEMBER FUNCTION calculeaza_venituri_totale RETURN NUMBER,
STATIC FUNCTION calculeaza_statistici (p_id_ang NUMBER) RETURN NUMBER);
CREATE TABLE angajati_t OF angajati_o;

Exemplu in Oracle
CREATE OR REPLACE TYPE BODY departamente_o IS

STATIC FUNCTION calculeaza_statistici (p_id_dep NUMBER)


RETURN NUMBER
IS
v_nr_ang number;
BEGIN
SELECT count(*) INTO v_nr_ang
FROM angajati_t a
WHERE a.id_departament=p_id_dep;
RETURN v_nr_ang;
END;
END;
INSERT INTO angajati_t SELECT * FROM angajati d ;

Exemplu in Oracle

CREATE OR REPLACE TYPE BODY angajati_o IS


-- functia membru calculeaza_bonus
MEMBER FUNCTION calculeaza_bonus
RETURN NUMBER
IS
BEGIN
RETURN SELF.salariul*NVL(SELF.comision,0);
END;
-- functia membru calculeaza_venituri_totale
MEMBER FUNCTION calculeaza_venituri_totale
RETURN NUMBER
IS
BEGIN
RETURN SELF.salariul*(1+NVL(SELF.comision,0));
END;
-- functia membru calculeaza_taxe
MEMBER FUNCTION calculeaza_taxe
RETURN NUMBER
IS
BEGIN
RETURN calculeaza_venituri_totale*0.16;
END;
-- functia calculeaza_statistici
STATIC FUNCTION calculeaza_statistici (p_id_ang
number)
RETURN number
IS
v_nr_comenzi number;
BEGIN
SELECT COUNT(*) INTO v_nr_comenzi
FROM comenzi_t c
WHERE c.id_angajat=p_id_ang;
RETURN v_nr_comenzi;
END;
END;

create table comenzi_t as select * from vlad_hr.comenzi;

Exemplu interogare

Exemplu interogare