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

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

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

时间: 2024-11-01 22:10:53

数据库的滞后联编和对象嵌套特性剖析的相关文章

C++中静态联编和动态联编介绍

联编是指一个计算机程序自身彼此关联的过程.按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编. 静态联编 静态联编是指联编工作出现在编译连接阶段,这种联编又称早期联编,因为这种联编过程是在程序开始运行之前完成的. 在编译时所进行的这种联编又称静态束定.在编译时就解决了程序中的操作调用与执行该操作代码间的关系,确定这种关系又称为束定,在编译时束定又称静态束定.下面举一个静态联编的例子. #include class Point{public:Point(double i, do

解析动态联编(下篇)

三 虚函数表VTABLE 动态联编过程跟我们猜测的大致相同.编译器在执 行过程中遇到virtual关键字的时候,将自动安装动态联编需要的机制,首先为这 些包含virtual函数的类(注意不是类的实例)--即使是祖先类包含虚函数而本身 没有--建立一张虚拟函数表VTABLE.在这些虚拟函数表中,编译器将依次按照函 数声明次序放置类的特定虚函数的地址.同时在每个带有虚函数的类中放置一个 称之为vpointer的指针,简称vptr,这个指针指向这个类的VTABLE. 关于 虚拟函数表,有几点必须声明清

解析动态联编(上篇)

文章摘要 多态性是C++最主要的特征,多态性的实现得益于C++中的动 态联编技术.文章通过对动态联编的关键技术虚拟函数表进行深入的剖析,解析 的动态联编的过程极其技术要领. 关键字 多态性 动态联编 VTABLE 虚函数 文章正文 一 从多态性谈动态联编的必要性 在进入主题之前先介绍一下联编的概念.联编就是将模块或者函数合并在一起生 成可 执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对 外部访问也分配正确的内存地址.按照联编所进行的阶段不同,可分为两种不同 的联编方法:静态联

C++中的虚函数和动态联编

  面向对象程序设计的基本观点是用程式来仿真大千世界,这使得它的各种根本特性非常人性化,如封装.继承.多态等等,而虚函数就是c++中实现多态性的主将.为了实现多态性,c++编译器也革命性地提供了动态联编(或叫晚捆绑)这一特征. 虚拟函数亦是mfc编程的关键所在,mfc编程主要有两种方法:一是响应各种消息,进行对应的消息处理.二就是重载并改写虚拟函数,来实现自己的某些要求或改变系统的某些默认处理. 虚函数的地位是如此的重要,对它进行穷根究底,力求能知其然并知其所以然 对我们编程能力的提高大有好处.

(一三九)静态联编和动态联编

决定程序调用时,将使用哪个可执行代码块,是由编译器负责的. 将源代码中的函数调用解释为执行特定的函数代码块被称为 函数名联编.   在C++语言中,这个过程比在C语言中更麻烦一些(因为C++存在函数重载,编译器要给函数重命名),编译器要查看函数参数及函数名才能确定使用哪个函数(根据匹配的优先级,一共4级).   C/C++编译器可以在编译过程中完成这种联编,在编译过程中进行联编被称为  静态联编(static binding),又称为早期联编(early binding).   然而虚函数使这项

C++的静态联编和动态联编_C 语言

最近在看析构函数的内容,看到一些讲的比较好的文章,这里我也有了一些我自己的体会,在这里一并记录一下. 联编是指一个计算机程序自身彼此关联的过程,在这个联编过程中,需要确定程序中的 操作调用(函数调用) 与 执行该操作(函数) 的代码段之间的映射关系. 意思就是这个函数的实现有多种,联编就是把调用和对应的实现进行映射的操作. 按照联编进行的阶段不同,可分为静态联编和动态联编. 静态联编 静态联编工作是在程序编译连接阶段进行的,这种联编又称为早期联编,因为这种联编实在 程序开始运行之前 完成的.在程

静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #include<iostream> void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void

C++的静态联编和动态联编详解_C 语言

一.概述: 通常来说联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程.按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编. 静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型,C语言中,所有的联编都是静态联编,并且任何一种编译器

数据表设计-数据库设计:数据表的对象的属性

问题描述 数据库设计:数据表的对象的属性 问题比较简单, 在某个地区有A1.B.C.D.E等区域District,每个区域中又分几个小区域Region(如东西南北),在程序设计中,每个Region中都有两个属性(一个是工作完成的日期,一个是此Region所属的District),然后此Region中就是它每一天所对应的工作数据, 另一方面,每个District对象中也有一些属性值,这此"属性"下都只有一个值. 我想问一下,这样的结构应该怎样来设计数据库? District和Region