站内搜索

剖析数据库特性:滞后联编和对象嵌套

  面向对象数据库系统支持面向对象数据模型,简称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模型中常用的两种基称:单继承和多重继承。若一个子类只能继承一个超类的特性,这种继承称为单继承;若一个子类能继承多个超类的特性,这种继承称为多重继承。例如“旅行用小汽车”既是小汽车又是旅行车,它继承了小汽车和旅行车两个超类的所有属性、方法和消息,因此它属于多重继承。

  继承性是建模的有力工具,它同时提供了对现实世界简明而精确的描述和信息重用机制。子类可以继承超类的特性,可以避免许多重复定义,还可以定义自己特殊的属性、方法和消息。如果在定义自己特殊的属性、方法、消息时与继承下来的超类的属性、方法和消息发生冲突时,通常由系统解决,在不同的系统中使用不同的冲突解决方法,因此便产生了不同的继承语义。例如对于子类与超类之间的同名冲突,一般是以子类定义的为准,即子类的定义取代或替代由超类继承而来的定义;对于子类的多个直接超类之间的同名冲突,有的系统是在子类中规定超类的优先次序,首先继承优先级最高的超类的定义,有的系统则指定继承其中某一超类的定义。

 

  2 持久性

  不同对象的标识的持久性程度是不同的。若标识能在程序或查询的执行期间保持不变,则称该标识具有程序内持久性。若标识在从一个程序的执行到另一个程序的执行期间保持不变,则称该标识具有程序间持久性。若标识不仅在程序执行过程中而且在对数据的重组重构过程中一直保持不变,则称该标识具有永久持久性。例如,面向对象数据库中对象标识具有永久持久性,而SQL与严重的关系名不具有永久持久性,因为数据重构可能修改关系名。

  对象标识具有永久持久性含义是:一个对象一经产生,系统就给它赋予一个在全系统中唯一的对象标识符,指导它被删除。对象标识是由系统统一分配的,用户不能对对象标识符进行修改。对象标识是稳定的,它不会因为对象中某个值的改变而改变。

  3 面向对象数据库

  面向对象数据库模式是类的集合。面向对象的数据模型提供了一种类层次结构。在面向对象数据库模式中,一组类可以形成一个类层次。一个面向对象数据库可能有多个类层次。在一个类层次中,一个类继承其所有超类的全部属性、方法和消息。

  面向对象的数据库系统在逻辑上和物理上从面向记录上升为面向对象、面向可具有复杂结构的一个逻辑整体。允许用自然的方法,并结合数据抽象机制在结构和行为上对复杂对象建立模型,从而大幅度提高管理效率,降低用户使用复杂性。

  4 面向对象数据库的特性

  面向对象数据库的特性有主要表现在滞后联编和对象的嵌套两方面。

  1) 滞后联编

  在OO模型中,当子类定义方法与继承下来的超类的方法产生同名冲突,即子类只继承了超类中操作的名称,子类自己实现操作算法,并有自己的数据结构和程序代码。这样,同一个操作名就与不同的实现方法、不同的参数相联系。

  一般地,在OO模型中对于同一操作,可以按照类的不同重新定义操作的实现,这称为操作的重载(同名函数,不同参数)。

  例如,定义Tdate类,同时为了满足不同的设置需要,可以设定3个Set函数():

以下是引用片段:
  Class Tdate
  {
  public:
  int month,day,year; //三个属性
  void set(int m,int d,int y); //同时设置三个属性月,日,年
  void set(int m); //设置月
  void set(int d,int y); //设置日,年
  }

以下是引用片段:
  程序中用到如下定义:
  Tdate myDate;
  可以有以下不同的set方法(函数)的应用:
  MyData.set(12,3,2002);
  MyData.set(12);
  MyData.set(12,2002);

  为了正确执行myDate的一个set方法,OODBMS不能在编译时就把操作set联编到程序上,而必须根据运行时的实际需求,选择相应的对象类型的相应的程序进行联变,这个推迟的转换称为滞后联变。

  在同一个面向对象数据库模式中,对象的某一属性可以是一个对象,这样对象之间就产生一个嵌套的层次结构。例如:设Obj1和Obj2是两个对象,如果Obj2是Obj1的某个属性的值,称Obj2属于Obj1,或Obj1包含Obj2。一般的,如果对象Obj1包含Obj2,则称Obj1位复杂对象或复合对象。

  对象嵌套概念是面向对象数据库系统的一个重要概念,它允许不同的用户采用不同的粒度来观察对象。对象嵌套层次结构和类层次结构形成了对象横向和纵向的复杂结构。

  • 上一篇:入门:Java连接各种数据库的实例
  • 下一篇:实例讲解:.NET如何访问MySQL数据库