第十一章 面向对象数据库.ppt
《第十一章 面向对象数据库.ppt》由会员分享,可在线阅读,更多相关《第十一章 面向对象数据库.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库实用教程(第三版)数据库实用教程(第三版)第十一章第十一章 面向对象数据库面向对象数据库清华大学出版社清华大学出版社董健全董健全Friday,December 30,2022Friday,December 30,2022 本章概念:本章概念:ODMGODMG标准的核心概念标准的核心概念 面向对象数据模型的基本概念面向对象数据模型的基本概念 持久化程序设计语言的基本概念持久化程序设计语言的基本概念 基于基于C+C+的面向对象数据库的对象定义语言和对象操纵语言的面向对象数据库的对象定义语言和对象操纵语言 OODBOODB与与ORDBORDB的比较的比较 使用使用UMLUML类图来概念对象建模
2、类图来概念对象建模 第十一章第十一章 面向对象数据库面向对象数据库1.ODMG1.ODMG组织和标准组织和标准ODMGODMG(Object Data Management GroupObject Data Management Group)ODMG93ODMG93是用于面向对象数据管理产品接口的一个定义。是用于面向对象数据管理产品接口的一个定义。ODMG93ODMG93标准有五个核心概念:标准有五个核心概念:1 1 面向对象数据库系统概述面向对象数据库系统概述 ODMG93标准有五个核心概念:标准有五个核心概念:(1 1)对象是基本的数据结构、是存储和操作的基本单位。)对象是基本的数据结构、
3、是存储和操作的基本单位。(2 2)每个对象有一个永久的标识符。这个标识符在该对象的整)每个对象有一个永久的标识符。这个标识符在该对象的整 个生命期中都有效,即不论该对象是存储在外存中还是内个生命期中都有效,即不论该对象是存储在外存中还是内 存中,该标识符都必须是有效的。存中,该标识符都必须是有效的。(3 3)对象可以被指定类型和子类型。对象被创建为一个给定的)对象可以被指定类型和子类型。对象被创建为一个给定的 类型。对象还可以定义为其他对象的子类型。此时,它们类型。对象还可以定义为其他对象的子类型。此时,它们 继承父类型的所有数据特性和行为。继承父类型的所有数据特性和行为。(4 4)对象状态由
4、数据值与联系定义。)对象状态由数据值与联系定义。(5 5)对象行为由对象操作定义。)对象行为由对象操作定义。2.OODBS2.OODBS的概念的概念 一个面向对象数据库系统(一个面向对象数据库系统(OODBSOODBS)应该满足两个标准:)应该满足两个标准:首先它是一个数据库系统(首先它是一个数据库系统(DBSDBS),具备),具备DBSDBS的基本功能,的基本功能,譬如查询语言、散列或成组存取方法、事务管理、一致性控制及譬如查询语言、散列或成组存取方法、事务管理、一致性控制及恢复;恢复;其次是一个面向对象系统,其次是一个面向对象系统,是针对面向对象程序设计语言的持是针对面向对象程序设计语言的
5、持久性对象存储管理而设计的,充分支持完整的面向对象概念和机久性对象存储管理而设计的,充分支持完整的面向对象概念和机制,譬如用户自定义数据类型、自定义函数、对象封装等必不可制,譬如用户自定义数据类型、自定义函数、对象封装等必不可少的特点。少的特点。OODBSOODBS表达为:表达为:“面向对象系统面向对象系统 +数据库能力数据库能力”1.1.对象(对象(objectobject)对象由三个部分组成:对象由三个部分组成:(1 1)一组变量。一组变量。它们包含对象的数据,它们包含对象的数据,变量相当于变量相当于ERER模型中的属性。模型中的属性。(2 2)一组消息。一组消息。这是一个对象所能响应的消
6、息集合,每个消息可这是一个对象所能响应的消息集合,每个消息可 有若干参数。对象接受消息后应作出相应的响应。有若干参数。对象接受消息后应作出相应的响应。(3 3)一组方法(一组方法(MethodMethod)。)。每个方法是实现一个消息的代码段,每个方法是实现一个消息的代码段,一个方法返回一个值作为对消息的响应。一个方法返回一个值作为对消息的响应。对象的方法可以分为只读型和更新型两种。对象的方法可以分为只读型和更新型两种。2 2 面向对象数据模型的基本概念面向对象数据模型的基本概念 2.2.类(类(classclass)在数据库中通常有很多相似的对象。在数据库中通常有很多相似的对象。“相似相似”
7、是指它们响应是指它们响应相同的消息使用相同的方法、并且有相同名称和类型的变量。相同的消息使用相同的方法、并且有相同名称和类型的变量。将相似的对象分组形成了一个将相似的对象分组形成了一个“类类”(Class)(Class)。类是相似对象的集合。类中每个对象也称为类的实例(类是相似对象的集合。类中每个对象也称为类的实例(InstanceInstance)。一个类中的所有对象共享一个公共的定义,尽管它们对变量一个类中的所有对象共享一个公共的定义,尽管它们对变量所赋予的值不同。所赋予的值不同。面向对象数据模型中类的概念相当于面向对象数据模型中类的概念相当于ERER模型中实体集的概念。模型中实体集的概念
8、。例例:用伪码写一个(用伪码写一个(“职员职员”)类的定义。定义中给出了类似的变)类的定义。定义中给出了类似的变 量和类的对象所响应的消息量和类的对象所响应的消息,处理这些消息的方法在这里未给出。处理这些消息的方法在这里未给出。class employeeclass employee /*/*变量变量*/string name string name;string addressstring address;data data start_datestart_date;intint salary salary;/*/*消息消息*/intint annual_salaryannual_salar
9、y()();string string get_nameget_name()();string string get_addressget_address(););intint set_addressset_address(string string new_addressnew_address););intint employment_lengthemployment_length()();一个类对象包括两部分内容:一个类对象包括两部分内容:(1)一个集合变量,)一个集合变量,它的值是该类的所有实它的值是该类的所有实例对象所组成的集合;例对象所组成的集合;(2)对消息对消息new实施一个方法
10、,实施一个方法,用以创建类用以创建类的一个新实例。的一个新实例。3.继承性继承性 继承性允许不同类的对象共享它们公共部分的结构和特性。继承性允许不同类的对象共享它们公共部分的结构和特性。继承性可以用超类和子类的层次联系实现。继承性可以用超类和子类的层次联系实现。单继承性单继承性:一个子类可以继承某一个超类的结构和特性;一个子类可以继承某一个超类的结构和特性;多重继承性多重继承性:一个子类也可以继承多个超类的结构和特性。一个子类也可以继承多个超类的结构和特性。继承性是数据间的泛化细化联系,是一种继承性是数据间的泛化细化联系,是一种“is ais a”联系,联系,表示了类之间的相似性。表示了类之间
11、的相似性。图中:图中:每个职员(每个职员(employee)是一个人()是一个人(person),),人是职员的泛化、抽象化,人是职员的泛化、抽象化,职员是人的细化、具体化。职员是人的细化、具体化。person是超类,是超类,employee是子类;等等。是子类;等等。personpersoncustomercustomeremployeeemployeeofficerofficertellertellersecretarysecretary例:银行日常工作中涉及到各类人员的细化层次的类继承层次图:例:银行日常工作中涉及到各类人员的细化层次的类继承层次图:伪代码定义如下:伪代码定义如下:cla
12、ss 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
13、;/*经费账号经费账号*/;class teller isa employee /*职员职员*/int hours_per_week;/*每周工作量每周工作量*/int station_number;/*柜号柜号*/;class secretary isa employee /*秘书秘书*/int hours_per_week;/*每周工作量每周工作量*/string manager;/*经理姓名经理姓名*/;例:下图是人的又一个细化图:例:下图是人的又一个细化图:facultyfaculty和和studentstudent是是personperson的细化子类。的细化子类。有的人既是教师又是
14、学生,有的人既是教师又是学生,faculty_studentfaculty_student应是应是facultyfaculty和和studentstudent这两个类的子类这两个类的子类。即:多重继承性。即:多重继承性。personpersonfacultyfacultyfaculty_studentfaculty_studentstudentstudent 4.对象标识(对象标识(Object Identifier,简记为,简记为OID)面向对象系统提供面向对象系统提供“对象标识符对象标识符”的概念来标识对象。的概念来标识对象。OID与对象的物理存储位置无关,也与数据的描述方式和值无关。与对
15、象的物理存储位置无关,也与数据的描述方式和值无关。OID是惟一的,也就是说,每个对象具有单一的标识符,在对象创是惟一的,也就是说,每个对象具有单一的标识符,在对象创建的瞬间,由系统赋给对象一个建的瞬间,由系统赋给对象一个OID值,它在系统内是惟一的,在值,它在系统内是惟一的,在对象生存期间,标识是不能改变的。对象生存期间,标识是不能改变的。对象标识是指针一级的概念,是一个强有力的数据操纵原语,对象标识是指针一级的概念,是一个强有力的数据操纵原语,也是对集合、元组和递归等复合对象操纵的基础也是对集合、元组和递归等复合对象操纵的基础 自行车自行车车闸车闸车轮车轮钢圈钢圈辐条辐条轮胎轮胎车架车架齿轮
16、齿轮闸线闸线杠杆杠杆衬垫衬垫5.5.对象包含对象包含不同类的对象之间可能存在着包含关系(即组合关系)。不同类的对象之间可能存在着包含关系(即组合关系)。下图:自行车结构的数据库的类包含层次图下图:自行车结构的数据库的类包含层次图自行车自行车车闸车闸车轮车轮钢圈钢圈辐条辐条轮胎轮胎车架车架齿轮齿轮闸线闸线杠杆杠杆衬垫衬垫图中:图中:自行车自行车是是车轮、车闸、齿轮、车架的组合车轮、车闸、齿轮、车架的组合。车轮又包括车轮又包括钢圈、辐条和轮胎。结构的每一个构件都描述为一钢圈、辐条和轮胎。结构的每一个构件都描述为一个对象,同时构件间的包含也可以用对象间的包含来描述。个对象,同时构件间的包含也可以用对
17、象间的包含来描述。自行车自行车车闸车闸车轮车轮钢圈钢圈辐条辐条轮胎轮胎车架车架齿轮齿轮闸线闸线杠杆杠杆衬垫衬垫 包含其他对象的对象称为复合对象。包含其他对象的对象称为复合对象。包含关系可以有多层,形成包含关系可以有多层,形成类包含层次图。类包含层次图。包含是一种包含是一种“是一部分是一部分”(is part ofis part of)联系。)联系。如:如:车轮车轮是是自行车的一部分自行车的一部分,而不能说,而不能说“车轮是一辆自行车车轮是一辆自行车”。因此,包含与继承是两种不同的数据联系。因此,包含与继承是两种不同的数据联系。一、持久化程序设计语言一、持久化程序设计语言1.持久化语言与嵌入式语
18、言的区别持久化语言与嵌入式语言的区别(1)在嵌入式语言中,宿主语言的类型系统与)在嵌入式语言中,宿主语言的类型系统与SQL的类型系统不同,程序员要的类型系统不同,程序员要负责宿主语言与负责宿主语言与DML之间的类型转换。之间的类型转换。持久化程序设计语言的查询语言与宿主语言完全集成在一块,持久化程序设计语言的查询语言与宿主语言完全集成在一块,具有相同的具有相同的类型系统。创建对象并将之存储在数据库中,不需要任何显式的类型或格类型系统。创建对象并将之存储在数据库中,不需要任何显式的类型或格式改变。任何格式转换对程序员都是透明的。式改变。任何格式转换对程序员都是透明的。(2)2)使用嵌入式查询语言
19、的程序员要负责编写程序把数据从数据库中取出放到使用嵌入式查询语言的程序员要负责编写程序把数据从数据库中取出放到内存中。在更新时,程序员还需编写程序段将更新过的数据写回数据库。内存中。在更新时,程序员还需编写程序段将更新过的数据写回数据库。而而在持久化语言中,程序员可以直接操纵持久数据,而不必为存取数据编在持久化语言中,程序员可以直接操纵持久数据,而不必为存取数据编写程序。写程序。3 3 ODMG 93ODMG 93和持久化和持久化C+C+系统系统 2.持久化语言的三个基本概念持久化语言的三个基本概念(1)对象的持久性:对象的持久性:要把要把OOPL变成持久化语言,第一步就是提供一种办法,变成持
20、久化语言,第一步就是提供一种办法,把对象区分成是持久的还是暂留的。在程序运行结束后,新创建的持久对象把对象区分成是持久的还是暂留的。在程序运行结束后,新创建的持久对象将被保存,而暂留对象将消失。将被保存,而暂留对象将消失。(2)对象标识和指针:)对象标识和指针:当一个持久对象被创建时,它就要被分配一个持久的对当一个持久对象被创建时,它就要被分配一个持久的对象标识符。当创建的对象为暂留时,被分配一个暂留的对象标识符,在程序象标识符。当创建的对象为暂留时,被分配一个暂留的对象标识符,在程序终止后,对象被删掉,标识符失去意义。终止后,对象被删掉,标识符失去意义。(3)持久对象的存储和访问:)持久对象
21、的存储和访问:逻辑上,实现类的方法的程序代码应该和类的类逻辑上,实现类的方法的程序代码应该和类的类型定义一起作为数据库模式的一部分存储。但现在往往将程序代码存储在数型定义一起作为数据库模式的一部分存储。但现在往往将程序代码存储在数据库之外的文件中,目的是避免对编译器和据库之外的文件中,目的是避免对编译器和DBMS软件进行集成。软件进行集成。查找数据库中对象的方法有三种:查找数据库中对象的方法有三种:第一种方法是根据对象名找对象。第一种方法是根据对象名找对象。实现时,每个对象有一个对象名实现时,每个对象有一个对象名(如同文件名一样)。这种方法对少量的对象是有效的,但对上百万个对象就(如同文件名一
22、样)。这种方法对少量的对象是有效的,但对上百万个对象就 不适用了。不适用了。第二种方法是依据对象标识找对象。第二种方法是依据对象标识找对象。而对象标识存储在数据库之外。而对象标识存储在数据库之外。第三种方法是将对象按聚集形式存放第三种方法是将对象按聚集形式存放,然后利用程序循环找所需对象。然后利用程序循环找所需对象。聚集形式包括集合(聚集形式包括集合(Set)、多集()、多集(Multiset)等。)等。大多数大多数OODBS都支持这三种访问数据库的方法。都支持这三种访问数据库的方法。二、二、ODMG C+ODMG C+对象定义语言对象定义语言ODMG C+ODMG C+对象定义语言(对象定义
23、语言(C+ODLC+ODL)扩充了)扩充了C+C+的类型定义语法。的类型定义语法。例例:在第在第10章的对象联系图中,定义章的对象联系图中,定义Faculty为新的类为新的类Person的的子类,那么可得到下图的带泛化边的对象联系图。子类,那么可得到下图的带泛化边的对象联系图。namenameFacultyFacultyUniversityUniversityCoursetextCoursetextpresidentpresidentworks_forworks_forfnofno city city unameunameeditoreditorstaffstaffteachteachedit
24、editteacherteachersalarysalarytextnametextnamecnamecnameageagePersonPerson带泛化边的对象联系图带泛化边的对象联系图该对象联系图用该对象联系图用C+ODL写的代码示例为:写的代码示例为:class Person:public Persistent_Object public:string name;int age;class Faculty:public Person private:int salary;public:int fno;Ref works_for inverse University:staff;Set R
25、ef teach inverse Coursetext:teacher;class University:public Persistent_Object public:string uname;string city;Ref president;Set Ref staff inverse Faculty:works_for;Set Ref edit inverse Coursetext:editor;class Coursetext:public Persistent_Object public:string cname;string textnameRef teacher inverse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十一章 面向对象数据库 第十一 面向 对象 数据库
限制150内