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