面向对象数据模型

2024-07-22

面向对象数据模型(共10篇)

面向对象数据模型 篇1

将数据库系统应用到更广阔的领域中, 比如计算机辅助设计, 关系模型的局限性就暴露出来了。因此数据库研究者提出了一些新的克服关系模型限制的数据模型。其中最为重要的就是面向对象模型, 它的基础是面向对象程序设计范型。这里先阐述几个主要概念:对象标识、对象结构和类的概念、继承等。

面向对象的数据库经过十几年的发展, 已经日趋成熟, 有关的国际标准相继出台。ODMG (OMG所属的对象数据库管理组) 分别于1993, 1997, 2000年提出了对象数据库标准O D M G 1.0, O D M G 2.0, O D M G 3.0, 制定ODMG标准的目的是为了让ODBMS的用户编写的可移植的应用, 能运行在多个OODBMS的产品上。本课题的接口实现部分就是参照ODMG标准来实现。

ODMG对象模型主要包括以下基本概念。

(1) 数据建模的基本原语是对象 (Object) 和文字 (Literal) , 每个对象有一个唯一的标识符, 文字没有标识符。

(2) 对象和文字都可以划分为类型 (Type) , 同一类型的对象或文字具有相同的行为和状态, 对象可以称为类型的实例。

(3) 通过一组性质 (Property) 来定义对象的状态, 性质可以分为两种:对象的属性 (Attribute) 和对象之间的关系 (Relationship) 。

1 对象与对象标识

1.1 对象结构

对象是由一组数据结构和在这组数据结构上的操作的程序代码封装起来的基本单位。对象之间的界面由一组消息定义。一个对象包括以下几个部分。

(1) 属性集合:所有属性合起来构成了对象数据的数据结构。属性描述对象的状态、组成合特性。对象的某一属性可以是单值的或值的集合, 进一步地, 一个对象的属性也可以是一个对象, 即对象可以嵌套, 从而组成各种复杂对象。

(2) 方法集合:方法描述了对象的行为特征。方法的定义包括两部分, 一是方法的接口, 二是方法的实现。方法的接口用以说明方法的名称、参数和结果返回值的类型, 也称之为调用说明。方法的实现是一段程序代码, 用以实现方法的功能。

(3) 消息集合:消息是对象向外提供的界面, 消息由对象接收和响应。面向对象数据模型中的“消息”与计算机网络中传输的消息含义不同。它是指对象之间操作请求的传递, 而不考虑操作实现细节。

1.2 对象标识

面向对象数据库中的每个对象都有一个唯一的不变的标识称为对象标识 (OID) 。对象通常与实际领域的实体对应。现实世界中, 实体的属性值可能随着时间的推移会发生改变, 但是每个实体的标识始终保持不变。相应的, 对象的部分 (或全部) 属性、对象的方法会随着时间的推移发生变化, 但对象标识不会改变。

1.3 封装

OO模型的一个关键概念就是封装。每一个对象是其状态与行为的封装。

封装的意义在于将对象的实现与对象的应用互相隔离, 从而允许对操作的实现算法和数据结构进行修改, 而不影响接口, 不必修改使用它们的应用, 这有利于提高数据独立性。

2 类和类层次

在OO数据库中相似对象的集合称为类。每个对象称为它所在类的一个实例。一个类中所有对象共享一个定义, 它们的区别仅在于属性取值不同。可以看到, 类的概念类似关系模式, 类的属性类似关系模式中的属性:对象类似元组的概念, 类的一个实例对象类似关系中的一个元组。可以把类本身也看作一个对象, 称为类对象 (Class Object) 。

3 面向对象数据库的模式演进

面向对象数据库模式是类的集合。模式为适应需求的变化而随时间变化称为模式演进。模式演进包括创建新的类、删除旧的类、修改类的属性和操作等。在关系数据库系统中, 模式的修改比较简单, 主要有如下的模式修改操作。

(1) 创建或删除一个关系。

(2) 在关系模式中增加或删除一个属性。

(3) 在关系模式中修改完整性约束条件。

OODB应用环境对OODB模式演进提出了许多新的要求, 使得面向对象数据库模式的修改要比关系模式的修改复杂得多, 其主要原因有以下几点。

(1) 模式改变频繁。

使用O O D B系统的应用通常需要频繁地改变O O D B数据库模式。例如O O D B经常运用于工程设计环境中, 设计环境特征之一就是不断变化.设计自身在不断变化, 以纠正错误或修改设计使之更完美、更适合于实际:而当设计者对问题及其解决有更深刻理解时也会修改模式。

(2) 模式修改复杂。

从上面讲解的OO模型特征可以看到OO模型具有很强的建模能力和丰富的语义, 包括类本身的语义、类属性之间和类之间丰富的语义联系, 这使得模式修改操作的类型复杂多样。此外, OODB中模式演进往往是动态的, 动态模式演进的实现技术更加复杂。

3.1 模式的一致性

模式的演进必须要保持模式的一致性。模式的一致性是指模式自身内部不能出现矛盾和错误, 它由模式一致性约束来刻画。模式一致性约束可分为唯一性约束、存在性约束和子类型约束等, 满足所有这些一致性约束的模式则称为是一致的。

(1) 唯一性约束, 这一类约束条件要求名字的唯一性。

(2) 存在性约束, 存在性约束是指显式引用的某些成分必须存在。

(3) 子类型约束。

3.2 模式演进操作

下面给出一些主要的模式演进操作, OODBMS应该支持这些模式演进。

(1) 类集的改变; (2) 己有类的成分的改变; (3) 子势超类联系的改变。

3.3 模式演进的实现

模式演进主要的困难是模式演进操作可能影响模式一致性。面向对象数据库中类集的改变比关系数据库中关系模式的改变要复杂得多。因为类的修改操作可能会影响到其它类的定义。例如, 改变了一个类的属性名, 这需要所有使用该属性的地方都要改名。

因此, 在OODB模式演进的实现中必须具有模式一致性验证功能, 这部分的功能类似编译器的语义分析。进一步, 任何面向对象数据库模式修改操作不仅要改变有关类的定义, 而且要修改相关类的所有对象, 使之与修改后的类定义一致。所谓转换的方法是指在OODB中, 己有的对象将根据新的模式结构进行转换以适应新的模式。例如, 在某类中增加一属性时, 所有的实例都将增加该属性。这时还要处理新属性的初值, 例如给定一缺省初值, 或提供一算法来自动计算新属性初值, 还可以让用户设定初值。删除某类中一属性时只需要从该类的所有实例中删除相应属性值即可。

参考文献

[1]数据库系统基础Ramez Elmasri[M].人民邮电出版社.

[2]王意洁.面向对象的数据库技术[M].电子工业出版社.

面向对象数据模型 篇2

GPS导航定位技术中面向对象读取Rinex格式数据

由于计算机软件主流思想的影响,原有的BAISC语言为指导的GPS编程方法也应进行改进.本文在原有GPS编程方法上进行改进,来处理GPS数据,将数据和定位解算通过类的`声明来联系,实现了数据的封装,保证了数据的安全性.

作 者:陈东银 刘立龙 陈雷 CHEN Dong-yin LIU Li-long CHEN Lei  作者单位:桂林工学院,土木工程系,广西,桂林,541004 刊 名:测绘与空间地理信息 英文刊名:GEOMATICS & SPATIAL INFORMATION TECHNOLOGY 年,卷(期):2009 32(3) 分类号:P228.4 关键词:GPS数据   Renix格式   面向对象   数据读取  

浅议面向对象的数据库系统 篇3

关键词:数据库;面向对象;新一代数据库管理技术

中图分类号:TP311.13文献标识码:A文章编号:1007-9599 (2010) 13-0000-02

Object-oriented Database System

Dai Xingmei1,Wang Chao2

(1.Suizhou Vocational and Technical College,Suizhou441300,China;2.

Computer Science Institute,China University of Geosciences,Wuhan430074,China)

Abstract:Object-oriented database system is object-oriented programming techniques and database technology product of the combination.Object-oriented database systems are the main features of object-oriented technology with encapsulation and inheritance,improves software reusability.As a third generation object-oriented database,the database can not be compared with the previous two generationsadvantages of the database.

Keywords:Database;Object-oriented;New generation database man-

agement technology

一、概述

面向对象数据库系统是面向对象的程序设计技术与数据库技术相结合的产物。面向对象数据库系统的主要特点是具有面向对象技术的封装性和继承性,提高了软件的可重用性。传统的关系模型,又称为平面关系模型。它在结构上是二维的,每个属性的数据类型是基本数据类型。关系模型的规范化最低要求是1NF条件,即属性值不可分解。面向对象的思路或称规范可以用于系统分析、系统设计、程序设计,也可以用于数据结构设计、数据库设计等。

二、面向对象数据库设计的特点

在如今信息大爆炸的时代,随着Internet应用的普及,用现有的关系型数据库已经无法描述现实世界的实体,而面向对象的数据库设计由于吸收了已经成熟的面向对象程序设计方法学的核心概念和基本思想,使得它符合人类认识世界的一般方法,更适合描述现实世界。

面向对象的数据库不仅在处理多媒体等数据类型时可以做到游刃有余,而且在应用系统开发速度和维护等方面有着极大的优越性,对于一些特定的应用领域,能较好地满足其应用需求。

随着许多基本设计应用(如MACD和ECAD)中的数据库向面向对象数据库的过渡,面向对象思想也逐渐延伸到其它涉及复杂数据的应用中,其中包括辅助软件工程(CASE)、计算机辅助印刷(CAP)和材料需求计划(MRP)。这些应用如同设计应用一样在程序设计方面和数据类型方面都是数据密集型的,它们需要识别于类型关系的存储技术,并能对相近数据备份进行调整。

三、面向对象技术在数据库中的实现

目前,最有影响力的数据库模型有:面向对象数据库模型(ODBMS)和对象-关系数据库模型(ORDBMS)。面向对象的数据模型(ODBMS)吸收了面向对象程序设计方法学的核心概念和基本思想,直接采用对象数据库模型来构造数据库系统,它是一个纯正的面向对象数据库系统。ORDBMS是面向对象技术与传统关系数据库技术相结合而形成的数据库关系。也可以说是一种扩展关系数据库,它具有一定的面向对象数据库特征。

基于以上两种数据库模型,面向对象数据库系统(OODBS)的实现一般有两种方式:一种则是对传统数据库进行改进,使其支持面向对象数据模型,另一种则是在面向对象的设计环境中加入数据库功能,这是纯的OODBS技术,但是因为两者支持概念差异较大,数据共享实现难度较大。将面向对象技术应用于数据库是解决当今许多新型数据库应用中遇到的问题的好办法,当前多数数据库生产商都在研发如何将面向对象技术应用到关系数据库中。将面向对象技术应用到关系数据库中可以有两种方式。

(一)把面向对象技术中的对象作为关系数据库系统中的一种新的数据模型

关系表中的属性值包含对象指针,对象数据的操作在关系数据库之外进行。把面向对象数据模型(ODM)和关系数据模型(RDM)结合起来,对关系数据库管理系统进行扩充,但对象查询功能受到一定的限制。

(二)把面向对象接口添加在关系数据库中。在关系数据库系统中增加一個对象到关系的转换器,将上层的面向对象模式转化为关系存储模式,存放到关系数据库中。这样,在面向对象的数据库中关系存储模型位于底层,数据库用户可以利用标准的面向对象数据库语言进行查询处理,用户输入的面向对象数据库语言被转换成关系数据库语言,从而对底层的关系存储模式进行查询等处理,同时将操作结果按照对象方式返回给用户。

四、面向对象数据库技术的发展趋势

(一)对象关系数据库管理系统。对象关系数据库管理系统既支持SQL语句,也支持面向对象技术,实现了传统数据库技术和面向对象技术的完美结合。这样既保留了原有关系型数据库系统,增加了通用性和兼容性,又可以实现两代数据库的平稳过渡。全球的数据库生产商争相研发这种数据库产品,数据库生产商竞争的一个焦点是如何在现有的数据库中加入面向对象技术。

(二)面向对象数据库管理系统。面向对象数据库管理系统以一种面向对象语言为基础,增加数据库的功能,主要支持持久对象和实现数据共享。利用类来描述复杂对象,利用封装方法来模拟对象行为,利用继承性来实现对象的结构和方法的重用。但是这种纯粹的面向对象数据库管理系统不能和现有的数据库结合起来,在扩展性和通用性方面受到限制。

(三)对象关系映射数据库系统。对象关系映射数据库系统是指在对象和关系之间建立一个映射,映射数据库系统作为中间件,使得数据源中的关系数据能够进入对象领域,并且作为对象供上层使用。

五、面向对象数据库技术的前景展望

面向对象数据模型 篇4

第一个局限性主要是由于地理实体在矢量系统中被构造为数学上的点、线、面, 而在栅格系统中则构造为网格单元。因为公路不是数学上的线, 城市也不是数学上的点, 而且网格单元结构是对应于不确定地理实体的任意的空间分割, 因而这两个模型在地理现实中均不存在。第二个限制要求开发新的模型来充分支持空间分析。如果我们给一个观众提供一个地理场景并询问他看到了什么, 就会很容易地发现基于特征模式的必要性。回答不会是点、线、面和网格单元, 而是诸如河流、湖泊、公路和森林等地理实体。

1 特征概念

基于特征的方法模拟的是地理特征, 而基于图层的方法模拟的是一张地图或一组专题地图。在一个FBGIS环境中, 地理特征的表示以地理位置以及地理实体的自然属性和相互关系为基础。地理特征的确定是涉及人类洞察力和认知力的一个复杂过程。

基于特征方法在计算机化的地理数据库框架中的实现方式之一, 是开发运用面向对象技术的数据模型。由此产生的特征模型包括对地理现实的人为概念化、几何对象之间的空间关系以及非空间对象之间的特征一特征关系。

对现实地理系统的观察使我们认识到, 我们生活的地球表面, 是由公路、河流、建筑物、植被、土地等物质实体组成的。我们将这种具体的事物称为地理实体。进一步的观察得出, 以某种属性集作为分类标准, 可以将地理实体分类为具有该种属性集的实体集合, 那么这一类地理实体就够成了地理特征。在基于特征GIS中, 特征是地理现象的基本表示。美国地质调查局开发的DLG-E数据模型对实体和特征的定义如下。

实体:是真实世界的现象, 它不能再被进一步细分为同一类现象。如:桥梁、湖等。

特征 (类型) :具有相同属性及关系的一类实体, 特征的概念既包含实体集, 也包含对实体集的数字描述。如:河流、道路、泉和桥梁等。

特征实例:是特征类型的具体化。如东湖是湖的一个实例, 长江大桥是桥梁的一个实例等。

特征对象:是特征实例的表现。河流是一个实体, 在地图上一般符号化为兰线, 兰线为特征对象。

2 特征模型

在面向对象的基于特征的GIS系统中, 用户谈到的是对象而不是一个关系的记录和字段。

与传统的基于图层的地理关系模型相比, 面向对象的特征GIS建模方法是一种在较高抽象层次上的建模方法, 具有较好的地理信息认知观, 同时亦很好地解决了利用面向对象的原理与方法来定义和建立空间关系与非空间关系。特征GIS空间数据模型对地理现象的数字表示和空间描述更完备、更具有整体性, 除了表达空间几何目标之间的拓扑关系, 还表达了特征之间的非拓扑和属性语义关系, 而这些关系在传统的基于图层的GIS模型中被遗漏掉。同时, 面向对象方法及其抽象机制的应用, 使特征GIS模型的语义更加丰富, 从而能够很好地表示复杂地理现象和实体。

3 特征空间数据模型的构成

数据模型是对现实的抽象。为了在数据模型中使地理现实概念化, 需要使定义组成成员和它们之间关系的规则形式化。在对数据模型的许多定义中, Codd提出, 一个数据模型包括三个部分:一个数据结构类型集合、一个用于处理这些数据结构类型的算子 (操作符) 集合和一个控制数据库性能的完整性规则集合。完整性规则包含一组完整性约束, 这些约束能够控制在不同应用中的数据结构和运算操作。一个空间数据模型经常需要完整性约束, 因为在该数据模型中所定义的组成成员通常是针对具体应用的。

空间目标的复杂性需要多种方法来定义和使用合适的数据类型和运算操作。大部分GIS软件均考虑到对点一线一面关系表中空间目标之间诸如邻接和包含等拓扑关系的编码。然而, 许多应用领域需要处理与非空间关系接合在一起的复杂目标。在寻求一个更丰富的数据模型对复杂的地理实体进行编码的研究方面, 许多研究者把焦点集中在面向对象方法上, 将其作为以整体的方式体现地理特征和关系的一种可采用的方法。在面向对象的基于特征的GIS系统中, 用户谈到的是对象而不是一个关系的记录和字段。

3.1 一个基于特征G I S目标的组成成员

在面向对象系统中, 一个特征的每一个元素可以被看作一个对象。要建立一个基于特征的GIS系统, 对象被嵌入在实例变量和方法中, 必须包含充足的信息、关系、功能函数以支持空间分析和查询。

依据特征对象的这些部件和上文特征表示法的概念, 可以给面向对象的GIS系统创建两种对象类型, 即特征对象和几何对象类型。不管表示的形式如何, 一个特征对象用来描述一个地理特征的非空间特性。一个几何对象存储有关地理特征空间位置的信息。例如:存储一口井 (X, Y) 坐标的点是一个几何对象。

3.2 特征对象和几何对象之间的关系

一个地理特征能被特征对象和几何对象数字化表示。在基于特征系统中, 特征对象是基本元素。特征对象封装几何对象, 因为几何对象存储特征对象的位置信息。几何对象包含一个标识符, 另外还有特征的位置和拓扑信息。

两个或两个以上对象之间的关系被定义为对象之间的联系。根据用户对现实的解释, 特征对象可以被分解为一个子对象的集合。例如:一个城市能被解释为一个由人口、建筑物和基础设施组成的对象。对象类实例之间的关系依赖于应用领域和比例尺。可以用一些关键短语可以用来描述基于特征GIS对象类之间的许多联系。它们不但能被用来描述几何对象之间的联系, 而且也能描述特征对象和几何对象之间的联系以及特征对象之间的联系。

例如:一个特征可以是由任何其它空间或非空间对象组成 (composedof) , 或是其一部分 (part-of) 。例如一个飞机场是由跑道和建筑物组成;跑道是飞机场的一部分。“垂直关联关系” (vertically related to) 用来显示两个特征之间的“在顶部”或“在底部”的关系。例如:一座桥与一条河在垂直方向上是相关联的。特征与特征之间、点与多边形之间以及线与多边形之间的联系也能用“以为界” (bounded by) , “作为的边界” (bounds) , “位于之内” (within) 和“包含”关系 (contains) 来描绘。

摘要:本文基于笔者从事GIS数据模型的相关研究心得, 以基于面向对象的特征GIS空间数据模型研究对象, 深度探讨了基于特征的空间数据模型构建构成的相关思路, 分析了特征对象与传统几何对象之间的关系, 相信对从事相关研究的同行能有所裨益。

关键词:特征,空间数据模型,概念,GIS

参考文献

[1]白玲.空间数据的拓扑关系及其自动生成[J].解放军测绘学院学报, 1993 (4) :57~63.

面向对象数据模型 篇5

在 db4o 之旅 系列文章的第一部分:初识 db4o 中,作者介绍了 db4o 的历 史和现状,应用领域,以及和 ORM 等的比较,在这篇文章中,作者将会介绍 db4o 的安装、启动以及三种不同的查询方式:QBE(Query by Example)、SODA (Simple Object Database Access) 以及 NQ(Native Queries),并分别通 过这三种不同的途径实现了两个关联对象的查询。本文还示范了开发中最经常用 到的几个典型功能的 db4o 实现。

下载和安装 db4o

db4o 所有最新的版本都可以直接在 上下载,进入 db4o 的下载页面 ,我们可以看到最新的 for Java 稳定版本是 5.5,包括 JAR、源代码、入门文 档、API 等内容的完整的打包文件只有 6 MB,db4o 还有一个对象数据库管理工 具 ObjectManager,目前版本是 1.8。

接着在 Eclipse 中新建 Java 项目,把 db4o 对象数据库引擎包 db4o-5.5 -java5.jar 导入进项目。由于 db4o 支持多种版本的 JDK,除了 for JDK 5.0 的 db4o-5.5-java5.jar 外,还有 for JDK 1.1、1.2-1.4 的 JAR 包,以适应 多种环境。与 Hibernate、iBATIS SQL Maps 相比,db4o 更加自然,无需过多 地引用第三方支持库。

开启数据库

db4o 怎样进行对象持久化呢?通过浏览目录可以发现,与传统的 RDBMS 一 样,db4o 也有自己的数据库文件, 在 db4o 中数据库文件的后缀名是“*.yap” 。让我们先来了解一下 db4o 对象数据库引擎的主要包结构:

com.db4o

com.db4o 包含了使用 db4o 时最经常用到的功能。两个最重要 的接口是 com.db4o.Db4o 和 com.db4o.ObjectContainer。com.db4o.Db4o 工厂 是运行 db4o 的起点,这个类中的静态方法可以开启数据库文件、启动服务器或 连接一个已经存在的服务器,还可以在开启数据库之前进行 db4o 环境配置。 com.db4o.ObjectContainer 接口很重要,开发过程中 99% 的时间都会用到它, ObjectContainer 可在单用户模式下作为数据库实例,也可作为 db4o 服务器的 客户端。每个 ObjectContainer 实例都有自己的事务。所有的操作都有事务保 证。当打开 ObjectContainer,就已经进入事务了,commit() 或 rollback() 时,下一个事务立即启动。每个 ObjectContainer 实例维护它自己所管理的已 存储和已实例化对象,在需要 ObjectContainer 的时候,它会一直保持开启状 态,一旦关闭,内存中数据库所引用的对象将被丢弃。

com.db4o.ext

你也许想知道为什么在 ObjectContainer 中只能看见很少 的方法,原因如下:db4o 接口提供了两个途径,分别在 com.db4o 和 com.db4o.ext 包中。这样做首先是为了让开发者能快速上手;其次为了让其他 产品能更容易的复制基本的 db4o 接口;开发者从这一点上也能看出 db4o 是相 当轻量级的。每个 com.db4o.ObjectContainer 对象也是 com.db4o.ext.ExtObjectContainer 对象。可以转换成 ExtObjectContainer 获 得更多高级特性。

com.db4o.config

com.db4o.config 包含了所有配置 db4o 所需的类。

com.db4o.query

com.db4o.query 包包含了构造“原生查询, NQ(Native Queries)”所需的 Predicate 类。NQ 是 db4o 最主要的查询接口。

db4o 提供两种运行模式,分别是本地模式和服务器模式。本地模式是指直接 在程序里打开 db4o 数据库文件进行操作:

ObjectContainer db = Db4o.openFile(“auto.yap”);

而服务器模式则是客户端通过 IP 地址、端口以及授权口令来访问服务器:

服务器端:

ObjectServer server=Db4o.openServer(“auto.yap”,1212);

server.grantAccess(“admin”,“123456”);

客户端:

ObjectContainer db=Db4o.openClient (“192.168.0.10”,1212,“admin”,“123456”);

两种方式都可以得到 ObjectContainer 实例,就目前 Java EE 应用环境来 看,服务器模式更有现实意义;而本地模式更适合于嵌入式应用。为了简化演示 ,本文在下面的例子都将采用本地模式。

在下面的例子里,我们都会用到下面两个对象: People 和 AutoInfo 对象 。

People 对象清单1:

清单1. People 对象

package bo;

public class People {

private java.lang.Integer _id;

private java.lang.String _name;

private java.lang.String _address;

private java.util.List _autoInfoList;

public java.lang.Integer getId() {

return _id;

}

public void setId(java.lang.Integer _id) {

this._id = _id;

}

public java.lang.String getName() {

return _name;

}

public void setName(java.lang.String _name) {

this._name = _name;

}

public java.lang.String getAddress() {

return _address;

}

public void setAddress(java.lang.String _address) {

this._address = _address;

}

public java.util.List getAutoInfoList() {

return this._autoInfoList;

}

public void addAutoInfo(AutoInfo _autoInfoList) {

if (null == this._autoInfoList)

this._autoInfoList = new java.util.ArrayList();

this._autoInfoList.add(_autoInfoList);

}

}

AutoInfo 对象清单2:

清单2. AutoInfo 对象

package bo;

public class AutoInfo{

private java.lang.Integer _id;

private java.lang.String _licensePlate;

private bo.People _ownerNo;

public java.lang.Integer getId () {

return _id;

}

public void setId (java.lang.Integer _id) {

this._id = _id;

}

public java.lang.String getLicensePlate () {

return _licensePlate;

}

public void setLicensePlate (java.lang.String _licensePlate) {

this._licensePlate = _licensePlate;

}

public bo.People getOwnerNo () {

return this._ownerNo;

}

public void setOwnerNo (bo.People _ownerNo) {

this._ownerNo = _ownerNo;

}

}

利用 set 方法把新对象存入 ObjectContainer,而对 ObjectContainer 中 已有对象进行 set 操作则是更新该对象。db4o 保存数据库很简单,下面就是一 个段完整的保存对象的代码:

AutoInfo 对象清单3:

清单3

package com;

import bo.AutoInfo;

import bo.People;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

public class DB4OTest{

public static void main(String[] args){

//打开数据库

ObjectContainer db = Db4o.openFile(“auto.yap”);

try{

//构造 People 对象

People peo = new People();

peo.setId(1);

peo.setAddress(“成都市”);

peo.setName(“张三”);

//构造 AutoInfo 对象

AutoInfo ai = new AutoInfo();

ai.setId(1);

ai.setLicensePlate(“川A00000”);

//设置 People 和 AutoInfo 的关系

ai.setOwnerNo(peo);

peo.addAutoInfo(ai);

//保存对象

db.set(peo);

}finally{

//关闭连接

db.close();

}

}

}

当我们运行上述代码,db4o 会自动创建“auto.yap”文件。让我们来看看到 底保存成功没有,打开 ObjectManager 工具,如图 1 所示。

图1. 对象数据库管理工具

“File”->“Open File”->选择刚才我们保存的“auto.yap”文件 (“auto.yap”文件可在项目的根目录下找到),最新的 ObjectManager 1.8 版本为我们提供了“Read Only”方式读取数据库文件,避免 ObjectManager 占 用数据库文件所导致的程序异常。

打开之后,如图 2 所示,刚才存贮的 People 对象已经在数据库中了,并且 还可以很直观的看到 AutoInfo 对象也放入了 ArrayList 中。这种可视化的对 象关系有利于我们对数据的理解,是传统 RDBMS 无法比拟的。有些开发者会说 ObjectManager 工具略显简单,这点我想随着 db4o 的不断发展会加入更多的特 性。在这个工具中,我们意外的发现了 Java 集合对象的踪影,db4o 把与 ArrayList 有直接关系的所有接口和父类都保存了,这样显得更直观,

在此,我保留了 _id 属性,这是因为通常在 Java EE 环境中,DAO 第一次 不是把整个对象都返回到表现层,而是只返回了“标题”、“发布时间”这些信 息(并隐式的返回id),接着 DAO 与数据库断开;要查看详情(比如文章内容 )就需要进行 findById 操作,这时 DAO 要再次与数据库交互,只有唯一标识 符才能正确地找到对象。这种懒加载方式也是很多书籍所推荐的。

回到本文的范例程序中,这个 _id 属性可由人工编码实现的“序列”进行赋 值,当然 db4o 也提供了内部标识符 Internal IDs,如图 2 中的 id=1669;以 及 UUIDs。

图2. 对象结构

查询数据库

和 RDBMS 一样,db4o 也有自己的查询语言,分别是 QBE(Query by Example)、NQ(Native Queries)、SODA(Simple Object Database Access) ,db4o 更推荐使用 NQ 进行查询。NQ 方式提供了非常强大的查询功能,支持原 生语言,也就意味着你可以使用 Java 来判断该对象是否符合条件,这是其他数 据库查询语言无法比拟的。在某些情况下, db4o 核心会将 NQ 翻译成 SODA 以 获得更高的性能。下面详细介绍一下这三种查询语言。

QBE(Query by Example)

QBE 规范可在这里下载。QBE 最初由 IBM 提出,同时业界也有许多和 QBE 兼容的接口,包括著名的 Paradox。有些系统,比如微软的 Access,它的基于 表单的查询也是受到了部分 QBE 思想的启发。在 db4o 中,用户可借用 QBE 快 速上手,可以很容易适应 db4o 存取数据的方式。

当利用 QBE 为 db4o 提供模板(example)对象时,db4o 将返回所有和非默 认值字段匹配的全部对象。内部是通过反射所有的字段和构造查询表达式(所有 非默认值字段结合”AND”表达式)来实现。

例如,利用 QBE 查找到车牌号为“川A00000”的车主姓名,这是一个级联查 询。清单4:

清单4

package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

public class DB4OTest{

public static void main(String[] args){

//打开数据库

ObjectContainer db = Db4o.openFile(“auto.yap”);

try{

//构造模板对象

AutoInfo ai = new AutoInfo();

ai.setLicensePlate(“川A00000”);

//查询对象

List list = db.get(ai);

for(int x = 0; x < list.size(); x++){

System.out.println(“车主姓名:”+list.get(x).getOwnerNo ().getName());

}

}finally{

//关闭连接

db.close();

}

}

}

但是 QBE 也有明显的限制:db4o 必须反射模板(example)对象的所有成员 ;无法执行更进一步的查询表达式(例如 AND、OR、NOT 等等);不能约束 0( 整型)、””(空字符串)或者 null(对象),因为这些都被认为是不受约束 的。要绕过这些限制,db4o 提供了 NQ(Native Queries)。

SODA(Simple Object Database Access)

SODA ,简单对象数据库访问,请查看官方站点,其中一位主要维护者是 Carl Rosenberger,Carl 正是 db4o 首席架构师。

SODA 就是一种与数据库通讯的对象 API。最终的目标是实现类型安全、对象 复用、最小的字符串使用、与编程语言无关等特性。SODA 是 db4o 最底层的查 询 API,目前 SODA 中使用字符串来定义字段,这样将不能实现类型安全也无法 在编译时检查代码,而且写起来较麻烦,当然要达到设计目标这个阶段是必须的 。大部分情况下 NQ(Native Queries)是很好的查询接口,不过遇到动态生成 查询的时候 SODA 就大有作为了。

通过 SODA 查找到车牌号为“川A00000”的车主姓名。清单5:

清单5

package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.query.Query;

public class DB4OTest{

public static void main(String[] args){

//打开数据库

ObjectContainer db = Db4o.openFile(“auto.yap”);

try{

//构造查询对象

Query query=db.query();

//设置被约束实例

query.constrain(AutoInfo.class);

//设置被约束实例的字段和约束条件

query.descend(“_licensePlate”).constrain(“川A00000”);

//查询对象

List list = query.execute();

for(int x = 0; x < list.size(); x++){

System.out.println(“车主姓名:”+list.get(x).getOwnerNo ().getName());

}

}finally{

//关闭连接

db.close();

}

}

}

通过 API,发现 Query 实例增加了 sortBy 按字段排序方法和 orderAscending正序、orderDescending 倒序排列方法,SODA 比 QBE 更进了一 步。

NQ(Native Queries)

精彩总是在最后出场,NQ 才是 db4o 查询方式中最精彩的地方!有没有想过 用你熟悉的的编程语言进行数据库查询呢?要是这样,你的查询代码将是 100% 的类型安全、100% 的编译时检查以及 100% 的可重构,很奇妙吧?NQ 可以做到 这些。

有两篇论文专门讲解了 NQ 的基本概念和设计思路,分别是 《Cook/Rosenberger,持久对象原生数据库查询语言》 和 《Cook/Rai,Safe Query Objects: Statically Typed Objects as Remotely Executable Queries 》。作为结果集的一部分,NQ 表达式必须返回 true 值来标记特定实例。如果 可能的话 db4o 将尝试优化 NQ 表达式,并依赖索引来运行表达式。

通过 NQ 查找到车牌号为“川A00000”的车主姓名。清单6:

清单6

package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.query.Predicate;

public class DB4OTest{

public static void main(String[] args){

//打开数据库

ObjectContainer db = Db4o.openFile(“auto.yap”);

try{

List list = db.query(new Predicate() {

public boolean match(AutoInfo ai) {

//这样才是类型安全的

return ai.getLicensePlate().equals(“川 A00000”);

}

});

for(int x = 0; x < list.size(); x++){

System.out.println(list.get(x).getOwnerNo().getName ());

}

}finally{

//关闭连接

db.close();

}

}

}

必须指出 NQ 的一个的问题是:在内部,db4o 设法把 NQ 转换成 SODA。但 并不是所有的查询表达式都可以成功转换。有些查询表达式的流向图 (flowgraph)非常难于分析。这种情况下,db4o 将不得不实例化一些持久对象 来真实地运行 NQ 表达式。

正在开发中的 NQ 查询优化器就可以化解这个障碍,它将分析 NQ 表达式的 每个部分,以确保最少量的实例化对象,以此提高性能。当然,优化器的不是灵 丹妙药,关键还需要自己多优化代码。

开发 Java EE 项目经常会用到分页,怎样用 NQ 实现呢?向数据库写入六条 记录。清单7:

清单7

package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.query.Predicate;

public class DB4OTest{

public static void main(String[] args){

//打开数据库

ObjectContainer db = Db4o.openFile(“auto.yap”);

try{

List list = db.query(new Predicate() {

public boolean match(AutoInfo ai) {

return true;

}

});

//记录总数

Integer count = list.size();

//每页两条,分三页

for(int x = 0; x < 3; x++){

System.out.println(“第”+x+“页:”+list.get (x*2).getLicensePlate());

System.out.println(“第”+x+“页:”+list.get (x*2+1).getLicensePlate());

}

}finally{

//关闭连接

db.close();

}

}

}

我们发现,在进行 NQ 查询时并没有加入任何条件(无条件返回 true),是 不是相当于遍历了整个数据库?db4o 的设计者早就想到了这个问题,当 db.query() 执行完毕返回 list 实例的时候,db4o 只是与数据库同步取出内部 IDs 而已,并没有把所有的 AutoInfo 对象全部取出,只有在 list.get (x*2).getLicensePlate() 之后才会去根据 IDs 取出记录。所以不必担心性能 问题。

结论

基于纯面向对象的海战模型库研究 篇6

随着计算机仿真技术的飞速发展,对海军作战仿真模型研究的日益深入,我军广大科研人员研制开发了大量的作战仿真模型,随之而来,模型开发费用、开发效率、开发质量、开发可信性及可靠性的控制等变得越来越困难了。对相同或相似的军事问题,研发人员做着大量重复的工作,多数研制开发都是从零开始,无法或很少重用已有的成果,模型的研制开发始终不能摆脱这种手工作坊的研发方式。为了更加有效地对已有海战模型进行管理和重用,同时也为了加快建模速度,需要建立一个模型库管理系统来对海战模型进行管理,军内外已对此类问题进行了大量的研究工作,但多数研究的可操作性小,问题没有得到很好的解决。考虑到数据库及其管理系统技术中的完美重用结构,我们决定借用数据库的重用思想,来建立海战模型库管理系统,然而对于与现实世界紧密联系的模型,目前在数据库领域占据绝对优势的关系数据库则显得无能为力,本文通过使用纯面向对象数据库及其管理技术建立海战模型库管理系统,以求解决海战模型的表示、存储、使用和运行等问题。

二、纯面向对象数据库技术

2.1面向对象数据库

面向对象是一种认识方法学,也是一种新的程序设计方法学。把面向对象的方法和数据库技术结合起来可以使数据库系统的分析、设计最大程度地与人们对客观世界的认识相一致。20世纪80年代已开始出现一些面向对象数据库的商品和许多正在研究的面向对象数据库。多数这样的面向对象数据库被用于基本设计学科和工程应用领域。与关系数据库不同,面向对象数据库不因数据类型的增加而降低处理效率。

面向对象数据库从面向程序设计语言的扩充着手使之成为基于面向对象程序设计语言的面向对象数据库。例如:ONTOS、ORION等,它们均是C++的扩充,熟悉C++的人均能很方便地掌握并使用这类数据库。

2.2纯面向对象数据库的特点

本文使用的面向对象数据库是美国加州硅谷的开源面向对象数据库公司db4objects研制的db4o,它是纯面向对象的数据库,具有如下良好性能:

(1)支持面向对象数据模型

面向对象数据库系统支持面向对象数据模型,简称OO(Orient Object)模型。也就是说,一个面向对象数据库系统是一个持久的、可共享的对象库存储和管理者;而一个对象库是由一个OO模型所定义的对象的集合体。面向对象数据库模式是类的集合。面向对象的数据模型提供了一种类层次结构。在面向对象数据库模式中,一组类可以形成一个类层次。一个面向对象数据库可能有多个类层次。在一个类层次中,一个类继承其所有超类的全部属性、方法和消息。

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

关系数据库是一种很灵活而且使用简便的数据库。但是,它不能表示复杂的对象,也不具备定义复杂操作的能力。面向对象的数据模型由于可以表示复杂的数据类型,它能适用于一些关系模型不能适用的复杂应用领域,如一些要表示抽象的数据类型像海图、水源、建筑物等的领域。而且它对实体的描述比关系模型更加现实、自然,更加直观。因此,面向对象的数据模型更适合描述海战模型。

(2)支持对象嵌套

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

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

(3)真正的原生查询

db4o是真正的原生面向对象数据库,直接使用编程语言来操作数据库。程序员无需进行OR映射来存储对象,大大节省了程序员在存储数据的开发时间,同时带来高效的数据查询,根据官方公布的基准测试数据,db4o比采用Hibernate/MySQL方案在某些测试线路上速度高出44倍之多,并且安装简单,仅仅需要400Kb左右的jar或dll库文件。

db4o能实现真正的原生查询,查询语句用实现语言(Java或C#)完全表达,并完全遵循实现语言的语义,db4o查询语句能运行在自己的实现语言中,允许未经优化执行普通集合而不用自定义预处理。db4o查询还实现了100%的类型安全查询,能完全获取现代IDE的特性,比如语法检测、类型检测、重构等。

三、纯面向对象模型库管理系统设计

3.1模型的原子化处理

海战模型是研究海军军事问题模型。能否充分有效地运用、组织和管理好众多海战模型,也是能否充分提高海战决策高效、科学的关键,也是构造可重用海战模型结构的关键因素。而模型结构是解决这些关键问题的基础,通过对海战的各类模型进行深入研究发现:无论哪类模型都是用某些特定的方法对描述问题的一组特征数据进行处理,给出有价值的处理结果,提供给决策者并辅助其进行有效的决策,从而海战模型可以表述为:描述或解决某个问题所需的一组特征数据与解决这个问题所需的操作或方法的结合。由于此模型概念具有对象的特征,很容易以OOP技术进行实现,称之为模型对象。

为了能够实现对海战模型的高效管理,需要对模型进行原子化处理,原子化包括层次化和组件化。层次化要求对模型进行详细的分类,组件化要求将模型最终划分为不需要进一步分解的原子模型,然后在此基础上组合成用户所需要的组合模型,具体步骤如下:

首先对模型的类型进行层次化的分类,将海战模型根据应用层次进行进一步的分类,然后在类型分类的基础上可以提出具体可应用的模型,接着对应用模型进一步分解,最终得到不能够或不必要进一步分解的模型称为原子模型。这样就将模型分为了三个层次,分别为模型类型层、应用模型层和原子模型层,便于存储管理。对于单个模型,本系统采用面向对象的模型表示。

模型可以表示成一个三元组的形式:{M_id,M_attribute,M_operation}。

其中M_id是模型的标识符,相当于身份确认;

M_attribute用于描述模型的各类属性。对于组合模型还需要增加两类属性(子模型列表和子模型参数信息)。子模型列表包括组成该组合模型的各子模型的顺序信息,子模型参数信息是组成组合模型时子模型的接口信息;

M_operation描述模型的操作,包括模型的集成、调用、运行等操作。之所以采用这个方法是因为很多大型装备有共同之处,可以用少数子模型组合出大量整体模型,减少了库中的储存量。本文是以航空兵的装备为主要研究对象,例如实体可分为武器、飞机等。在飞机中的模型有歼击机、侦察机、轰炸机等。歼击机模型与轰炸机模型可以通用一种动力系统,所以存储时只用存储动力系统和两个武器系统。行为有机动行为、起飞行为、降落、发射导弹等行为。

3.2模型重构的实现

模型重构是指一些简单的子模型组合成所需的复杂模型。这个过程是由模型管理系统通过对模型进行组合分解完成的。接口间的关系是模型进行组合的依据,是模型组合信息的重要内容,通过关系的改变可以完成对模型的组合。组合之后的新模型要进行测试验证。功能属性符合要求、运行正常的模型就可以注册运行。重构技术减少了库中模型的存储量还可以让战场仿真中的指挥员查看装备的某些部分,即子模型的情况。

本文的模型定义将明确地区分属性与方法,例如,某舰艇对空防御模型由描述舰艇的实体模型(描述舰艇的基本属性,如物理属性、动力性能、装备配载等)和一系列动作模型(预警探测、机动行为、对空抗击、电子干扰等)组成。其中既有元模型也有组合模型,如图1所示。

3.3模型库接口设计

模型库管理系统中,模型库与其他系统紧密联系,需要建立接口关系,以便接收到访问请求,调用请求,进行模型传输等。接口类型有:模型库与内部数据库的接口,模型库与外部系统的接口。对于不同的系统接口设计不同。接口关系在模型库系统中起着重要的作用,只有通过这些接口模型库系统才能够与其它模拟系统进行交互,没有这些接口,模型库管理系统将无法提供服务。对于不同的模拟系统,由于服务的要求有所不同,所以接口的设计也会不同。其与外界建立联系的过程大致如下所述:应用系统调用模型库中模型时,向模型库管理系统发出请求命令,在模型库管理系统接收到应用系统的请求后,向内部数据库和实体模型库发送相应命令,实体模型库收到命令后在库中进行相应配置,然后通过接口向应用系统发送模型,向应用系统发送与最终输出模型相关的数据,应用系统在接收到模型和与模型相关的数据后,向模型库管理系统发送一个确认。上述过程是由模型库提供的接口函数实现的。接口函数又可分为与内部数据库接口的数据接口函数和与实体模型库接口的模型接口函数两种,是通过链接动态链接库完成。

例如:实现接口调用的类class CDbModel有一个函数GetComponent功能是得到实体的一部分,函数int GetModelIndex功能得到实体模型号

3.4模型存储设计

模型库是系统的核心部分,在逻辑上模型库是各种模型的集合,在内容上则由许多概念模型和仿真程序模型组成。根据本系统的需要,模型的存储采用“文件+模型字典”的方式,即模型主要以文件形式存储,但把模型的主要信息抽取出来放入模型字典中,通过模型字典对模型库中的模型进行管理。

模型库中存储的文件包括文档和代码文件,代码文件由源码库、目标代码库两部分组成。源码库存储的内容包括模型详细文档、模型程序源码文件;目标代码库存储编译完成的动态链接库、COM组件文件和可执行文件等。

模型字典用来存放有关模型的描述信息(如功能、性能、限制、约束、参数等)和模型的数据抽象。这里所谓模型的数据抽象是模型关于数据存取的说明,这部分是系统管理模块对数据库存取数据的需要。模型字典中有关模型的详细说明可作为用户和系统人员查询模型库内容之用,也是模型查询的数据来源。

此外,模型字典中有关模型的详细说明可作为用户和系统人员查询模型库内容之用,也是模型查询的数据来源。

3.5模型字典设计

模型字典是模型库管理系统的核心,模型库管理系统通过模型字典有效地组织和管理各种模型元数据以及其他相关文件,从而实现对模型资源的有效管理。在本系统中,设计的模型字典主要包括如下信息:

(1)模型名、模型类型、模型原理、适用条件、使用方法、所属模型库、开发信息、使用信息、相关模型;

(2)源程序文件、中间目标文件、可执行文件、实现语言、编译系统;

(3)函数编号、函数名、函数功能、函数类型、实际变量数;

(4)变量序号、变量名、变量含义、变量类型。

模型库有关文献讨论了基于关系数据库的模型库管理系统,提出用关系数据库进行管理模型,考虑到模型字典的内容和形式,模型字典作为模型描述信息的特殊数据库,用面向对象数据库进行管理无疑是非常合适的,事实上模型库管理系统是通过以上形式的模型字典对各种模型元数据和相关文件进行有效的组织和管理的。

四、模型库管理系统实现

我们在Windows xp操作系统环境下,使用Microsoft Visual C#和DB4O作为开发工具,研制开发了海战模型库管理系统,它由模型库服务端程序和客户端程序两部分组成。

模型库服务端程序主要实现模型的维护、调用、查询、运行等的集中控制,由存取管理、运行管理两大模块组成。存取管理模块实现对模型的组织、入库、更新、删除、检索、验证等,而运行管理模块则实现对模型的调用、运行等的功能。模型服务器以科学、合理、切实可行的方式完成对本地或异地的各模型所在的服务器及服务器中所具有的模型的注册、维护、组织、管理、调度、使用与控制,同时在为用户提供服务过程中兼顾模型封闭运行和专家参与两个方面。

模型库客户端程序主要实现用户输入界面和结果信息的输出,是用户和模型库交流的窗口。

海战模型库管理系统的信息流程见图2。

五、结束语

面向对象数据库系统构想 篇7

关键词:数据库,面向对象,数据库系统

随着应用的扩展, 特别是诸如人工智能等复杂应用的需要, 关系型数据库已经显得力不从心, 人们迫切希望建立一种新的数据库解决方案来适应这些复杂需求。面向对象方法是一种崭新的思维方法, 它是把程序看作是相互协作而又彼此独立的对象的集合。由于对象的独立封装, 模块的可构造性、可扩充性、可重用性也大大加强, 从而面向对象的软件工程能够胜任当今大规模复杂、易变软件系统开发应用的要求。

1 面向对象数据库模型

1.1 核心概念

1.1.1 对象与对象标识

对象, 是现实世界中实体的抽象, 是数据和操作的集合, 是持久化到数据库中的最小的存储单位。

这里的对象其实与一般的面向对象程序设计语言中的对象并没有很大不同。但是, 这里的对象是持久性的。数据库中的对象是数据记录的最小单位, 也就是说, 数据库中至少存在一个对象才有意义。当然, 对象中还可以有对象的属性, 方法等, 但一个对象必须是完整的。

对象标识, 指的是唯一标定一个对象的标志, 一个对象对应一个标识符。在现实世界中, 对象可能会随着时间的推移而发生改变, 但对象标识不应该改变, 因此, 对象标识自对象生成后就不应该再改变, 否则无法使用对象标识唯一确定一个对象。即使两个对象的属性和方法以及状态完全一致, 只要其对象标识不同, 则两者是不同的对象。

对象标识一般有以下3种实现方式:

1) 值标识, 使用对象的某一属性作为其对象标识。

2) 名标识, 使用一个名字来表示标识。

3) 内标识, 以上两种方式是由用户建立的, 而这种方式是由系统内部建立的, 不具有任何实际含义, 且只有系统才可以“观察”此类对象标识。

另外, 在对象数据库中, 标识是永久不变的, 即具有永久持久性, 这和面向对象程序中的对象标识不一样, 面向对象程序中的对象标识只具有对象内持久性。

1.1.2 封装

抽象是对象的外部界面与内部实现之间实行清晰隔离的一种抽象, 外部与对象的通信只能通过消息来实现。在对象数据库中, 表现为对象的私有和保护成员只能通过其方法来查询得到, 而公有成员可以直接查询。这种方式的优点是对象被封装成了自含的单元, 对象只接受已定义好的操作, 其他对象不能直接访问对象的非公有成员。缺点是丧失了传统关系数据库中进行即席的、按内容的查询, 这就不够方便灵活了, 因此, 需要做一些改进和妥协。

1.1.3 类

共享同一属性和方法集的所有对象构成的对象类, 一个对象是一个类的实例。在数据库中是一种抽象的数据类型, 相当于关系数据库中的一张表。

1.1.4 类层次

这里涉及到继承的概念, 即类可以继承类, 从而具有与父类的所有符合条件的属性和方法。这是关系数据库中所没有的。

1.1.5 消息

指的是对象的方法调用。通过对象的方法调用可以访问对象的属性数据和执行业务逻辑。这也是关系数据库中没有的。

1.2 对象与对象标识

1.2.1 对象结构

包括两部分, 一个是属性集合;另一个是方法集合。属性集合将用于存储数据, 方法集合将用于操作数据。属性集合即是对象的成员变量, 其中又可以分为公有类型的成员、私有类型的成员和保护类型的成员。公有类型的成员可以直接使用查询语句进行查询, 保护型成员可以在该类的子类的对象中直接访问, 私有类型的成员只能在本类的对象中访问, 外部对象只能通过实现定义好的方法进行访问。如果没有事先定义好的方法, 则外部将无法访问这些变量的值, 这就实现了对象的封装性。在OODB数据库中, 对象结构同样分成这两种集合。

1.2.2 对象标识

表示在一个数据库中一个对象仅有一个唯一不变的标识就是对象标识。这个标识用来精确定位一个对象。在OODB数据库中, 对象标识是唯一标定这一持久性存储单元的唯一依据。其他对象或方法访问本对象的属性和方法必须先找到该对象的对象标识, 否则无法访问。

1.2.3 封装

即将一个对象的属性和方法封装在对象内部, 外部只能通过对象提供的外部接口进行访问。这样就提高了数据的安全性和代码的重用性。

1.3 类与类层次

相似对象的集合称为类, 在数据库中表现为面向对象数据库模式的集合, 它规定了该类的对象的数据结构规则和操作规则。在面向对象数据库中, 一个类相当于关系数据库中的一张表。它同样有字段和属性, 甚至还有关系数据库表所没有的方法。这种思路可以在面向对象数据库中实现复杂的逻辑。

类层次表现在继承上, 即父类和子类的层级关系。这是为了多态和数据共享的目的。这种思路可以象Java中那样使用接口和基类来完成设计。

1.4 继承

就像类层次中所说的, 继承是为了多态和数据共享的目的, 也是面向对象代码重用的重要机制之一。

1.5 滞后联编

即实现了重载的效果, OODBMS不能在编译时把操作名联编到程序上, 必须在运行时根据需要进行抉择。

1.6 对象的嵌套

是一种设计模式组合。将多个类的对象加人到一个类的属性中, 使之实现复杂的功能。

2 面向对象数据库语言

OODB语言用于描述面向对象数据库模式, 说明并操作类定义和对象实例。OODB语言主要包括对象定义语言 (ODL) 和对象操作语言 (OML) , 其中对象操作语言又包括一个重要子集—对象查询语言 (OQL) 。OODB语言一般应该具备下列功能。

2.1 类的定义与操作

包括定义、生成、存取、修改和撤销类。其中类的定义包括定义类的属性, 操作特征、继承性与约束等。

2.2 操作/方法的定义

面向对象数据库语言可以用来定义操作/方法, 在操作实现中, 语言的命令可用于操作对象局部数据结构。

2.3 对象的查询

OODB语言可以用于操作 (包括生成、存取、修改与删除) 实例对象。对于对象的存取—查询部分, OODB语言可以直接查询对象公有成员而不必向每一个对象逐个发送消息。而对于非公有成员, 则只能通过发送消息来实现存取、修改与删除。通过发送消息的查询效率可能会很低, 因此, 对于一些经常要查询的数据应该尽量定义为公有类型。

3 面向对象数据库模式

3.1 模式的一致性

(1) 唯一性约束:

即同一模式中所有类的名字必须唯一、类中属性名和方法名必须唯一。

(2) 存在性约束:

每个被引用的类必须在模式中定义、某操作代码中调用的操作不需给出说明、每一个说明的操作必须存在一个现实程序。

(3) 子类型约束:

子类和父类不能有环、不能有多继承、单一父类必须加以说明。

3.2 模式演进操作

主要包括以下几个部分:

(1) 功类集的改变;

(2) 已有类的成分的改变;

(3) 子类/父类联系的改变。

面向对象数据库是数据库发展的方向。我国目前在操作系统和数据库系统方面是严重的依赖于他国的, 特别是在面向对象数据库领域几乎是一个空白。

参考文献

[1]布莱特, 皮瑞拉尼.面向对象的建模与设计在数据库中的应用[M].宋今, 赵丰年译.北京理工大学出版社, 2001.

[2]布奇.面向对象分析与设计[M].王海鹏, 潘加宇译.人民邮电出版社, 2009.

面向对象数据模型 篇8

关键词:面向对象技术,工作流程模型,应用

1. 面向对象的设计方法

1.1 面向对象方法的基本概念

面向对象方法起源于上世纪60年代后期。近十年来,国内外面向对象方法的研究相当活跃,遍及计算机软硬件的各个领域。面向对象作为上世纪90年代软件发展的主流,已成为软件开发的基本技术。有关概念如下[1,2,3,4,5]。

1.1.1 对象(Object)

自然实体对象在计算机系统中的内部表示被称为软件对象,简称对象。

1.1.2类 (Class)

具有相同属性和允许操作的一组对象的一般描述,称为类。类给出同类的一组对象的定义,同一类中的对象共享公共语义,但可以具有不同属性值从而体现其特征。

1.1.3 方法(Method)

定义在对象属性上的一组操作称为方法。方法体现了对象的行为能力。对象向外界提供访问的方法接口,而方法的实现则封装在对象中。

1.1.4 消息(Message)

对象间的相互作用是通过消息发送来实现的。消息是对象能接受的某种信号,由发送对象向接受对象发出的调用某个对象操作的请求,必要时还包括适当的参数传递。接受对象一旦收到请求消息后,就激活相应的操作来对消息进行响应。

1.1.5 属性(Attribute)

属性是用来表征对象的性质和状态的数据。属性可以是系统或用户定义的数据类型,也可以是一个抽象的数据类型。复杂对象可以包含若干属性,每个属性同样可以作为一个对象,又包含若干个属性。

1.2 对象特性

通俗地讲,面向对象方法就是按照人们认识世界和改造世界的习惯方法对现实世界客观事物进行最自然、最有效的抽象和表达。对象具有三大特性[6]。

1.2.1 封装性(Encapsulation)

封装就是将一个实体的属性(数据信息)和操作(程序代码)集成为一个整体使之成为对象模型。封装性将其他对象可访问的外部内容与对象内部细节分开。其中对象内部的数据成员对外是不可见的,只有通过对象的方法才能实施对象数据的操作。

1.2.2 继承性(Inheritance)

一个对象类如果是另一个更一般的对象类的特殊情形,这个一般对象类就是特殊对象类的父类或超类(SuperClass),而特殊对象类是这一般对象类的子类(SubClass)。子类继承了父类的所有属性和操作,同时子类还可以定义自己特有的属性和操作。如图1所示。

因为对象具有继承性这个特性,可以通过继承的方法进行系统扩充而不用重新进行系统设计。

1.2.3 多态性(Polymorphism)

多态性指的是,同一个函数名对应于不同对象有着不同的对象行为。另外,当子类与父类的行为不一样时,可以在子类对象中重新定义操作。父类对象中的操作称为虚拟函数。因此,多态性有时也称为可重载性。

1.3 面向对象方法设计的一般过程

面向对象的设计方法主要包括面向对象分析和面向对象设计两部分。具体包括以下几个阶段[7]。

1.3.1分析。该阶段涉及对应用域的理解和求解域的建立。分析阶段的输入是问题的陈述,分析结果是对象原型。对象原型概括了对象的三个因素:对象的属性、操作和对象及对象之间的关联。

1.3.2系统设计。确定整个系统的体系结构。以对象原型为指导,把目标系统细分为多个子系统,对对象原型间的相互通讯、数据存储与实现制订全面的策略。

1.3.3 对象设计。在分析的基础上考虑和细化对象原型,而生成一个实际设计。

1.3.4 实现。对象设计中的对象和关联最终用具体的程序设计语言、数据库或硬件实施实现。

1.4 面向对象方法的特点

面向对象的方法不同于传统的软件开发方法,其特点如下。

1.4.1开发重心转移到分析阶段。面向对象方法强调对问题的分析,分析和设计阶段虽然花费较多的时间,但后期快速简单的实现将补偿这种损失,并且设计结果更为清晰和灵活,使未来的修改更容易实现。

1.4.2分析阶段所得到的对象模型也适宜于设计和实现阶段。由于各阶段的表示符是统一的,整个开发过程都是相互吻合的。另外,实际开发过程是多次反复的,可以不断使用和扩充这些对象,这就减少了不一致,且减少了出错的可能性。

1.4.3强调数据结构而不强调功能。带有公共接口的封装对象隐藏了自身所有的内部实现细节,不容易受外部变化的影响。与传统的面向功能的方法比较起来,在涉及需求变化时,使用面向对象的方法设计出来的系统更为稳定。

2. 面向对象技术在工作流程模型建立过程中的应用

2.1 工作流程模型中的对象分析

工作流程模型用于把企业的业务处理流程转换成计算机可以处理的形式。企业的业务流程是由一系列的活动环节通过一定的流转规则结合而成,每个活动环节完成某一特定的功能(如校对、审核等),而流转规则则体现了企业的业务逻辑。为了把现实中的业务处理问题用计算机来处理,必须构造能够完成工作流程特定要求的活动节点及节点之间具有一定方向的联系弧。活动节点通过其功能函数完成任务内容,通过变量来体现活动的处理内容与要求,并通过后置函数来决定其输出逻辑。联系弧通过对连接节点的引用和对流程控制参数的传递来实现活动的导航。在工作流程模型中存在五种活动类型:开始活动、结束活动、任务活动、条件活动和同步活动。

基于上述考虑,我们可以在工作流程建模过程中抽取三个最基本的对象类:流程类、活动类和联系类。

2.2 工作流程模型中对象的建立

整个工作流程模型中的对象类及其之间的关系如图2所示:

图2中流程类和活动类之间是一对多的关系,即一个工作流程可以有多个活动组成:流程类与联系类之间也是一对多的关系,表示一个工作流程可以包含多个联系弧。在图中还有一个基类,所有其它对象类都是从基类继承而得到的。

(1)基类(BaseObject Class)

说明:方法Constructor()用于对象类的初始化,如申请资源、发送开始消息等;方法Destructor()用于释放对象占用的资源,发送完成或失败消息等。

(2)流程类(Flow Class)

说明:方法Flow Start()、Flow Stop()、Flow Pause()用于工作流程的监控;方法Flowes_ExceptionDepose()用于流程运行发生异常时的处理。

(3)活动类(Activity Class)

说明:方法Activity Start(), Activity Stop(), Activity Pause()用于活动的动态监控;方法Activity_Depose()与活动的功能函数相对应,完成特定的任务;方法Activity Output()与活动的后继函数相对应,完成令牌的传递;方法Activity_ExceptionDepose()用于活动节点发生异常情况时的处理。

(4)联系类(Connection Class)

说明:方法Connection SetNode()用于工作流程的监控,根据参数不同,可以分别重新设置联系弧的起节点和终节点。

(5)开始活动类(BeginActivity Class)

说明:结束活动只有输入令牌盒。

(7)任务活动类(TaskActivity Class)

说明:任务活动一般需要人员的参与,其实际开始日期和完成日期与要求开始日期和结束日期可能不符,任务活动必具有上下游活动节点。

(8)条件活动类(ConditonActivity Class)

说明:根据条件活动的条件取值及与其相联系的有条件联系弧可决定下一阶段工作流程走向。

(9)同步活动类(SynActivity Class)

(10)空活动类(EmptyActivity Class)

(11)子过程活动类(SonActivity Class)

(12)有条件联系弧类(ConditionalConnection Class)

说明:属性ConditionalConnection_Type用于表示联系弧的类型,属性ConditionalConnection_Value用于表示工作流程通过该联系弧时的条件取值。

(13)无条件联系弧类(unConditionalConnection Class)

(14)数据联系弧类(DataConnection Class)

3. 结语

面向对象方法将现实世界中的事物直接映射到模型世界中的对象,模型反映的是物质的存在结构,而不是外在的功能结构,因此具有良好的柔性和可扩展性。本文通过面向对象的方法对工作流程模型进行了分析,并建立了工作流程模型中的对象类,为此后工作流程建模过程的实现做了准备。

参考文献

[1]王少锋.面向对象技术UML教程.北京:清华大学出版社, 2003:6-10.

[2]C.Thomas Wu著.侯国峰, 李湘, 张迪译.面向对象程序设计导论.北京:电子工业出版社, 2001:11-21.

[3]刘建生, 廖列法, 吴南萍.JAVA与面向对象程序设计导论.北京:北京希望电子出版社, 2004, 60-111.

[4]童秉枢, 李建明.产品数据管理 (PDM) 技术.北京:清华大学出版社, 2000:1-227.

本体在面向对象模型中的推理应用 篇9

关键词:面向对象,本体,统一建模语言,描述逻辑,推理

为了更好地使用UML描述对象模型,目前,已经开发出许多开发工具(CASE tools),比如,Rational Rose,Together,Poseidon,Argo UML等等。虽然面向对象模型的开发工具能为设计开发人员提供友好的图形化编辑环境,有助于提高其设计效率,但是,这些工具不具备自动推理检测对象模型语义的能力。由于开发人员和用户的专业知识背景不同,当进行软件分析设计时,往往会造成软件的不一致性问题。这将会造成所开发的软件延期。

学者们提出了许多软件工程的形式化方法以提高软件系统的正确性和可靠性。形式化方法是基于严密的、数学上的形式机制的系统研究方法。软件工程的形式化方法涵盖了软件开发过程中规范定义、设计、实现和验证的系统化方法。当前的软件工程形式化方法主要包括:Z语言、Object-Z语言、COOZ语言、B语言等。然而,这些形式化方法也有缺点:大多数形式化的规格说明主要关注于系统的功能和数据,而问题的时序、控制和行为等方面的需求却更难于表示。

与上述方法不同,本文提出了将本体应用于面向对象模型进行推理检测。该方法首先建立面向对象模型向本体模型的转换关系,利用它所具有的可判定推理能力检查面向对象模型中的不一致性问题,以此来提高开发软件的工作效率。

1 面向对象模型的基本知识

面向对象技术提供了一种新的认知和知识表示世界的思想和方法,它对计算机工业的影响是深远的。计算机从业人士利用它提出了面向对象的分析设计方法、计算机程序设计语言、面向对象的软件设计方法、面向对象的数据库等。同时面向对象技术为软件工业实现工程化提供了强有力的支持,正是面向对象技术造就了架构、统一建模语言(UML)、框架、模式、组件、构件、中间件等概念。面向对象的基本思想是封装和可扩展性,主要通过封装、继承和多态等机制来构造系统。一个对象模型主要包含四种组件(Components):对象/类、属性、方法/操作/函数、关系。

统一建模语言UML(Unified Modeling Language)是OMG(Object Management Group)组织提出的标准的对象建模语言,它通过定义的多种图形模型元素描述系统分析和设计的结果,主要针对大型、复杂系统的建模。UML用图形符号描述模型,用模型来表示软件系统的结构(或静态特征)以及行为(或动态特征)。总体上可以把这些图形分为两类:一类是结构图(Structure Diagram),主要用来描述静态模型,包括类图、对象图、复合结构图、包图、构件图和部署图;一类是行为图(Behavior Diagram),主要用来描述动态模型,包括用案图、活动图、状态机图、顺序图、通信图、定时图、交互概观图。同时,UML提供了几种扩展机制,以便建模者在不改变基本建模语言的情况下做一些通用的扩展。扩展机制主要包括约束(Constraint)、标记值(Tagged Value)和衍型(Stereotype)。

2 本体

古希腊哲学以探讨万物本原为开端,提出了本体这个概念,以研究这个世界上什么是存在以及如何存在的。计算机科学中的本体源于哲学,它是一种描述相关领域概念及其概念之间关系的模型,自身可以具备推理能力。Borst Pim等在前人本体定义的基础上进行了深入的研究,认为本体是共享概念模型的明确的形式化规范说明[1]。这包含4层含义[2]:概念模型(conceptualization)、明确(explicit)、形式化(formal)和共享(share)。本体所表达的是概念及概念之间的关系。Perez等认为本体可以按分类法来组织,他归纳出表示本体的5个基本建模元语(Modeling Primitive)。这些原语分别为:类(classes),关系(relations),函数(functions),公理(axioms)和实例(instances)。通常也把classes写成concepts。

目前经常使用的本体表示语言大都以框架模型、谓词逻辑或描述逻辑为基础,最具有代表性的语言包括Ontolingua、Cycl、Loom、Flogic;还有一些本体语言是以描述逻辑为基础,如KL-ONE等;不少学者在进行语义Web方面的研究时,相应地开发了不少本体语言,如XOL、OIL、DAML、OWL等;另外还有基于图的本体表示方法,如CG等。本体表示语言的逻辑基础主要是谓词逻辑和描述逻辑。但是一阶谓词逻辑是不可判定性的,而描述逻辑实际上是一阶谓词逻辑的一个子集,它满足可判定要求。

依据Gruber[3]给出的5条设计本体的基本原则(清晰性和客观性、完整性、一致性、最大单调可扩展性、最小本体承诺和最小编码偏好),许多研究者在实践中都提出了自己的构建本体的方法。这些方法主要有:Berneras方法、Enterprise法、TOVE法、Methontology方法、SENSUS法、IDEF-5方法以及七步法。此外,如何自动或半自动地构建本体是当前的研究热点,重用已有的本体构建新领域本体也是提高本体构建效率的一个有效途径。

3 对象模型与本体的相似性

虽然两种模型在建模方面各有侧重,但是,他们存在着许多相似之处。尽管一些文献中给出了两种模型的比较[4],然而,这些比较并不是详细全面的。本文在前人的基础上进行了分析总结,并给出了更详细的说明。二者的相同点主要表现在以下几个方面:1)二者都强调重用或共享。面向对象的模型采用继承来支持重用;本体模型本身即为建立一个无二义性的知识模型以便提供系统进行知识共享和互操作,并且,构建本体时,也强调重用已存在的本体以节省开发代价;2)二者都可以使用迭代方法进行建模;3)二者都能描述静态模型。面向对象模型主要利用类、对象来描述静态模型,而本体模型主要通过建立领域本体来描述领域的静态概念;并且,两者都是表达现实世界中可以用来处理的概念;二都建立在类/概念和关系之上,比如子类和聚合关系等;4)二者都能描述动态模型。面向对象的模型主要通过事件、状态、操作和方法来描述动态模型,而本体主要通过建立任务本体、动态本体来描述动态知识。此外,二者都具有可扩展性。

UML和DLs分别是面向对象模型和本体模型的表示语言。同样,两者也具有相同点:⑴二者都能描述静态知识和动态知识。UML主要通过结构图(Structure Diagram)来描述静态模型;描述逻辑主要通过ALC、ALCN、SHI、SHIQ(D)等描述静态知识。UML主要通过行为图(Behavior Diagram)来描述动态模型;而描述逻辑主要通过扩展后的动态描述逻辑和时态描述逻辑来描述动态知识。⑵两者都支持扩展机制。UML提供了几种扩展机制,包括约束(Constraint)、标记值(Tagged Value)和衍型(Stereotype);描述逻辑扩展了新的构造算子(Constructor)以增强其表达能力。

面向对象模型与本体模型及其描述语言有很强的互补性,面向对象模型直观,便于开发者之间相互沟通和交流,而本体更能有利于提供有效的推理服务。

4 基于本体的面向对象模型的推理

本体的推理主要可以归结为:可满足性(satisfiability)检测、包含(subsumption)检测、实例(instance checking)检测、协调性(一致性,consistency)检测、可判定性和计算复杂性等。其中,可满足性检测、包含检测、实例检测和协调性检测之间是可以相互转化的。都可以转换为概念的可满足性检测,并利用Tableau算法进行推理。对于一个概念C,如果存在一个解释I使得CI是非空的,则称概念C是可满足的,否则称概念C是不可满足的。检测一个概念C的可满足性实际上就是看是否有解释使得这个概念成立。如:Man Woman就是不满足的。也就是说,如果概念中存在着冲突(clash),那么这个概念就是不满足的。Tableau算法的基本思想即是检测一个概念中是否含有冲突。有关Tableau算法的论述可参考文献[5]。

5 结论

形式化的软件开发,就是用形式化的语言来描述软件需求和特征,并且通过推理验证来保证最终的软件产品是否满足这些需求和具备这些特征。这样的验证当然得建立在严格的语法语义的基础之上的。为了能更好地检查面向对象模型中可能隐藏的不一致性等问题,本文提出了把本体应用于对象模型进行推理的方法,该方法能够将对象模型转换为本体模型,借助于其推理能力以便促进软件的开发效率。

参考文献

[1]Borst P,Akkermans H.An Ontology Approach to Product Disassembly[M].EKAW1997,Sant Feliu de Gu5xols,1997:15-19.

[2]Studer R,Benjamins V R,Fensel D.Knowledge Engineering[J].Principles and Methods.Data and Knowledge Engineering,1998,25(1-2):161-197.

[3]Gruber T R.Towards principles for the design of ontologies used for knowledge sharing[J].International Journal of Human-Computer Studies,43:907-928,1995.

[4]Dencho N.Batanov and Waralak Vongdoiwang.Using Ontologies to Create Object Model for Object-Oriented Software Engineering[C].In:Sharman,Raj,et al.ONTOLOGIES:A Handbook of Principles,Concepts and Applications in Information Systems,chapter16.New York:Springer,2007.

面向对象的数据库技术研究 篇10

随着应用的日趋复杂和智能化,传统数据库的缺点一点点暴露出来,人们迫切希望产生一种新的数据库解决方案来适应这些复杂需求。一种新的解决方案呼之欲出。而这个解决方案极有可能就是面向对象数据库技术。面向对象数据库的技术机理并不高深,但它的设计思想却极有价值。在传统的面向对象应用开发中,由于传统的关系数据库开发风格完全不同于面向对象风格,使得许多程序员难以从复杂的SQL编程中解脱出来(尽管已经有一些成熟的ORM技术框架,如Hibernate,但程序员仍需要做大量的数据库代码工作),从而也无法从实质上提高工作效率。

1 面向对象数据库概述

面向对象数据库系统(OODBS)首先是一个数据库系统,即系统应具备数据库系统的处理能力,其次它也是一个面向对象系统,包含面向对象的概念和方法。因此,可以用下面公式来定义面向对象的数据库系统:

面向对象的数据库系统=数据库能力+面向对象系统。

面向对象数据库系统是为了满足新的数据库应用需要而产生的新一代数据库系统。在数据库中提供面向对象的技术是为了满足特定应用的需要。随着许多基本设计应用(如MACD和ECAD)中的数据库向面向对象数据库的过渡,面向对象思想也逐渐延伸到其它涉及复杂数据的应用中,其中包括辅助软件工程(CASE)、计算机辅助印刷(CAP)和材料需求计划(MRP)。这些应用如同设计应用一样在程序设计方面和数据类型方面都是数据密集型的,它们需要识别于类型关系的存储技术,并能对相近数据备份进行调整。

还有许多应用要求多媒体数据库,它们要求以集成方式和文本或图形信息一起处理关系数据,这些应用包括高级办公室系统的其它文档管理系统。

面向对象数据库从面向程序设计语言的扩充着手使之成为基于面向对象程序设计语言的面向对象数据库。例如:ONTOS、O-RION等,它们均是C++的扩充,熟悉C++的人均能很方便地掌握并使用这类系统。

面向对象数据库研究的另一个进展是在现有关系数据库中加入许多纯面向对象数据库的功能。在商业应用中对关系模型的面向对象扩展着重于性能优化,处理各种环境的对象的物理表示的优化和增加SQL模型以赋予面向对象特征。如UNISQL、O2等,它们均具有关系数据库的基本功能,采用类似于SQL的语言,用户很容易掌握。

2 面向对象数据库的特点

面向对象数据库将面向对象的能力赋予了数据库设计人员和数据库应用开发人员,从而扩展了数据库系统的应用领域,并能提高开发人员的工作效率和应用系统的质量。面向对象数据库具备如下特点:

首先,它是一个数据库管理系统,具有数据库管理系统的基本功能。一是永久性,数据库中的数据永久保存的;二是存储管理,包括索引管理、数据聚集、数据缓冲、存取路径选择、查询优化等;三是能并发控制,提供高于当前已有数据库管理系统同样级别的、对多个用户并发操作的支持;四是故障恢复能力,提供不低于当前已有的数据库管理系统同样级别的、将数据库从故障后的错误状态中核复到某个正确状态的功能;五是交互式查询功能,且是非过程化的、高效的、独立于应用的。

其次,它是一个面向对象的系统。只有支持面向对象数据库模型,支持复杂对象,具有运用各种构造机制从简单对象组成复杂对象的能力。复杂对象构造能力加强了对客观现实世界的模拟能力,且方法自然、易理解、具有对象标识,对象标识独立于其值而存在的特性可以极大地加快查询速度;具有封装性,对象既封装了数据,又封装操作,实现了信息隐藏,使用户不必知道操作的实现细节,只而利用设计者提供的消息即可访问对象。

它还具备应用领域所需要的一些特性,如版本管理、长事务和嵌套事务、模式演化等等。

3 面向对象技术在数据库中的实现

由于计算机网络、多媒体技术、CAD/CASE等新型数据库应用的需要,数据库领域开始借助面向对象技术来满足这些需要。面向对象技术借助对象、封装和继承机制可以实现对复杂对象和复杂数据模型的支持,将面向对象技术应用于数据库是解决当今许多新型数据库应用中遇到的问题的好办法,虽然面向对象技术和数据库的结合沿着三个方向发展,当前多数数据库生产商都在研发如何将面向对象技术应用到关系数据库中。将面向对象技术应用到关系数据库中可以有两种方式。

3.1 把面向对象技术中的对象作为关系数据库系统中的一种新的数据模型

关系表中的属性值包含对象指针,对象数据的操作在关系数据库之外进行。把面向对象数据模型(ODM)和关系数据模型(RDM)结合起来,对关系数据库管理系统进行扩充,但对象查询功能受到一定的限制。

3.2 把面向对象接口添加在关系数据库中

在关系数据库系统中增加一个对象到关系转换器,将上层的面向对象模式转化为关系存储模式,存放到关系数据库中。这样,在面向对象的数据库中关系存储模型位于底层,数据库用户可以利用标准的面向对象数据库语言进行查询处理,用户输入的面向对象数据库语言被转换成关系数据库语言,从而对底层的关系存储模式进行查询等处理,同时将操作结果按照对象方式返回给用户。这种实现方式使得数据库管理系统在实现关系模型和面向对象模型之间的模型转换时需要一定的开销,执行效率比直接面向对象数据库要低一些,但这种扩充方式实现比较简单。

面向对象技术通过映射接口和关系数据库相结合,面向对象数据库强调的是对象的属性、方法和对象间的关系,设计这种类型的数据库需要理解对象到关系数据库表的映射方法。这种映射方法通过将对象类生成为SQL语言中的数据定义语言(DDL)来将对象转换成一个好的概念层的数据模型(DDL)。

4 面向对象数据库技术的发展趋势及前景展望

4.1 面向对象数据库技术的发展趋势

面向对象数据库技术的发展并不是取代关系数据库系统,而是可望成为继关系数据库技术之后的新一代数据库管理技术。面向对象技术和数据库技术的结合有三种发展途径。

1)对象关系数据库管理系统

对象关系数据库管理系统既支持SQL语句,也支持面向对象技术,实现了传统数据库技术和面向对象技术的完美结合。全球的数据库生产商争相研发这种数据库产品,数据库生产商竞争的一个焦点是如何在现有的数据库中加入面向对象技术。

2)面向对象数据库管理系统

面向对象数据库管理系统以一种面向对象语言为基础,增加数据库的功能,主要支持持久对象和实现数据共享。利用类来描述复杂对象,利用封装方法来模拟对象行为,利用继承性来实现对象的结构和方法的重用。但是这种纯粹的面向对象数据库管理系统不能支持SQL语言,不能和现有的数据库结合起来,在扩展性和通用性方面受到限制。

3)对象关系映射数据库系统

对象关系映射数据库系统是在对象层和关系层之间建立一个映射层,使得数据源中的关系数据能够进入对象领域,并且作为对象供上层使用。

4.2 面向对象数据库技术的前景展望

面向对象技术是近20年来计算机技术界和工业界研究的一大热点。面向对象方法与先进的数据库技术相结合已成为当今数据库领域研究和发展的主要方向之一。

将面向对象技术应用到数据库系统中,使数据库管理系统能够支持面向对象数据模型的数据库模式。对提高数据库系统模拟和操纵客观世界的能力,扩大数据库应用领域具有重要的意义;将面向对象技术应用到数据库的集成开发环境中,使数据库应用开发工具能够支持面向对象的开发方法并提高相应的开发手段,对提高应用软件的开发质量和软件的生产能力是十分重要的。

从根本上讲,面向对象数据库技术对复杂对象既要有极强的表达和建模能力,又要有很强的存储和管理能力,这正是传统数据库技术面向复杂工程数据所难以胜任的关键技术。

摘要:面向对象数据库作为第三代数据库具有前两代数据库无法比拟的优点,把面向对象的方法和数据库技术结合起来可以使数据库系统的分析、设计最大程度地与人们对客观世界的认识相一致。面向对象数据库的技术方法并不高深,但它的设计思想却有着重要价值。

关键词:数据库技术,面向对象,关系数据库

参考文献

[1]邓娟,周冰.面向对象与数据库技术结合发展现状研究[J].科技资讯,2009,(3):5.

[2]Bruce Eckel.Java编程思想[M].4版.陈昊鹏,译.北京:机械工业出版社,2006.

[3]王功明,关永.面向对象数据库发展和研究[J].计算机应用研究,2006,(3):1-4.

[4]Alex Kriegel,Boris M.Trukhnov.SQL宝典[M].高伟等译.北京:电子工业出版社,2003.

[5]张珊靓,支丽平.面向对象的数据库技术初探[J].计算机与信息技术,2007,(15):316.

上一篇:审美阅读教学论文下一篇:公私合作伙伴关系