Download presentation
Presentation is loading. Please wait.
Published byὝδρα Ανδρέου Modified over 6 years ago
1
LEKSION 11 Database-t Object-Oriented(te orientuar objekt)
Tipet e te dhenave komplekse Modeli i te dhenave i orientuar objekt Gjuhet e programimit object-oriented
2
Nevoja per tipet e te dhenave komplekse
Aplikacionet tradicionale te database-it ne procesimin e te dhenave kane konceptin e tipeve te te dhenave te thjeshta. Relativisht pak tipe te te dhenave, ku plotesohet 1NF Tipet e te dhenave komplekse kane patur nje perdorim te gjere ne vitet e fundit P.sh. Adresat mund te shikohen si: String e vetme, ose Atribute te ndara per cdo pjese, ose Atribute te perbera (te cilat nuk jane ne 1NF) P.sh. Shpesh eshte e pershtatshme per te ruajtur atribute shumevlereshe, pa krijuar nje relacion te ndare per ruajtjen e vlerave ne 1NF Aplikacionet computer-aided design, computer-aided software engineering Database-t multimediale dhe te imazhit, dhe database-t document/hypertext
3
Modeli i te dhenave Object-Oriented
Shkurt dhe qarte, nje objekt i korrespondon nje entiteti ne modelin E-R Modeli (paradigma) object-oriented eshte i bazuar ne kodin e enkapsulimit dhe te dhenat qe i perkasin nje objekti ne nje njesi te vetme Modeli i te dhenave object-oriented eshte nje model logjik i te dhenave (si ne mod. E-R) Adaptimi i nje modelit te programimit object-oriented (p.sh. Smalltalk, C++ ) ne sistemet e database-it
4
Struktura objekt Nje objekt ka te shoqeruar me te:
Nje bashkesi variablash qe permbajne te dhenat per objektin. Nje bashkesi mesazhesh per te cilat pergjigjet objekti; cdo mesazh mund te kete zero, nje ose disa parametra Nje bashkesi metodash, ku secila eshte pjese e kodit per te implementuar nje mesazh; nje metode kthen nje vlere si pergjigje kundrejt mesazhit Paraqitja fizike e te dhenave eshte e dukshme vetem tek implementuesi i objektit Mesazhet dhe pergjigjet sigurojne nderfaqen e vetme te jashtme per nje objekt Termi i mesazhit nuk nenkupton domosdoshmerisht kalimin fizik te mesazhit. Mesazhet mund te implementohen si nje thirrje procedure.
5
Mesazhet dhe metodat Metodat jane programe te shkruara ne nje gjuhe me qellim te pergjithshem me tiparet e meposhtme: Vetem variablat ne objekt mund te referohen direkt Te dhenat ne objektet e tjera jane te referuara vetem nga dergimi i mesazheve\ Metodat mund te jene metoda read-only ose update Metodat read-only nuk ndryshojne vleren e objektit Ne te vertete, cdo atribut i nje entiteti duhet te perfaqesohet nga nje variabel dhe dy metoda, nje per te lexuar dhe tjetra per te update-ar atributin P.sh. Atributi address paraqitet nga nje variabel address dhe dy mesazhe get-address dhe set-address. Per lehtesi, disa modele te te dhenave object-oriented lejojne aksesin direkt te variablave te objekteve te tjera
6
Klasat objekt Objektet e ngjashme grupohen ne nje klase; cdo objekt i tille quhet nje instance e asaj klase Gjithe objektet ne nje klase kane te njejten: Variabel, me te njejtin tip Nderfaqen e mesazhit Metodat Ato mund te diferencohen nga vlerat qe i caktohen variablave Shembull: gruponi objektet per njerezit ne nje klase person Klasat jane analoge me blloqet e entiteteve ne modelin E-R
7
Shembull i percaktimit te klases
class employee { /*Variables */ string name; string address; date start-date; int salary; /* Messages */ int annual-salary(); string get-name(); string get-address(); int set-address(string new-address); int employment-length(); }; Metodat per te lexuar dhe per te caktuar variablat e tjere gjithashtu nevojiten me enkapsulimin perkates Metodat percaktohen te ndara P.sh . int employment-length() { return today() – start-date;} int set-address(string new-address) { address = new-address;}
8
Trashegimia P.sh. Klasa e klientave te bankes eshte e ngjashme me klasen e punonjesve te bankes, megjithese ka ndryshime Te dyja ndajne variablat dhe mesazhet, p.sh. Emri (name) dhe adresa(address) Por ka variabla dhe mesazhe specifike per secilen klase, p.sh paga(salary) per punonjesit dhe norma-kredise (credit-rating) per klientet Cdo nenpunes eshte nje person; keshtu qe employee eshte nje specializim i person Njesoj, customer eshte nje specializim i person Krijoni klasat person, employee dhe customer Var/mesazhet te aplikueshme per gjithe personat e lidhura me klasen person. Var/mesazhet specifike per punonjesit te lidhur me klasen employee; njesoj per customer
9
Trashegimia Vendosni klasat ne nje hierarki specializim/IS-A
Var/mesazhet qe i perkasin klases person trashegohen nga klasa employee si dhe customer Rezultati eshte nje hierarki klase
10
Percaktimi i hierarkise se klasave
class person{ string name; string address: }; class customer isa person { int credit-rating; }; class employee isa person { date start-date; int salary; }; class officer isa employee { int office-number, int expense-account-number, };
11
Shembull klase hierarkie (vazh..)
Listimi i plote i variablave per objektet ne klasen officer: office-number, expense-account-number: te percaktuara lokalisht start-date, salary: te trasheguara nga employee name, address: te trasheguara nga person Metodat trashegohen ne menyre te ngjashme me variablat Zevendesueshmeria— cdo metod e nje klase, supozojme person, mund te thirret njesoj me cdo objekt qe i perket cdo nenklase, si psh subclass officer i person. Zgjerimi i klases: bashkesia e te gjithe objekteve ne klase. Dy opsione: 1. Zgjerimi i klases employee perfshin gjithe objektet officer, teller dhe secretary Zgjerimi i klases employee perfshin vetem objektet employee qe nuk gjenden ne nje subclass si officer, teller, ose secretary Kjo eshte zgjedhja e zakonshme ne sistemet OO Mund te aksesoje zgjerimet e subclass-ve per te gjetur gjithe objektet e nentipeve employe
12
Shembull te trashegimise se shumefishte
Klasa DAG per shembullin e bankes
13
Trashegimia e shumefishte
Me trashegimine e shumefishte nje klase mund te kete me shume se sa nje superklase Relacioni Klasa/nenklasa paraqitet nga nje directed acyclic graph (DAG) Vecanerisht i dobishem kur objektet mund te klasifikohen ne me shume se nje menyre, te cilat jane te pavarura nga njeri-tjetri P.sh. temporary/permanent eshte i pavarur nga Officer/secretary/teller Krijoni nje nenklase per cdo kombinim te nenklasave Nuk eshte e nevojshme te krijohen nenklasat per kombinime qe nuk eshte e mundur te modelohen ne database Nje klase trashegon variablat dhe mesazhet nga te gjitha superklasat Ekziston nje ambiguitet kur nje variabel/mesazh N me te njejtin emer trashegohet nga dy superklasa A dhe B Nuk eshte problem nese variabel/mesazh percaktohet ne nje superklase shared (te perbashket) Perndryshe, bej nje nga veprimet e meposhtme: Shenoje si nje error Riemero variablat (A.N dhe B.N) Zgjedhni vetem njerin
14
Disa shembuj per trashegimine e shumefishte
Nga ana konceptuale, nje objekt mund t’i perkase seciles nga subclass-t e shumta Nje person mund te luaje rolin e nje studenti (student), nje mesuesi (teacher) ose lojtari(footballPlayer), ose cdo kombinim nga te treja P.sh. Nje student teaching assistant qe gjithashtu luan futboll Mund te perdorim disa trashegimi per te modeluar “rolet” e nje objekti Lejimi i nje objekti per te pranuar nje ose disa nga nje bashkesi tipesh Por, shume sisteme insistojne qe nje objekt duhet te kete nje most- specific class Qe do te thote, duhet te kete nje klase seciles i perket nje objekt, e cila eshte nje subclass e te gjithe klasave te tjera seciles i perket objekti Krijoni subclasses si psh, student-teacher dhe student-teacher-footballPlayer per cdo kombinim Kur jane te mundura disa kombinime, krijimi i subclasses per cdo kombinim mund te behet i pavolitshem
15
Identiteti i objekteve
Nje objekt e ruan identitetin e tij edhe nese disa ose te gjitha vlerat e variablave ose percaktimet e metodave ndryshojne me kalimin e kohes Identiteti i objektit eshte nje nocion me i forte i identitetit sesa ne gjuhet e programimit ose ne modelet e te dhenave qe nuk bazohen ne orientimin e objektit Vlera– vlera e te dhenave; p.sh vlera e celesit primar e perdorur ne sistemet relacionale Emri – i dhene nga perdoruesi; i perdorur per var dhe procedurat Built-in – identiteti i ndertuar ne modelin e te dhenave ose ne gjuhen e programimit Nuk kerkohet user-supplied identifier Eshte forma e identitetit e perdorur ne sistemet object-oriented
16
Identifikuesit e objekteve
Object identifiers perdoren per te identifikuar ne menyre unike objektet Identifikuesit e objekteve jane unik: Dy objekte nuk kane te njejtin identifikues Cdo objekt ka vetem nje identifikues objekti P.sh. Fusha spouse e nje objekti person mund te jete nje idenfikues e nje objekti tjeter person Mund te ruhet si nje fushe e nje objekti, per t’iu referuar nje objekti tjeter Mund te jete: I gjeneruar nga sistemi ose I jashtem (si psh. social-security number) Identifikuesit e gjeneruar nga sistemi: Jane me te lehte per t’u perdorur, por nuk mund te perdoren ndermjet sistemeve te dabase-it Mund te jene te perseritshem nese ekziston tashme nje identifikues unik
17
Permbajtesit e objekteve
Cdo komponent ne nje design mund te permbaje disa komponente te tjera Mund te modelohen si permbajtes te objekteve. Objektet qe permbajne objekte te tjera quhen objekte te perbera Nivele te shumta te permbajtjeve krijojne nje hierarki permbajtjeje Linqet e interpretuara si is-part-of, jo is-a. Lejon qe te dhenat te shikohen ne granularitete (te grimcuara) te ndryshme nga perdorues te ndryshem
18
Gjuhet object-oriented
Konceptet object-oriented mund te perdoren ne menyra te ndryshme Orientimi-objekt mund te perdoret si nje tool (mjet) dizenjimi, dhe mund te kodohet ne, psh, nje database relacionale Ne menyre analoge me modelimin e te dhenave me diagramen E-R dhe pastaj konvertimi ne nje bashkesi relacionesh Konceptet e orientimit objekt mund te pershihen ne nje gjuhe programimi qe perdoret per te manipuluar database-in Object-relational systems – shtimi i tipeve komplekse dhe orientimi-objekt ne gjueh relacionale Persistent programming languages – zgjerimi i gjuhes se orientuar-objekt per t’u marre me database-t duke shtuar konceptet si perhershme(qendrueshme) dhe koleksionet
19
Gjuhet e perhershme te programimit
Gjuhet e qendrueshme te programimit lejojne krijimin e objekteve dhe ruajtjen e tyre ne nje database, dhe perdorimin e tyre direkt nga nje gjuhe programimi Lejojne manipulimin e te dhenave direkt nga gjuha e programimit Nuk eshte e nevojshme te shkruajme SQL Nuk eshte e nevojshme per ndryshime te dukshme ne format (type) Ndryshimet e formateve kryhen ne menyre transparente nga sistemi Pa nje gjuhe te qendrueshme programimi, ndryshimet ne format behen nje “barre” tek programuesi Me shume kod per te shkruar Me shume shanse per bugs (gabime) Lejojne manipulimin e objekteve ne memorie Nuk eshte e nevojshme qe ne menyre eksplicite te ngarkohen nga ose te ruhen ne database Ruan kodin, ruan tejkalimin e ngarkeses/ruajtjes kur kemi te bejme me sasi te medha te te dhenave
20
Gjuhet e perhershme te programimit
Dizavantazhet e gjuheve te qendrueshme te programimit Ne saje te fuqise se disa gjuheve te programimit, eshte me e lehte per te bere gabime ne programim qe demton database-in. Kompleksiteti i gjuheve krijon veshtiresi ne nivelin e larte te optimizimit automatik Nuk suporton deklarimin e query-ve ashtu si dhe database-t relacionale
21
Perhershmeria e objekteve
Metodat per te bere objektet e perkohshme (te rastit) te perhershme duke vendosur: Persistence by Class – deklaroj gjithe objektet e nje klase qe te jene te perhershme; te thjeshte por jo fleksibel Persistence by Creation – zgjeroj sintaksen per krijimin e objekteve per te specifikuar qe nje objekt eshte i perhershem. Persistence by Marking – nje objekt qe eshte i perhershem dhe pertej ekzekutimit te programit shenohet si i perhershem perpara perfundimit te programit Persistence by Reachability – deklaroj (root) objektet e perhershme; objektet jane te perhershem nese ato referohen nga objekti root direkt ose indirekt
22
Identiteti i objekteve dhe pointer-at
Nje objekti te perhershem i caktohet nje identifikues objekt i perhershem Gradat e vazhdimesise se identitetit: Intraprocedure – idenfikimi vazhdon vetem gjate ekzekutimit te nje procedure te vetme Intraprogram – idenfikimi vazhdon vetem gjate ekzekutimit te nje programi te vetem ose query Interprogram – idenfikimi vazhdon nga nje ekzekutim i programit ne nje tjeter, por mund te ndryshojne nese organizimi i ruajtjes ndryshon Persistent – idenfikimi vazhdon kudo gjate ekzekutimit te programit dhe riorganizimit strukturor te te dhenave; i kerkuar per sistemet e orientuara-objekt
23
Identiteti i objekteve dhe pointer-at
Ne gjuhet O-O si C++, nje identifikues objekt eshte aktualisht nje pointer ne memorie Persistent pointer – perhershem pertej ekzekutimit te programit Mund te mendohen si nje pointer ne nje database P.sh. Specifikoni identifikuesin e file-t dhe ofset (fillimin) ne file Problemet e lidhura me riorganizimin e db-se duhet te zgjidhen me ane te mirembajtjes se forwarding pointers
24
Ruajtja dhe aksesii i objekteve te perhershem
Emerimi i objekteve (ashtu si do te emeronim file-t) Nuk mund te shkallezohet ne nje numer te madh objektesh Ne menyre tipike i jepet vetem shtrirjes se klasave (class extents) dhe koleksioneve te tjera te objekteve, por jo objekteve Veme ne dukje identifikuesit e objekteve ose pointer-at e perhershem ne objekte Mund te ruhen nga jashte Gjithe objektet kane identifikues objekti Ruajme koleksionet e objekteve, dhe lejojme programet te perseriten pergjate koleksioneve per te gjetur objektet e kerkuara Modelimi i koleksioneve te objekteve si tipe koleksioni Class extent – koleksioni i te gjithe objekteve qe i perkasin klases; zakonisht mirembahet per te gjithe klasat qe mund te kene objekte te perhershme
25
Sistemet C++ te perhershem
Gjuha C++ lejon suportin per shtimin e perhershmerise pa ndryshuar gjuhen Deklarojme nje klase te quajtur Persistent_Object me atributet dhe metodat per te suportuar perhershmerine Overloading – aftesia per te ripercaktuar emrat e funksioneve dhe operatoret standard (p.sh. +,-, operatori pointer i referimit - > ) kur i aplikohet tipeve te reja Template classes ndihmojne ne ndertimin e nje sistemi te tipit “tip-sigurte” duke suportuar koleksionet dhe tipet e perhershme Sigurimi i perhershmerise pa zgjeruar gjuhen C++ eshte: Relativisht i lehte per t’u implementuar Por shume me i veshtire per t’u perdorur
26
Gjuha e percaktimit objekt ODMG C++
Grupi i manaxhimit te database-it objekt eshte nje konsorciumi industri me qellim standardizimin e database-ve O-O Ne menyre te vecante gjuhet e perhershme te programimit Perfshin standardet per C++, Smalltalk dhe Java ODMG-93 ODMG-2.0 dhe 3.0 (qe eshte 2.0 plus extensions ne Java) Pershkrimi i bazuar ne ODMG-2.0 Standardi ODMG C++ shmang ndryshimet ne gjuhen C++ Siguron funksionalitet nepermjet klasave template dhe librarive te klasave
27
Tipet ODMG Template class d_Ref<class> perdoret per te specifikuar referencat (pointer-at e perhershem) Template class d_Set<class> perdoret per te percaktuar bashkesine e objekteve Metodat perfshijne insert_element(e) dhe delete_element(e) Disa klasa te tjera si d_Bag (bashkesi ku lejohen duplikimet), d_List dhe d_Varray (variable length array) gjithashtu sigurohen d_ versioni i disa tipeve standarde te siguruar, p.sh. d_Long dhe d_string Interpretimi i ketyre tipeve eshte platforme e pavarur Ne menyre dinamike alokohen te dhenat ne db dhe jo ne memorien kryesore
28
Shembull: ODMG C++ ODL class Branch : public d_Object { …. }
class Person : public d_Object { public: d_String name; // should not use String! d_String address; }; class Account : public d_Object { private: d_Long balance; public: d_Long number; d_Set <d_Ref<Customer>> owners; int find_balance(); int update_balance(int delta); };
29
Shembull: ODMG C++ ODL class Customer : public Person { public: d_Date member_from; d_Long customer_id; d_Ref<Branch> home_branch; d_Set <d_Ref<Account>> accounts; };
30
Implementimi i relacioneve
Relacionet ndermjet klasave te implementuara nepermjet referencave Tipe te vecanta reference forcojne integritetin duke shtuar/hequr linqet e anasjella Tipi d_Rel_Ref<Class, InvRef> eshte nje reference e Class, ku atributi InvRef i Class eshte referenca e anasjelle Ne menyre te ngjashme, d_Rel_Set<Class, InvRef> perdoret per nje bashkesi referencash Metodat e vleredhenies (=) te klases d_Rel_Ref eshte overloaded Perdor percaktimin e tipit per te gjetur dhe update-ar ne menyre automatike linkun e anasjelle I liron programuesit nga detyra e update-it te linqeve te anasjella Eliminon mundesine e linqeve te paqendrueshme Ne menyre te ngjashme, metodat insert_element() dhe delete_element() te d_Rel_Set perdorin percaktimin e tipit per te gjetur dhe update-ar ne menyre automatike linkun e anasjelle
31
Gjuha e perpunimit te objektit ne ODMG C++
Perdorimi i versioneve te perhershme te operatoreve te C++ si new(db) d_Ref<Account> account = new(bank_db, “Account”) Account; new alokon objektin ne database-in e specifikuar, ne vend te memories Argumenti i dyte (“Account”) tregon emrin e tipit te perdorur ne database Operatori i de-referimit (mosadresimit) -> kur aplikohet ne nje reference d_Ref<Account> ngarkon objektin e referuar ne memorie (nese nuk eshte akoma prezent) perpara se te vazhdoje me dereferimin e zakonshem ne C++ Constructor per nje klase – nje metode e vecante per te inicializuar objektet kur ato krijohen; te thirrura automatikisht ne thirrje new Shtrirjet e klasave mirembajne automatikisht nje krijim te nje objekti dhe nje fshirje Vetem per klasat per te cilat kjo cilesi eshte e specifikuar Specifikimi i bere nepermjet nderfaqes, jo C++ Mirembajtja automatike e shtrirjes se klasave nuk suportohet ne versionet e meperparshme te ODMG
32
ODMG C++OML: Database dhe funksionet objekt
Klasa d_Database siguron metodat per: Hapjen (lidhjen) nje database: open(databasename) Emerimin e objekteve: set_object_name(object, name) Kerkimin e objekteve nga emri: lookup_object(name) Riemerimin e objekteve: rename_object(oldname, newname) Mbylljen e nje database-i: close() Klasa d_Object trashegohet nga te gjithe klasat e perhershme Siguron metodat per alokimin dhe fshirjen e objekteve Metoda mark_modified() duhet te thirret perpara se nje objekt update-et Thirret automatikisht kur krijohet objekti
33
Shembull OML ODMG C++ int create_account_owner(String name, String Address){ Database bank_db.obj; Database * bank_db= & bank_db.obj; bank_db =>open(“Bank-DB”); d.Transaction Trans; Trans.begin(); d_Ref<Account> account = new(bank_db) Account; d_Ref<Customer> cust = new(bank_db) Customer; cust->name - name; cust->address = address; cust->accounts.insert_element(account); ... Code to initialize other fields Trans.commit(); }
34
Shembull OML ODMG C++ Per te aksesuar nje class extent: d_Extent<Customer> customerExtent(bank_db); Klasa d_Extent siguron metoden d_Iterator<T> create_iterator() per te krijuar nje perseritje ne class extent Gjithashtu siguron metoden select(pred) per te kthyer perseritjen e objekteve qe plotesojne kushtin Perseritesit ndihmojne ne kalimin hap pas hapi te objekteve ne nje koleksion ose class extent. Koleksionet (bashkesite, listat etj.) gjithashtu sigurojne metoden create_iterator()
35
Tipare te tjera te ODMG C++
Gjuha e deklarimit te query-ve OQL, ngjason me SQL-ne Formon query-n si string, dhe e ekzekuton ate per te marre nje bashkesi rezultatesh d_Set<d_Ref<Account>> result; d_OQL_Query q1("select a from Customer c, c.accounts a where c.name=‘Jones’ and a.find_balance() > 100"); d_oql_execute(q1, result); Siguron mekanizmin e trajtimit te gabimeve te bazuar ne perjashtimet ne C++, nepermjet klases d_Error Siguron API per aksesimin e skemes se nje db
36
Transparenca e perhershmerise se nje pointer-i
Dizavantazhet e metodes ODMG C++ : Dy tipe pointer-sh Programuesi duhet te sigurohet qe thirret mark_modified(), perndryshe database-i mund te korruptohet Metoda ObjectStore Perdor ekzaktesisht te njejtin tip pointer-i per ne memorie dhe objektet e db Perhershmeria eshte transparente ne aplikacione Pervec se ne krijimin e objekteve Te njejtat funksione mund te perdoren ne-memorie dhe objektet e perhershme meqe tipet e pointer-ve jane te njejte Nuk eshte e nevojshme te thirret mark_modified(), modifikimi detektohet automatikisht
37
Sistemet e perhershme JAVA
ODMG-3.0 percakton prapashtesat ne Java per perhershmerine Java nuk suporton template-t, keshtu qe kerkohen zgjerime te gjuhes Modeli per perhershmerine: perhershmeri me ane te zgjatimit Pershtatet me modelin Java’s garbage collection Garbage collection nevojitet ne database gjithashtu Vetem nje tip pointeri per pointer-at e perkohshem dhe te perhershem Klasa behet me aftesi te perhershme duke ekzekutuar nje post- procesor, nje kod objekt i gjeneruar nga kompiluesi i Java-s Te kundert me pre-procesorin e perdorur ne C++ Post-procesori shton automatikisht mark_modified() Percakton tipet e koleksioneve DSet, DBag, DList, etj. Perdor perseritesit e Java, nuk ka nevoje per klasa te reja perseritese
38
Java ODMG Transaksioni duhet te startoje aksesimin e db nga njeri objekt root Gjen objektet e tjera duke ndjekur pointer-at nga objektet root Objektet e referuara nga nje objekt i marre alokojne hapesire ne memorie, por nuk merren patjeter Marrja mund te behet duke u “zvarritur” Nje objekt me hapesire te zene por akoma nuk eshte marre quhet nje objekt bosh Kur nje objekt bosh aksesohet, te dhenat e tij merren nga disku
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.