面向对象数据库精选文档.ppt
面向面向对对象数据象数据库库本讲稿第一页,共一百页第第13章章面向对象数据库面向对象数据库n对复杂数据类型的需求对复杂数据类型的需求n面向对象数据模型面向对象数据模型n面向对象语言面向对象语言n持久性程序设计语言持久性程序设计语言n持久性持久性C+系统系统n持久性持久性JAVA系统系统本讲稿第二页,共一百页对复杂数据类型的需求对复杂数据类型的需求n数据处理中的传统数据库应用具有简单数据类型数据处理中的传统数据库应用具有简单数据类型相对较少的数据类型相对较少的数据类型,第一范式成立第一范式成立n近年来复杂数据类型越来越重要近年来复杂数据类型越来越重要例如例如:地址可处理为地址可处理为单个字符串单个字符串,或者或者为每个子部分用一单独的属性为每个子部分用一单独的属性,或者或者复合属性复合属性(不属于第一范式不属于第一范式)例如例如:允许直接存储多值属性而不是创建单独的第一范式关系存储通允许直接存储多值属性而不是创建单独的第一范式关系存储通常更方便常更方便n应用应用CAD,CASE多媒体与图像数据库多媒体与图像数据库,文档文档/超文本数据库超文本数据库本讲稿第三页,共一百页面向对象数据模型面向对象数据模型(略讲略讲)n对象对象大体上对应于大体上对应于E-R模型中的实体模型中的实体n面向对象是基于将与一对象有关的代码与数据面向对象是基于将与一对象有关的代码与数据封装封装成一成一个单位的思想个单位的思想.n面向对象数据模型是一个逻辑数据模型面向对象数据模型是一个逻辑数据模型(类似类似E-R模型模型).n使面向对象程序设计风格使面向对象程序设计风格(e.g.,Smalltalk,C+)适应适应数据库系统数据库系统本讲稿第四页,共一百页对象结构对象结构n对象具有对象具有:变量变量集合集合:包含对象的数据包含对象的数据.变量值本身也是对象变量值本身也是对象.消息消息集合集合:对象对消息进行反应对象对消息进行反应;消息可具有零消息可具有零,一个或一个或多个多个参数参数.方法方法集合集合:实现消息的代码体实现消息的代码体;方法返回一个值作为对消息的方法返回一个值作为对消息的反应反应n数据的物理表示仅对对象的实现者可见数据的物理表示仅对对象的实现者可见n消息与反应提供了对象的唯一的外部界面消息与反应提供了对象的唯一的外部界面n消息这个词不必意味着物理上的消息传递消息这个词不必意味着物理上的消息传递.消息可消息可以实现为过程以实现为过程调用调用本讲稿第五页,共一百页消息与方法消息与方法n方法是用通用语言写的程序方法是用通用语言写的程序,具有下列特性具有下列特性变量仅在对象本身内部可以直接引用变量仅在对象本身内部可以直接引用其他对象的数据只能通过发送消息引用其他对象的数据只能通过发送消息引用.n方法分为方法分为read-only和和update方法方法只读方法不改变对象的值只读方法不改变对象的值n严格地说严格地说,实体的每个属性都必须表示为一个变量和两个方法实体的每个属性都必须表示为一个变量和两个方法,一个用于读属性一个用于读属性,另一个用于更新另一个用于更新例如例如,属性属性address可用变量可用变量address与两条消息与两条消息get-address和和set-address表示表示为方便起见为方便起见,许多面向对象数据模型都允许直接存取其他对象的变量许多面向对象数据模型都允许直接存取其他对象的变量.本讲稿第六页,共一百页对象类对象类n相似对象组成相似对象组成类类;每个对象称为它的类的每个对象称为它的类的实例实例n一个类中所有对象具有相同的一个类中所有对象具有相同的具有相同类型的变量具有相同类型的变量,消息接口消息接口方法方法赋给变量的值可能不同赋给变量的值可能不同n例如例如:所有人对象组成所有人对象组成person类类n类与类与E-R模型中的实体集相似模型中的实体集相似本讲稿第七页,共一百页类定义例类定义例class employee/*Variables*/stringname;stringaddress;datestart-date;int salary;/*Messages*/int annual-salary();stringget-name();stringget-address();intset-address(stringnew-address);intemployment-length();n在严格的封装中还需要用来读与设置其他变量的值的方法n方法单独定义如:int employment-length()return today()start-date;int set-address(string new-address)address=new-address;本讲稿第八页,共一百页继承继承n例如例如,银行客户类与银行雇员类相似银行客户类与银行雇员类相似,尽管有不同之处尽管有不同之处两者可以共享某些变量和消息两者可以共享某些变量和消息,如如name与与address.两者也各有特殊变量和消息两者也各有特殊变量和消息,如雇员的如雇员的salary 和客户的和客户的credit-rating.n每个雇员是人每个雇员是人;所以所以employee是是person 的特例的特例n同样同样,customer 也是也是person 的特例的特例.n创建类创建类person,employee andcustomer对所有人都适用的变量对所有人都适用的变量/消息与类消息与类person关联关联.雇员所特有的变量雇员所特有的变量/消息与类消息与类employee关联关联客户所特有的变量客户所特有的变量/消息与类消息与类customer 关联关联本讲稿第九页,共一百页继承继承n类组织成一个特化类组织成一个特化/IS-A层次层次属于类属于类person的变量的变量/消息被类消息被类employee 和和customer继承继承结果构成一个结果构成一个类层次类层次注意与E-R模型中的ISA层次的相似性本讲稿第十页,共一百页类层次定义类层次定义class personstringname;stringaddress:;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,;.本讲稿第十一页,共一百页类层次例类层次例n类类officer 的对象的完整变量列表的对象的完整变量列表:office-number,expense-account-number:局部定义局部定义start-date,salary:从从employee 继承继承name,address:从从person 继承继承n同变量一样还继承方法同变量一样还继承方法.n可替换性可替换性 类的任何方法可以被属于其子类的任何对象调用类的任何方法可以被属于其子类的任何对象调用.n类外延类外延(extent):类中所有对象的集合类中所有对象的集合.两种选择两种选择:1.类类employee 的外延包含所有的外延包含所有officer,teller 和和secretary 对象对象.2.类类employee 的外延仅包含不属于子类的外延仅包含不属于子类officer,teller 或或secretary的的雇员对象雇员对象H这是这是OO系统通常的做法系统通常的做法H可访问子类的外延求所有子类对象可访问子类的外延求所有子类对象本讲稿第十二页,共一百页多重继承多重继承n多重继承使一个类可有多个超类多重继承使一个类可有多个超类.类类/子类联系可表示为子类联系可表示为有向无圈图有向无圈图(DAG)当对象有多种相互独立的分类方式时尤其有用当对象有多种相互独立的分类方式时尤其有用E.g.临时临时/永久独立于永久独立于Officer/secretary/teller为每一种子类组合创建一个子类为每一种子类组合创建一个子类不必为数据库中不可能出现的子类组合创建子类不必为数据库中不可能出现的子类组合创建子类n类从它的所有超类继承变量和方法类从它的所有超类继承变量和方法n存在歧义的可能存在歧义的可能:当从两个超类当从两个超类A和和B继承同名变量继承同名变量/消息消息N时时若该变量若该变量/消息是在共享的超类中定义的则没有问题消息是在共享的超类中定义的则没有问题否则否则,采用如下方法之一采用如下方法之一标志为出错标志为出错,重命名变量重命名变量(A.N和和B.N)选择其一选择其一.本讲稿第十三页,共一百页多重继承例多重继承例银行例的类DAG本讲稿第十四页,共一百页多重继承例多重继承例n一个对象可以同时属于多个子类一个对象可以同时属于多个子类一个一个person可以具有可以具有student,teacher或或footballPlayer等角色等角色,或者任何组合或者任何组合例如例如,踢足球的学生助教踢足球的学生助教n可用多重继承建模对象的可用多重继承建模对象的“角色角色”即即,允许对象具有多个类型允许对象具有多个类型n但许多系统坚持对象必须具有但许多系统坚持对象必须具有最具体类最具体类即即,若某对象属于多个类若某对象属于多个类,则必须存在这些类的一个共同子类则必须存在这些类的一个共同子类创建子类创建子类student-teacher与与student-teacher-footballPlayer当有许多可能的组合时当有许多可能的组合时,为每种组合创建子类会很麻烦为每种组合创建子类会很麻烦本讲稿第十五页,共一百页对象标识对象标识n即使某些或全部变量的值或方法定义随时间改变即使某些或全部变量的值或方法定义随时间改变,对对象仍保持其身份象仍保持其身份.n对象标识是一个比非面向对象的程序语言或数据模型中对应对象标识是一个比非面向对象的程序语言或数据模型中对应概念更强的标识概念概念更强的标识概念.值值数据值数据值;例如关系系统中所用的主键值例如关系系统中所用的主键值.名名由用户提供由用户提供;用于过程中的变量用于过程中的变量.内建内建数据模型或程序语言内建的标识数据模型或程序语言内建的标识.不需用户提供标识不需用户提供标识.面向对象系统采用的标识形式面向对象系统采用的标识形式本讲稿第十六页,共一百页对象标识对象标识n对象标识对象标识用于唯一标识对象用于唯一标识对象对象标识是对象标识是唯一的唯一的:没有两个对象具有相同的标识没有两个对象具有相同的标识每个对象只有一个标识每个对象只有一个标识例如例如,person对象的对象的spouse字段可以是另一个字段可以是另一个person对象的标识对象的标识.可保存为一对象的字段可保存为一对象的字段,用来引用另一对象用来引用另一对象.可以是可以是系统生成的系统生成的(由数据库创建由数据库创建),或或外部的外部的(如社会安全号如社会安全号)系统生成的标识系统生成的标识:更易用更易用,但不能跨数据库系统使用但不能跨数据库系统使用如果已存在唯一标识则冗余如果已存在唯一标识则冗余本讲稿第十七页,共一百页对象包含对象包含n设计中的每个部件可以包含其他部件设计中的每个部件可以包含其他部件n可建模为对象包含可建模为对象包含.包含其他对象的对象称为包含其他对象的对象称为复合对象复合对象.n多层次的包含形成了多层次的包含形成了包含层次包含层次连线解释为连线解释为is-part-of,而非而非is-a.n允许数据被不同用户在不同粒度上观察允许数据被不同用户在不同粒度上观察本讲稿第十八页,共一百页面向对象语言面向对象语言n面向对象概念在数据库系统中有多种用法面向对象概念在数据库系统中有多种用法面向对象可被用作设计工具面向对象可被用作设计工具类似于用类似于用E-R图建模再转换成关系图建模再转换成关系面向对象概念可与操作数据库的程序设计语言结合面向对象概念可与操作数据库的程序设计语言结合.对象关系系统对象关系系统在关系语言中增加复杂类型和面向对象在关系语言中增加复杂类型和面向对象.持久性程序设计语言持久性程序设计语言通过增加持久性和集合之类的概通过增加持久性和集合之类的概念来扩展面向对象程序设计语言以便处理数据库念来扩展面向对象程序设计语言以便处理数据库.本讲稿第十九页,共一百页持久性程序设计语言持久性程序设计语言n持久性程序设计语言允许创建对象并存储在数据库中持久性程序设计语言允许创建对象并存储在数据库中,并且可在程并且可在程序设计语言中直接使用序设计语言中直接使用允许从程序设计语言直接操作数据允许从程序设计语言直接操作数据不必通过不必通过SQL.不必有显式的格式不必有显式的格式(类型类型)改变改变格式改变由系统透明地完成格式改变由系统透明地完成若没有持久性程序设计语言若没有持久性程序设计语言,格式改变成为程序员的负担格式改变成为程序员的负担要写更多的代码要写更多的代码更多的出错机会更多的出错机会允许对象在内存中处理允许对象在内存中处理不必有显式的从数据库加载或存储到数据库不必有显式的从数据库加载或存储到数据库节省代码节省代码,节省加载节省加载/存储大量数据的开销存储大量数据的开销本讲稿第二十页,共一百页持久性程序设计语言持久性程序设计语言n持久性程序设计语言的缺点持久性程序设计语言的缺点由于多数程序设计语言的表达能力由于多数程序设计语言的表达能力,很容易造成编程很容易造成编程错误而破坏数据库错误而破坏数据库.语言的复杂性使得自动的高级优化更加困难语言的复杂性使得自动的高级优化更加困难.不支持描述性查询和关系数据库不支持描述性查询和关系数据库本讲稿第二十一页,共一百页对象的持久性对象的持久性n使临时对象持久化的途径使临时对象持久化的途径类持久类持久声明某个类的所有对象是持久的声明某个类的所有对象是持久的;简单但不简单但不灵活灵活.创建持久创建持久扩展创建对象的语法以声明对象是持久的扩展创建对象的语法以声明对象是持久的.标记持久标记持久在程序中止之前将对象标记为持久的在程序中止之前将对象标记为持久的.可达性持久可达性持久声明声明(根根)持久对象持久对象;被根对象直接或间接引被根对象直接或间接引用的对象也是持久的用的对象也是持久的.对程序员更容易对程序员更容易,但对数据库系统有更多开销但对数据库系统有更多开销类似类似Java中的垃圾收集中的垃圾收集,要检查可达性要检查可达性本讲稿第二十二页,共一百页对象标识与指针对象标识与指针n持久对象被赋予持久的对象标识持久对象被赋予持久的对象标识.n标识的永久程度标识的永久程度过程内过程内标识仅在单个过程执行期间持续标识仅在单个过程执行期间持续程序内程序内标识仅在单个程序或查询执行期间持续标识仅在单个程序或查询执行期间持续程序间程序间标识在多个程序的执行之间持续标识在多个程序的执行之间持续,但随存储组织改变而改变但随存储组织改变而改变持久的持久的标识在程序执行之间和数据的结构重组之间持久标识在程序执行之间和数据的结构重组之间持久这是面向这是面向对象系统要求的对象系统要求的本讲稿第二十三页,共一百页对象标识与指针对象标识与指针n在在O-O语言语言(如如C+)中中,对象标识实际上是内存指针对象标识实际上是内存指针n持久性指针持久性指针在程序执行之间持久在程序执行之间持久可看作是指向数据库内对象的指针可看作是指向数据库内对象的指针E.g.指明文件标识和文件内偏移指明文件标识和文件内偏移本讲稿第二十四页,共一百页持久对象的存储与存取持久对象的存储与存取n命名对象命名对象(同命名文件一样同命名文件一样)不能用于大量对象不能用于大量对象.通常只对类外延及其他对象集合命名通常只对类外延及其他对象集合命名,而非对象而非对象.n暴露对象标识或指向对象的持久指针暴露对象标识或指向对象的持久指针可在外部保存可在外部保存.所有对象都有对象标识所有对象都有对象标识n存储对象集合存储对象集合,并允许程序在该集合上迭代以找到所需对象并允许程序在该集合上迭代以找到所需对象将对象集合建模为将对象集合建模为汇集类型汇集类型类外延类外延 属于类的所有对象的集合属于类的所有对象的集合;通常为具有持久对象的类维通常为具有持久对象的类维护外延护外延.如何在数据库中找到对象如何在数据库中找到对象:本讲稿第二十五页,共一百页持久性持久性C+系统系统nC+语言允许增加对持久性的支持而不修改语言语言允许增加对持久性的支持而不修改语言声明一个类声明一个类Persistent_Object来支持持久性来支持持久性重载重载在新类型中重定义标准函数名及运算符在新类型中重定义标准函数名及运算符(如如+,指针去引用运算指针去引用运算)的能力的能力模板类模板类有助于构建一个类型安全的支持汇集和持久类型的类型系统有助于构建一个类型安全的支持汇集和持久类型的类型系统.n不必扩展不必扩展C+语言而提供对持久性的支持语言而提供对持久性的支持相对容易实现相对容易实现但难以使用但难以使用n与避免改变语言的系统一样与避免改变语言的系统一样,向向C+语言增加新特性的持语言增加新特性的持久性久性C+系统已被构建系统已被构建本讲稿第二十六页,共一百页ODMGC+对象定义语言对象定义语言nObjectDatabaseManagementGroup是一致力于标准化面向是一致力于标准化面向对象数据库的工业协会对象数据库的工业协会尤其是持久性程序设计语言尤其是持久性程序设计语言包括包括C+,Smalltalk和和Java标准标准ODMG-93ODMG-2.0and3.0(whichis2.0plusextensionstoJava)我们的描述基于我们的描述基于ODMG-2.0nODMGC+标准避免改动标准避免改动C+语言语言通过模板类和类库提供功能通过模板类和类库提供功能本讲稿第二十七页,共一百页ODMG类型类型n模板类模板类d_Ref用于声明引用用于声明引用(持久性指针持久性指针)n模板类模板类d_Set用于定义对象集合用于定义对象集合.方法包括方法包括insert_element(e)和和delete_element(e)n还提供其他汇集类如还提供其他汇集类如d_Bag(允许重复的集合允许重复的集合),d_List和和d_Varray(变长数组变长数组).n还提供许多标准类型的还提供许多标准类型的 d_ 版本版本,如如d_Long和和d_string对这些类型的解释是依赖于平台的对这些类型的解释是依赖于平台的动态分配的数据在数据库中分配动态分配的数据在数据库中分配,而非在内存而非在内存本讲稿第二十八页,共一百页ODMGC+1.0ODL:例例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 owners;int find_balance();int update_balance(int delta);本讲稿第二十九页,共一百页ODMGC+1.0ODL:例例class Customer :public Person public:d_Date member_from;d_Long customer_id;d_Ref home_branch;d_Set d_Ref accounts;本讲稿第三十页,共一百页C+ODL 2.0 Exampleclass Person(extent people)private:Attribute String name;Attribute Ref spouse;Attribute Set children;Attribute List parents;public:Person(char*name);void birth(Person child);void marriage(Person spouse);String get_name()return name;List get_children()return children;本讲稿第三十一页,共一百页实现联系实现联系n类之间的联系用引用实现类之间的联系用引用实现n特定的引用类型通过增加特定的引用类型通过增加/删除逆链接来实施完整性删除逆链接来实施完整性.类型类型d_Rel_Ref是对是对Class的引用的引用,其中其中Class的属的属性性InvRef是逆引用是逆引用.类似地类似地,d_Rel_Set用于引用的集合用于引用的集合n类类d_Rel_Ref的赋值方法的赋值方法(=)是重载的是重载的用类型定义来自动查找及更新逆链接用类型定义来自动查找及更新逆链接使程序员免除更新逆链接的任务使程序员免除更新逆链接的任务消除不一致链的可能性消除不一致链的可能性n类似地类似地,d_Rel_Set的的insert_element()和和delete_element()方法方法利用类型定义自动查找及更新逆链利用类型定义自动查找及更新逆链接接本讲稿第三十二页,共一百页实现联系实现联系nE.g.extern const char _owners,_accounts;class Account:public d.Object .d_Rel_Set owners;/.Since strings cant be used in templates const char _owners=“owners”;const char _accounts=“accounts”;本讲稿第三十三页,共一百页ODMGC+对象操纵语言对象操纵语言n使用C+运算符的持久性版本,如 new(db)d_Ref account=new(bank_db,“Account”)Account;new 在指定数据库中分配对象,而不是在内存中.第二个参数(“Account”)给出数据库中用的类型名.n当去除引用运算符-作用于d_Ref引用时,在继续通常的C+去除引用之前先加载被引用对象到内存(如果不在内存的话)n类的构造子 创建对象时用于初始化对象的特殊方法;对new自动调用.n在创建与删除对象时类外延自动被维护仅针对说明了此特性的类通过用户接口说明,而非C+早期版本的ODMG不支持自动维护类外延本讲稿第三十四页,共一百页ODMGC+OML:数据库与对象函数数据库与对象函数n类类d_Database提供方法提供方法打开数据库打开数据库:open(databasename)命名对象命名对象:set_object_name(object,name)用名查找对象用名查找对象:lookup_object(name)重命名对象重命名对象:rename_object(oldname,newname)关闭数据库关闭数据库:close()n类类d_Object被所有持久性类继承被所有持久性类继承.提供方法分配及删除对象提供方法分配及删除对象更新对象之前必须调用方法更新对象之前必须调用方法mark_modified().创建对象时自动调用创建对象时自动调用本讲稿第三十五页,共一百页ODMGC+OML:例例int create_account_owner(String name,String Address)d_Database bank_db.obj;d_Database*bank_db=&bank_db.obj;bank_db-open(“Bank-DB”);d_Transaction Trans;Trans.begin();d_Ref account=new(bank_db)Account;d_Ref cust=new(bank_db)Customer;cust-name=name;cust-address=address;cust-accounts.insert_element(account);.Code to initialize other fieldsTmit();本讲稿第三十六页,共一百页ODMGC+OML:例例n数据库中类外延自动维护数据库中类外延自动维护.n为存取类外延为存取类外延:d_Extent customerExtent(bank_db);n类类d_Extent 提供方法提供方法 d_Iterator create_iterator()来创建一个类外延上的迭代子来创建一个类外延上的迭代子n提供提供select(pred)方法以返回满足选择谓词方法以返回满足选择谓词pred的对象上的的对象上的迭代子迭代子.n迭代子用于遍历集合或类外延中的对象迭代子用于遍历集合或类外延中的对象.n汇集汇集(sets,lists等等)也提供方法也提供方法create_iterator().本讲稿第三十七页,共一百页ODMGC+OML:迭代子例迭代子例int print_customers()Database bank_db_obj;Database*bank_db=&bank_db_obj;bank_db-open(“Bank-DB”);d_Transaction Trans;Trans.begin();d_Extent all_customers(bank_db);d_Iteratord_Ref iter;iter=all_customerscreate_iterator();d_Ref p;whileiter.next(p)p-print_cust();/Function assumed to be defined elsewhereTmit();本讲稿第三十八页,共一百页ODMGC+Binding:其他特性其他特性n说明性查询语言说明性查询语言OQL,看上去像看上去像SQL形成查询字符串形成查询字符串,执行之得到返回结果集合执行之得到返回结果集合(实际上是实际上是bag,因为可能有重复因为可能有重复)d_Setd_Ref result;d_OQL_Query q1(select a from Customer c,c.accounts a where c.name=Jones and a.find_balance()100);result=q1.d_oql_execute();n提供基于提供基于C+例外的出错处理机制例外的出错处理机制,通过类通过类d_Errorn提供提供API用来存取数据库模式用来存取数据库模式.本讲稿第三十九页,共一百页使指针持久性透明使指针持久性透明nODMG1.0C+方法的缺点方法的缺点:两种指针两种指针程序员必须确保调用程序员必须确保调用mark_modified(),否则数据库可能被破坏否则数据库可能被破坏nObjectStore方法方法内存中与数据库中的对象使用完全相同的指针类型内存中与数据库中的对象使用完全相同的指针类型持久性对应用是透明的持久性对应用是透明的创建对象时例外创建对象时例外由于指针类型相同由于指针类型相同,同样的函数可以用在内存中对象和持久对象上同样的函数可以用在内存中对象和持久对象上实现时采用一种称为指针实现时采用一种称为指针swizzling的技术的技术,第第11章有具体描述章有具体描述.不需要调用不需要调用mark_modified(),因为可以自动监测到更新因为可以自动监测到更新.本讲稿第四十页,共一百页ODMG 2.0 Object Query LanguagenObjectQueryLanguage,PrinciplesDeclarativequerylanguage(SQL-like)CanbeoptimizedSyntaxbasedonSQLQueriescanreturn:oAcollectionofobjectsoAnobjectoAcollectionofliteralsoAliteral本讲稿第四十一页,共一百页ODMG Language Bindings,Why?nExtendprogramminglanguagewithpersistentcapabilityMigrateprogrammingapplicationsinmemorytoDBManipulateobjectdatabaseswithstandardprogramminglanguagenProvidetoprogramminglanguagedatabasefunctionality:Querying,Transactions,Indexing,本讲稿第四十二页,共一百页ODMG Language BindingsnBindingsforODL,OMLandOQLnSingle,unifiedtypesystempersistentortransientinstancesnLanguage-specificbindingsrespectthesyntaxandsemanticsofthebaselanguagenSmallsetofextensionsnCanmixexpressionsofOML,OQLandbaselanguage本讲稿第四十三页,共一百页C+Binding:Design PrinciplesnProvideaC+librarywherethereisaunifiedtypesystemacrosstheprogramminglanguageandthedatabasenTheC+bindingmapstheODMGObjectModelintoC+throughasetofpersistence-capableclassesUsesC+templateclassesforimplementationBasedonthesmartpointer(ref-based)approachnMainFeaturesMappingbetweenODMGtypesandC+typesC+/OQLCouplingnTheOML/C+isC+compliant(i.e.standardC+compilers)CompatiblewithStandardTemplateLibrary(STL)+persistence本讲稿第四十四页,共一百页Persistence-capable Classes nForeachpersistence-capableclassT,atwinclassd_RefisdefinedInstancesofapersistence-capableclassbehavelikeC+pointers(butOIDs C+pointer)nTheC+bindingdefinestheclassd_Objectasthesuperclassofallpersistence-capableclassesPersistencepropagationbyinheritancenThenotionofinterfaceisimplicitinODMGC+bindinginterface:publicpartofC+classdefinitionsimplementation:privatepartsofC+classdefinitions本讲稿第四十五页,共一百页C+BindingvC+ODLMaybegenerated(fromODMGODL)orprogrammer-writtenvC+OMLvC+OQL本讲稿第四十六页,共一百页C+ODL Basic TypesBasicTypeRangeDescriptiond_Short16bitssignedintegerd_Long32bitssignedintegerd_UShort16bitsunsignedd_ULong16bitsunsignedd_Float32bitsSingleprecisiond_Double64bitsdoubleprecisiond_Char8bitsASCII本讲稿第四十七页,共一百页C+ODL d_Ref qAd_Refisparameterizedbythetypeofthereferencedobjectd_RefEmployee;d_RefDept;Dept=Employee-Departmentqd_Refisdefinedasaclasstemplate:Templateclassd_Ref.qThedereferencingoperator(-)isusedtoaccessmembersofthepersistentobject“addressed”bythespecificreference本讲稿第四十八页,共一百页C+ODL Collection qd_Set,d_Bag,d_list,d_Array,d_Dictionaryaresubclassofd_CollectionqThecollectionsclassesaredefinedasclasstemplates:Templateclassd_Collection.Templateclassd_Set:publicd_Collection.qElementsthereinareaccessedthroughiterators本讲稿第四十九页,共一百页Mapping the ODMG ODL into C+ODLnClass CnSet BagnList ArraynRelationship TnExtent of class TnOperationnCreate DeletenBasic types Tnd_Refnd_Set d_Bag nd_List d_Array nd_Rel_Ref nD_Extent nC+functionsnConstructor,Destructornd_T:d_String,d_Time,d_Date,d_Boolean本讲稿第五十页,共一百页C+ODL Exampleclass Person(extent people)private:Attribute String name;Attribute Set spouse;Attribute Set children;Attribute List parents;public:Person(char*name);void birth(Person child);void marriage(Person spouse);String get_name()return name;List get_children()return children;class Person private:d_String name;d_Ref spouse;d_Listd_Ref children;d_Listd_Ref parents;public:Person(char*name);void birth(d_Ref child);void marriage(d_Ref spouse);d_String get_name()return name;d_Listd_Ref get_children()return children;d_Setd_Ref *people;本讲稿第五十一页,共一百页C+OMLnStandardC+syntaxusednObjectcreation/modification/deletionnManipulationcollectionsnOQLembeddedinC+nDatabasesandtransactionssupportedthroughclasslibraries本讲稿第五十二页,共一百页Object Creation/DeletionPerson:Person(char*pname)this-name=pname;people-insert_element(this);d_Ref toto;toto=new Person(“Toto”);本讲稿第五十三页,共一百页Using“This”notati