第9章_面向对象和对象—关系数据库

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第9章面向对象和对象―关系数据库本章内容:9.1面向对象数据模型9.2面向对象数据库建模9.3对象―关系数据库9.1面向对象数据模型面向对象数据模型(Object―OrientedDataModel,简称OODM)是一种可扩充的数据模型,用户可根据需要,自己定义新的数据类型及相应的约束和操作。面向对象数据模型可以通过下列概念来表述:9.1.1对象9.1.2类和实例9.1.3类的继承9.1.1对象对象是OODM的基本结构,是面向对象数据库系统的核心。一个对象是由一些数据以及能够作用在这些数据上的操作组成。例如,职工对象•数据(职工号、姓名、性别、职称、部门…)•操作(增加职工、删除职工、改变职称…)在传统的、非面向对象的数据库系统中,操作被设计为数据操纵的一部分。而在面向对象数据库系统中,操作被定义为数据的一部分,然后可以在任何必要的地方使用它们。数据以及操作被封装起来,它们对用户是隐藏的。即操作或访问数据时,用户不必知道操作是如何施加在数据上的。一个对象包括三个部分:属性集合、方法集合和消息集合1.属性集合每一个对象都有各自的状态、组成和特性,称为对象的属性。属性可能是一组简单的值,也可能是其他对象,即对象的嵌套,并且这种嵌套可以继续下去,从而组成各种复杂的对象。每个对象有唯一的对象标识(OID:ObjectIdentity)。2.方法集合方法是对象的行为特性。方法可改变对象的状态,对对象进行各种操作。方法的定义包含两2个部分:一是方法的调用说明,说明方法的名称、参数和结果类型;二是方法的实现部分,它是用程序设计语言编写的一个过程,以实现方法的功能。3.消息集合对象是封装的,即每一个对象是其状态和行为的封装。所以外界与对象的通信一般只能借助于消息。方法是在数据定义的过程中定义的。为了真正执行一个方法中的步骤,用户必须向对象发送消息。消息传送给对象,调用对象的相应方法,进行相应的操作,最后,以消息形式返回操作的结果。一条消息是一个执行方法的请求。在用户发送的消息中,必须指明要执行的方法的名称以及所需要的参数。9.1.2类和实例在组织信息时,人们总是将具有相似特性的对象归为一类(class)。类中的每个对象称为类的一个实例(Instance)。一个类中的所有对象其特性必须相同,即具有相同的属性、使用相同的方法、响应相同的消息。如果说类的概念相当于关系模型中的关系模式,那么类的实例类似于元组,类的实例之间和类之间可以有复杂的联系。9.1.3类的继承一个类中往往会包含某些具有附加特性的对象,而这些特性并不和类的所有成员相关,这些具有附加特性的对象称为子类。如果类D是类C的子类,则称类C是类D的超类,子类可继承其超类的所有特性(包括属性、方法和消息),同时又可具有超类所没有的特性。一个子类可以只继承一个超类的特性(单继承)也可以继承多个超类的特性(多重继承)。例如,学校模型中有教职工和学生两个类,其中教职工中又可分为教师类和行政人员类,所有教师有专业这一属性,行政人员有行政级别属性,它们是教职工的两个子类。同时教职工和学生也具有某些相似的属性,如:都有身份证号码、姓名、性别、年龄等,可以把它们看成是人的子类。其类层次结构如图9―1所示。39.2面向对象数据库建模面向对象数据库模型的描述工具ODL(ObjectDefinitionLanguage),它是CORBA(正在制定的分布式面向对象计算标准)的一个组件。ODL是从设计者的角度观察数据的结构,与具体的OODBMS无关。所以,ODL和E-R图一样,是基于数据库概念模型上的工具,它们都可以向DBMS支持的数据模型转化,如图9-2所示。9.2.1ODL中类的说明在类的定义中主要包括以下几个部分:①关键字Interface(接口);②类的名字;③类的特性表,可以是属性、联系、方法。所以,ODL中类说明的最简单形式是:Interface类名字{特性表};图9―1学校数据库的类层次结构研究生教师行政人员在职研究生本科生教职工学生人图9―2数据库建模和实现的过程现实世界E-R抽象ODL抽象关系数据模式RDBMSOODBMS对象数据模式49.2.2ODL中属性的说明属性是类的一种最简单的特性。例9.1利用ODL描述职工(employee)类,语句如下:interfaceemployee{attributestringname;attributeintegerage;attributeenumsextype{male,female}sex;};语句说明:第一行说明employee是一个类;第二行说明属性name,其类型是string,即长度未知的字符串;第三行说明属性age,类型是整型;第四行说明属性sex,其类型是枚举型,枚举类型名字为sextype,sex的值从male或female中选择。这就是employee类的说明,任何一个employee对象在这几个属性上均对应一个分量。例9.2给出类department的ODL描述,有属性name(部门名)、manager(负责人)、address(办公地址),其中address是一个结构,包括楼层和房间号:interfacedepartment{attributestringname;attributestringmanager;attributestructAddr{stringroom,stringfloor}address;};ODL中的原子类型有:整型(integer)、浮点型(float)、字符(char)、字符串(string)、布尔型(boolean)和枚举型(enum)。复杂类型可以是集合、列表、数组和结构等。9.2.3ODL中联系的说明为了得到对象与同类或不同类的其他对象的连接方式,需要在类的定义中说明类与类之间的联系。5如职工类与部门类之间有联系。一个职工对象总与某个部门对象有关系(工作关系)。在employee类说明中,可用下面的ODL语句表示这种联系:Relationshipdepartmentworkin;该语句,说明在employee类中的每个对象,都有一个对department对象的引用,引用名为workin。因为在职工类和部门类的联系中还有一层联系是一个部门对象中总包含了若干个职工对象,即从部门类中的每个对象,也应该能实现对职工类中的对象集的引用。那么这种引用如何实现呢?在ODL中有反向联系的概念,要说明一个部门可有多个职工,需要在department类说明中加进对employee类对象的引用:RelationshipsetemployeeownsInverseemployee::workin;其中联系名为owns,关键字set表示集合,setemployee表示employee的对象集合,说明department对象将引用employee的对象集合,Inverseemployee::workin说明owns联系是employee类中联系workin的反向联系。在E-R模型中,没有反向联系的概念,因为E-R模型中的联系是双向的。所以E-R模型中的一个联系,在ODL中要用一对反向联系来表示。在ODL中关于联系的说明也就只有两种情况:要么和其他类中的一个对象有关,要么和其他类中的对象集合有关。例9.3用ODL描述employee、department、item类及其联系:interfaceemployee{attributestringname;attributeintegerage;attributeenumsextype{male,female}sex;RelationshipdepartmentworkinInversedepartment::owns;RelationshipsetitemjoinsInverseitem::joinby;};interfacedepartment{attributestringname;attributestringmanager;attributeStructAddr6{stringroom,stringfloor}address;RelationshipsetemployeeownsInverseemployee::workin;};interfaceitem{attributestringname;attributefloatoutlay;attributeStructdate{integerday,integermouth,integeryear}check_date;RelationshipsetemployeejoinbyInverseemployee::joins;};9.2.4ODL中的类的继承假设类D是类C的子类,那么在定义类D时,可以在后加上:C,说明类D是类C的子类,并可继承类C的所有特性。例9.4定义类manager(部门经理)为employee的子类。interfacemanager:employee{Relationshipdepartmentlead};语句说明:第一行说明类manager是类employee的子类;第二行表明所有的manager对象都有一个联系lead,表示该经理所管理的部门,并且一位经理只能管理一个部门。在多重继承时,特性名之间可能会发生冲突。如两个或多个超类可能有同名的属性或联系,职工部门Owns1:nWorkin1:1joins1:njoinby1:n项目7而这些特性的类型可能不同。在ODL中提供以下几种机制来建立解决多重继承产生的冲突:·指出超类特性的多个定义中哪一个用于子类;·在子类中,对于有相同名字的另一个特性给一个新的名字;·在子类中重新定义一个或多个超类中已定义的某些特性。9.2.5ODL中方法的说明类的另一个特性是方法,方法是与类相关的函数。类中的每一个对象都能引用方法,同一方法可用于多个类,这是面向对象语言的特点。方法说明中主要有方法名、方法的输入/输出类型说明等。而方法的实际代码是用宿主语言写的,代码本身不是ODL的一部分。调用方法时,可能会引起异常,即出现异常或非希望的情况,这种情况一般应由某个函数来处理(相当于出错处理)。在ODL的方法说明中,提供关键字raises(引发),在括号里列出异常处理列表。例9.5类employee的扩充定义,增加了方法的说明:interfaceemployee(keyname){attributestringname;attributeintegerage;attributeenumsextype{male,female}sex;RelationshipdepartmentworkinInversedepartment:owns;RelationshipsetitemjoinsInverseitem::joinby;StringDepartname()raises(nodepartFound)Otheritem(initem,outsetemployee)raise(noitemin);};第一个方法是Departname,该函数将产生一字符串型的返回值,假设(因为ODL定义中没有函数代码,所以只能假设)该方法的功能是返回应用该方法的对象所在的部门名,如果应用该方法的对象所在的部门不存在,将引发名为nodepartFound的异常处理。第二个方法是Otheritem,该函数没有任何返回值,其输入参数类型为item,输出参数为employee的对象集合。该方法可能是希望该职工参加了这个项目,如果不是,那么就会引发异常noitemin。如果他参加了这个项目,将给出所有参加该项目的其他职工。除了属性、类型、方法、继承的说明外,一般类说明中还应包括码的说明。该语句中的(keyname)说明了employee码为name。89.2.6E―R模型向面向对象数据模型的转换当建立了现实世界的E―R模型以后,可将其转换为O―O模型。转换时,可按照以下的步骤进行:(1)将E―R模型中的每个实体集生成一个类,实体集的属性转换为类的属性。(2)将E―

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功