面向对象数据库系统支持面向对象数据模型,简称OO模型。也就是说,一个面向对象数据库系统是一个持久的、可共享的对象库的存储和管理者;而一个对象库是由一个OO模型所定义的对象的集合体。
面向对象数据库系统目前尚缺少关于OO模型的统一的规范说明,OO模型缺少一个统一的严格的定义,但是有关OO模型的许多和新概念已取得了共识。
1 OO模型
一个OO模型是用面向对象观点来描述现实世界实体的逻辑组织、对象间限制、联系等的模型。一系列面向对象核心概念构成了OO模型的基础。
OO模型的核心概念主要有:
(1) 对象和对象标识:现实世界的任一实体都被统一地模型化为一个对象,每个对象有一个惟一的标识,称为对象标识(OID)。OID与关系数据库中码的概念,以及部分系统中支持的记录标识、元组标识有本质的区别。OID识独立于值、系统全局惟一的。对象通常与实际的表识始终保持不变。如一个对象的部分属性、方法可能会发生变化,但对象标是不会改变。OID是区分两个不同的对象的标准。常用OID有以下几种:
值标识:用值来表示标识。如关系数据库忠实永远组的码值区分元组。
名标识:用一个名字来标识。如在一个作用域内程序变量一般使用的就是名标识。
内标识:是建立在数据模型或程序设计与严重的不要求用户给出的标示。例如,面向对象数据库系统使用的就是内标识。
(2)封装:每一个对象是其状态与行为的封装,其中状态是该对象一系列属性值的集合,行为是在对象状态上操作的集合,操作也称为方法。封装是OO模型的一个关键概念,封装是对象的外部界面与内部实现之间实行隔离的抽象,外部与对象的通信是通过“消息”实现的。
封装将对象的实现与对象应用相互隔离,允许对操作的实现算法和数据结构进行修改而不应相应用接口;不必修改使用它们的应用,这有利于提高数据独立性。封装还隐藏了数据结构与程序代码等细节,增强了应用程序的可读性。
查询或使用对象属性值必须通过调用方法,如在VB中,要将一个文本框的文本内容存储到一个字符串变量中,可以使用下面的语句:
以下是引用片段:
myStr=txtTextBox1.text
其中,“.”被称为访问符,通过它可以访问文本框对象txtTextBox1的 text属性。
(3)类:共享同样的属性和方法集的所有对象构成了一个对象类(CLASS),一个对象是某一类的一个实例。类的概念在面向对象数据库中是一个基本概念,我们把属性、方法相似的对象集合称为类,而把每一个对象称为所属类的一个实例。
类的概念类似于关系模式,类的属性类似于关系模式中的属性;对下类似于源组的概念,类的一个实例对象类似于关系中的一个元组。类本身也可看作一个对象,称为类对象。
(4) 类层次:在一个面向对象数据库模式中,可以定义一个磊(C1)的子类(C2),类C1称为类C2的超类;子类还可以再定义子类(C3)。这样,面向对象数据库模式的一组类构成一个有限的层次结构,称为类层次。在每个类的最顶部通常被称为基类。 对一个类来说,它可以有多个超类,也可以继承类层次中其直接或间接超类的属性和方法。
(5)消息:对象是封装的,对象与外部的通信一般通过显式的消息传递。即消息从外部传送给对象,存取和调用对象中的属性和方法;在内部执行所要求的操作,操作的结果仍以消息的形式返回。
(6)继承:在OO模型中常用的两种基称:单继承和多重继承。若一个子类只能继承一个超类的特性,这种继承称为单继承;若一个子类能继承多个超类的特性,这种继承称为多重继承。例如“旅行用小汽车”既是小汽车又是旅行车,它继承了小汽车和旅行车两个超类的所有属性、方法和消息,因此它属于多重继承。
继承性是建模的有力工具,它同时提供了对现实世界简明而精确的描述和信息重用机制。子类可以继承超类的特性,可以避免许多重复定义,还可以定义自己特殊的属性、方法和消息。如果在定义自己特殊的属性、方法、消息时与继承下来的超类的属性、方法和消息发生冲突时,通常由系统解决,在不同的系统中使用不同的冲突解决方法,因此便产生了不同的继承语义。例如对于子类与超类之间的同名冲突,一般是以子类定义的为准,即子类的定义取代或替代由超类继承而来的定义;对于子类的多个直接超类之间的同名冲突,有的系统是在子类中规定超类的优先次序,首先继承优先级最高的超类的定义,有的系统则指定继承其中某一超类的定义。