CATEGORII DOCUMENTE |
MODEL DE DATE PENTRU BAZE DE DATE ORIENTATE OBIECT
In acest capitol se prezinta un model de date orientat-obiect care apartine lui Manojit Sarkar si lui Steven P. Reiss [ ]. Acest model de date reprezinta toate entitatile ca obiecte.Un obiect este complet identificat printr-un identificator de obiect. Un obiect este caracterizat de o stare (instanta) si o comportare. Fiecare obiect apartine la o clasa. Clasa defineste structura instantei obiectelor si comportarea lor. Clasele sunt organizate prin ierarhii de mostenire in sensul ca un obiect al clasei a poate fi utilizat in locul unui obiect al oricarei supraclase a lui a. Polimorfismul de mostenire este dat de ultimele legaturi ale metodelor de baza pentru clasa actuala de obiecte. Modelul de date elimina dihotomia obiect-versus-valori prin reprezentarea tuturor entitatilor ca obiecte. Acesta este un atribut al performantei si al puterii de modelare.
Introducere
Bazele de date orientate obiect au fost dezvoltate ca raspuns la nevoile de modelare a datelor complexe din diferite domenii de activitate ca: medii de programare, CAD, grafica etc. Ne vom limita la sistemele de gestiune ale bazelor de date orientate obiect, de construire a informatiilor abstracte despre programe numite abstractii program. Ideea este sa se genereze abstractii prin interogarea bazei de date, raspunsurile la intrebari sunt abstractii tinta. Aceste abstractii sunt ulterior grafice vizualizate si sistemul complet este un sistem de vizualizare .
Modelul de date al sistemului de programe de vizualizare este orientat obiect si am dorit o baza de date cu un model de date compatibil. Obiectul initial al modelului este acela de a combina simplitatea, puterea de modelare si performanta. Aceasta elimina dihotomia obiect-versus-valoare care se intalneste la modelele de date din O2 si EXTRA. Vom arata ca este posibil sa satisfaca domenii diverse de modelare ca: obiecte compuse din ORION [ ] si obiecte own si ref din EXTRA, impreuna cu paradigma orientata obiect.
Pe de alta parte nici O2 si nici EXTRA nu dau acces exclusiv la obiecte cu OID si cu compunerea. Simplitatea conceptuala a modelului de date nu micsoreaza performanta. Este posibil sa se proiecteze optimizari interne cu performante bune .
Valori
Vom incepe descrierea formala a modelului de date cu urmatoarele multimi disjuncte doua cate doua:
- D --o multime finita de tipuri de baza,
- O --o multime infinita si numarabila de identificatori de obiecte,
- A --o multime finita de nume de atribute,
- M --o multime finita de nume de metode,
- C --o multime finita de nume de clase.
Fiecare obiect este identificat in mod unic de un identificator de obiect sau oid. Obiectul poate avea o valoare sau valoarea sa poate fi nedefinita. Fiecare obiect apartine unei clase. Numai valorile structurate pot fi valori de obiecte. Valorile structurate sunt compuse din valori atomice.
Valori atomice
Exista patru tipuri de baza, acestea sunt :
- Integer,
- Float,
- Boolean,
- String.
Prin urmare D=. Domeniile tipurilor de baza vor fi numite domenii de baza. Fiecare domeniu consta dintr-o multime numarabila infinita de valori atomice. De exemplu domeniul tipului integer consta din multimea tuturor valorilor intregi. Valorile atomice din domeniile de baza sunt numite valori de baza pentru a le deosebi de identificatori ( oid-uri).
Un tip este fie o clasa fie un tip de baza. Clasele sunt generate din tipuri de baza si clase care utilizeaza constructorii de: tupluri, multimi si liste. O clasa construita prin utilizarea constructorului tuple se numeste clasa-tuplu, respectiv clasa-multime si clasa-lista pentru ceilalti constructori.
Exista trei elemente speciale:
-nulltuple
-nullset
-nulllist
Cu aceste elemente speciale sunt notate toate obiectele nedefinite ale claselor de tip tuplu respectiv multime si lista. Valoarea unui obiect nedefinit este presupusa necunoscuta sau o multime vida sau o lista vida care depind de clasa de obiecte.
Fiecare element al lui O este deasemenea o valoare atomica.
Valori structurate
Valorile structurate sunt construite din valori atomice utilizand constructorii Tuple, List si Set. Exista o valoare structurata speciala [] care este utilizata pentru a nota valoarea oricarui tuplu cu zero atribute. Trebuie observat ca semnul [] si tuplul null nu au aceleasi valori, primul noteaza o valoare structurata in timp ce al doilea este o valoare atomica si oid-ul unui obiect a carui valoare este nedefinita. Valorile structurate sunt definite formal dupa cum urmeaza:
- valoarea [ ] este o valoare structurata;
- fiecare tuplu de valori atomice este o valoare tuplu unde : sunt nume de atribute si respectiv valori atomice pentru i=1,2,,n.
- fiecare multime de valori atomice este o valoare-multime unde: sunt valori atomice pentru i=1,2,,n
- fiecare lista de valori atomice este o valoare-lista, unde: sunt valori atomice pentru i=1,2,n .
Nu exista o ordine printre elementele unei multimi. Numai multimile omogene (liste) sunt permise, adica tipurile tuturor elementelor oricarei multimi (liste) trebuie sa fie aceleasi. Un obiect-multime a carui valoare este multimea vida este echivalent cu cu un obiect nedefinit al unei clase multime. Similar un obiect-lista a carui valoare este o lista vida este echivalent cu un obiect nedefinit al unei clase-lista.
Vom nota multimea tuturor valorilor structurate, care este o multime infinita si numarabila, cu V.
Clase
Fiecare obiect este instantierea unei clase. Clasa descrie structura valorilor obiectelor si comportamentul obiectelor.
Sintaxa de definire a clasei este urmatoarea :
< declaratie clasa > Class < nume-clasa >
Class < nume-clasa > <definitie-clasa >
< definitie-clasa > [inheriths <nume-superclasa >]
< structura clasa >
[ Methods ]
< structura clasa > Tuple '(' ')'
Set '(' < tip-de-baza> ')'
Set '(' < [own] < nume-clasa> ')'
Set '(' < [own] < structura-clasa > ')'
List '(' < tip-de-baza > ')'
List '(' [own] < nume-clasa > ')'
List '(' [own] < structura-clasa > ')'
< definitie-atribut > < nume-atribut > ':' < tip-de-baza >
<[own] < nume-atribut > ' : ' < nume-clasa >
<[own] < nume-atribut > ': ' < structura-clasa >
< metoda-clasa > < antet-metoda > < corp-metoda >
< antet-metoda > <nume-metoda >'(' < definitie-parametru > ) ' : ' < definitie-rezultat >
< definitie-parametru > < tip-de-baza >
< nume-clasa >
< structura-clasa >
< definitie-rezultat > < tip-de-baza >
< nume-clasa >
< structura-clasa >
< corp-metoda > '
O clasa poate fi definita prin specificarea unui nume, unei superclase si a metodelor.
Superclasele si metodele sunt optionale. Este posibil sa definim clase implicit fara un nume,
superclasa si metode. In exemplul 1 sunt definite explicit opt clase: Punct ,Varf, Nod, Muchie,
Segment, Curba, Retea si Graf. Sunt deasemenea declarate implicit cateva clase fara nume, fara
superclase si fara metode.
Clasa care corespunde punctelor de curbura a clasei muchie_dreapta este o astfel de clasa cu structura list. Este posibil sa definim recursiv astfel de clase ca de exemplu clasa nod din exemplul 1. Se permite ca un nume de clasa sa fie declarat si utilizat inainte de a fi definit ca de exemplu clasa muchie din acelasi exemplu 1.
Exemplul 1
Class Punct
Tuple ( x : Float , y : Float )
methods };
Class muchie;
Class Varf
Tuple ( own pozitie :punct,
eticheta : String,
raza : Float ) ;
Class Nod
Inherit Varf;
Tuple (succesori : Set(Nod));
Class Muchie
Tuple ( inceput : Varf,
destinatie: Varf,
eticheta : String)
Methods ;
Class Muchie-dreapta
Inherit Muchie
Tuple (own punct-de-curbura: List(punct) )
Methods
Class Muchie-curba
Inherit Muchie
Tuple (own punct-de-control: Lista(punct) )
Methods };
Class Retea Set(varfuri) ;
Class Graf Set (nod) ;
Structura
Toate clasele trebuie sa aiba o structura. Cum s-a aratat mai sus structurile sunt construite prin utilizarea constructorilor Tuple, Set, List din tipuri de baza si din nume de clase deja declarate. O clasa construita numai prin utilizarea constructorului Tuplu se numeste clasa tuplu. Similar o clasa construita numai prin utilizrea constructorului Set se numeste clasa set (multime) si o clasa generata prin utilizarea constructorului List se numeste clasa lista. Valoarea oricarui obiect a oricarei clase tuplu poate fi numai o valoare tuplu. Similar, valoarea unui obiect a oricarei clase multime poate fi numai o valoare multime si valoarea unui obiect al oricarei clase lista poate fi numai o valoare lista. Orice obiect posibil poate fi referit de mai multe alte obiecte. Uneori este necesar sa se interzica aceasta mpartire si sa permita ca o clasa de obiecte sa fie referita de alte obiecte. Aceasta restrictie poate fi specificata utilizand n definitia atributului calificativul own. Un obiect ce are un atribut specificat cu own (adica propriu) nu poate fi referit de mai mult de un obiect.
Metode
O declaratie a unei clase poate avea una, mai multe sau nici o metoda. Metodele definesc comportamentul obiectelor. Fiecare metoda este o functie care are un antet si un corp. Antetul este o expresie de forma :
unde: c este reciver(cel care primeste valoarea);
m este numele metodei;
sunt tipuri de parametrii pentru n
este tipul valorii returnate.
Corpul metodei este o parte a codului scris intr-un limbaj de programare.
Exemplul 2:
In exemplul 1 sunt definite patru metode pentru clasele: Punct, Muchie, Muchie-dreapta, Muchie-curba. Signaturile acestor metode sunt :
Point : distanta (Punct ) Float;
Muchie : lungime ( ) Float;
Muchie-dreapta : lungime ( ) Float;
Muchie-curba : lungime ( ) Float;
Mostenirea
O definitie a unei clase poate cuprinde o superclasa ca o parte a definitiei sale. Mostenirea permite utilizatorului sa obtina noi clase din clasele existente. In modelul de date prezentat in acest capitol nu este permisa decat mostenirea directa, adica o clasa poate sa aiba cel mult o superclasa.
Relatia de mostenire este o ordine partiala pe clase adica este reflexiva, antisimetrica si tranzitiva. Deoarece superclasele sunt optionale ierarhia de clase care rezulta nu poate fi reprezentata , de obicei , de un singur arbore, ci de mai multi arbori disjuncti.
O clasa mosteneste atribute si metode ale superclasei sale prin lipsa. Structura si own-ul de metoda al unei clase mosteneste, include din acest motiv atributele mostenite si metodele respective.
Clasele care mostenesc pot avea in plus atribute si metode sau pot redefini metode si atribute mostenite. Totusi structura care rezulta si multimea de metode a unei clase care mosteneste trebuie sa fie compatibile cu structura si multimea de metode ale superclasei.
Compatibilitatea structurala
Compatibilitatea structurala notata prin simbolul este definita in urmatorul mod :
tt pentru orice tip t
- pentru oricare trei tipuri
- pentru tipurile
- pentru orice doua tipuri t si daca t atunci Set(t ) Set( );
- pentru orice doua tipuri t si daca t atunci List(t ) List( );
Compatibilitatea multimii de metode
Multimea de metode ale unei clase trebuie sa fie compatibil cu aceea a superclasei sale. Daca m este un nume de metoda si c este un nume de clasa , atunci m este definita in c daca si numai daca exista o metoda cu antetul :
O clasa poate sa nu tina seama de metodele mostenite prin redefinirea de metode cu acelasi nume. Daca c este o superclasa a clasei c' si ea are doua metode cu antetele :
atunci trebuie satisfacute urmatoarele :
n = N;
;
Relatia de subclasa
Relatia de subclasa este notata cu simbolul < . Daca c este o subclasa a lui c' atunci scriem c < c'. Compatibilitatea setului de structuri si metode permit ca numai doua clase sa fie legate prin relatia subclasa-superclasa.
Substituire
Relatiile (legaturile) de subclasa permit ca un obiect al clasei c sa fie utilizat in orice context care necesita un obiect din clasa c' cand c' este o superclasa a lui c. Cu alte cuvinte un obiect al oricarei clase c este deasemenea un obiect al tuturor superclaselor din c.
Legatura dinamica (Late binding )
Deoarece un obiect al unei anumite clase poate fi atribuit unei variabile a superclasei sale, dandu-se o metoda care face apel la o variabila, uneori metoda care se executa poate fi determinata doar in timpul executiei programului pe baza clasei careia apartine obiectul. Acest mod de lucru e cunoscut sub numele de Late binding.
Supraincarcarea
Numele de metode pote fi deasemenea supraincarcat(supradefinit) prin definirea metodelor cu acelasi nume in mai mult de o clasa nelegate prin legatura dintre subclasa-superclasa. Astfel selectarea metodei 'adecvate' dintre metodele cu acelasi nume se face in timpul compilarii pe baza anteturilor metodelor.
Clase declarate implicit
Prin urmare clasele declarate implicit nu au nume, ele nu pot fi declarate ca subclase sau superclase ale altei clase. Sistemul poate presupune ca o clasa declarata implicit nu are subclase si poate optimiza reprezentarea si accesul acestor clase pentru a mari performanta.
Echivalenta claselor
Doua clase sunt echivalente daca si numai daca au acelasi nume. Sistemul da nume generat intern intern, clasele declarate implicit drept clase asociate, ca de exemplu punct-de-ramificare din exemplul 1. Clasele generate implicit care au aceeasi structura primesc acelasi nume intern si prin urmare sunt echivalente.
Functia de definire a clasei
Vom defini o functie partiala s care face sa corespunda unui nume de clasa din C o definitie a clasei. Ca de exemplu dupa ce am definit clasele in exemplul 1 avem
s(Punct)= Tuple(x:Float, y:Float) methods }.
Functia s este admisa pentru clasele care au fost declarate dar nu au fost definite. Schema bazei de date include aceasta functie.
Obiecte
Valoarea unui obiect poate fi definita sau nedefinita. Un obiect a carei valoare este definita este un triplet ( o , v, c ) unde o apartine lui O si este identificatorul obiectului (oid), v apartine lui V si este valoarea obiectului, iar c este o clasa de obiecte si apartine lui C.
Daca valoarea obiectului este nedefinita atunci identificatorul lui trebuie sa fie nulltuple,nullset sau nulllist. Un obiect al carui identificator este nulltuple este un obiect al clasei de tupluri. Similar, un obiect cu identificatorul nullset este un obiect al unei clase multime si un obiect cu identificatorul nulllist este un obiect al clasei lista. Un obiect a carui valoare este nedefinita este numit obiect nedefinit.
Definim o functia partiala s : O-->V functia care face sa corespunda unui identificator al unui obiect valoarea sa pentru orice obiect din baza de date. Interpretarea valorii depinde de clasa. De aici incolo vom presupune ca valoarea v a unui obiect ( o, v, c ) este definita.
- daca o este identificatorul unui obiect dintr-o clasa tuplu oarecare atunci s(o) este o valoare tuplu;
- daca o este identificatorul unui obiect dintr-o clasa lista oarecare atunci s(o) este o valoare lista;
- daca o este identificatorul unui obiect dintr-o clasa multime oarecare atunci s(o) este o valoare multime;
Ori de cate ori cand un obiect al unei clase este creat in baza de date cu o valoare definita aplicatia s este actualizata. Instanta unei scheme a unei baze de date include functia s. Sistemul ofera trei operatori de egalitate si doi operatori de copiere.Operatorii de egalitate testeaza "id-equality", "shallow equality " (egalitatea slaba) si "deep equality" ( egalitatea tare).
Operatorii de egalitate
Sistemul este inzestrat cu trei operatori de egalitate care testeaza id-galitate , egalitatea-slaba si egalitatea-tare.
- id-egalitate : Doua valori de baza sunt id-egale daca ele au acelea]i valori.Doua obiecte sunt id-egale cand ele sunt definite si au acelasi identificator (oid). Pentru notarea id-egalitate se utilizeaza simbolul "=".
- egalitatea-slaba : se noteaza cu simbolul " =s ". Doua valori de baza sunt slab-egale daca ele sunt id-egale. Doua obiecte sunt slab-egale daca ele sunt id-egale. Daca nu sunt id-egale atunci sunt slab-egale numai daca valorile lor sunt id-egale. O valoare poate fi ; fie o valoare-tuplu, o valoare-multime sau o valoare lista. Daca valorile sunt valori tuplu, atunci numele de atribute corespunzatoare trebuie sa fie id-egale. Daca doua valori sunt valori multime atunci ele trebuie sa aiba aceesi cardinalitate si exista o aplicatie bijectiva intre elementele multimilor si elementele corespunzatoare sunt id-egale. Daca valorile sunt liste de valori lungimile listelor trebuie sa aceesi lungime si elementele listelor trebuie sa fie aceleasi.
- egalitatea-tare: se noteaza cu simbolul "=d". Orice doua valori de baza sunt tare egale daca ele sunt id-egale. Orice doua obiecte sunt tare egale daca sunt slab egale. Daca ele nu sunt slab egale atunci ele sunt tare egale daca valorile contin oid-uri si obiectele reprezentate prin oid-urile corespunzatoare sunt slab egale.
Operatorii de egalitate pot fi aplicati la obiecte din clase compatibile sau tipuri de baza.
Copiere
Asemanator operatorilor de egalitate sistemul da doi operatori de copiere : s-copiere si d-copiere.
s-copiere: O s-copie (copie slaba) a unui obiect este un obiect care are aceiasi valoare si clasa cu obiectul dat, dar oid diferit ;
d-copiere: O d-copie (copie tare) a unui obiect este un obiect care are o aceiasi clasa cu obiectul dat dar oid diferit si posibil o valoare diferita creata aplicand recursive operatorul de d-copiere.
Operatiile de copiere sunt utile atata timp cat asignam valori la atributele own prin copierea obiectelor existente.
Redefinirea operatorilor de egalitate si copiere
Numai operatori de egalitate slaba, egalitate tare si ambii operatori de copiere pot fi redefiniti de metodele definite in clase. Acestea permit utilizatorului sa defineasca operatori de egalitate si operatori de copiere potriviti pentru diferite clase de obiecte.
Extensii de clase
O schema a unei baze de date orientate obiect presupune declararea explicita a unei multimi de clase cIC. Sistemul intretine o extensie pentru fiecare clasa din C. Extensia este multimea tuturor obiectelor care apartin clasei asociate. Definim o functie pd numita de asignare disjuncta de identificatori (oid) de la multimea numelor de clase, la extensii. Daca pentru un anumit n 0 este extensia clasei c , atunci
pd c) =
Functia pd se numeste asignare disjuncta de identificatori deoarece daca c si c' sunt doua clase distincte din C atunci
pd c) pd(c') =
Dandu-se pd asignarea de identificatori p (indusa de pd ) este o functie care asociaza fiecarui nume de clasa o multime de identificatori astfel incat
p(c)= pd(c)
Cu alte cuvinte p asociaza fiecarui nume de clasa multimea obiectelor care apartin acelei clase sau care apartin unei subclase a clasei respective. Dandu-se p interpretarea clasei c este definite dupa cum urmeaza:
fiecare tip de baza ( integer, Float, Boolean, String) are propriu domeniu natural,
Pentru fiecare clasa-tuplu c domeniu(c ) = ,
Pentru fiecare clasa-multime c domeniu(c ) = ,
Pentru fiecare clasa-lista c domeniu(c ) = .
Obiectele unei clase pot avea valori din domeniul definit de structura unei clase. Domeniul unei structuri este definit dupa cum urmeaza:
- Domeniu( Tuple (a1:t a2: t ,.., an: tn
- Domeniu( Set (t ,
- Domeniu( List (t
Baza de date
O baza de date consta dintr-o schema si o instanta . Schema bazei de date este notata cu S . O instanta a schemei bazei de date este notata cu I . Exista o separare evidenta intre schema si instanta in modelul prezentat aici. O schema a bazei de date declara in mod explicit o mostenire de clase c din C. Sistemul pastreaza o extensie pentru fiecare clasa din C .
Schema
O schema a bazei de date este un triplet ( c ,s ,G ) unde cIC este o multime de nume de clasa,s este functia care face sa corespunda unui nume de clasa o definitie de clasa si G este o multime de variabile globale pentru clasele asociate.Multimile c si G actioneaza ca puncte de intrare in baza de date.
Orice obiect cu un nume global in G este persistent.
Orice obiect care este o parte a unui obiect persistent este persistent.
Functia s aplica unui nume de clasa o definitie de clasa. Ierarhia de clase poate fi construita din informatii disponibile la definitia claselor.
O instanta a unei scheme a bazei de date consta dintr-o multime finita de obiecte si urmatoarele patru functii : , p s n care au urmatoarele semnificatii :
- functia de atribuire disjuncta de oid-uri;
- p functia de atribuire de oid-uri mostenita din ;
- s functia care face sa corespunda oid-urilor valorile tuturor obiectelor
din instantierea bazei de date;
- n functia care face sa corespunda numelor din G obiecte ca valori atribuite curent
variabilelor.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1096
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved