当前位置:首页 > 嵌入式 > 嵌入式硬件

摘 要: 结合Wrapper Facade模式,给出OCCI程序访问Oracle SpATIal的一般过程,并给出实例。

对象关系数据库管理系统(ORDBMS)是面向对象技术与传统的关系数据库相结合的产物。ORDBMS在原来关系数据库的基础上 ,增加了一些新的特性 ,这些特性对查询优化影响很大。查询处理是ORDBMS的重要组成部分 ,它的性能优劣将直接影响到DBMS的性能 。在当前众多的ORDBMS中,越来越多的GIS系统采用Oracle SpaTIal管理地理数据。目前访问Oracle数据库的方式有很多种,而这些方式或因为追求通用性而牺牲效率,或因为不能适应地理数据类型特点而无法实际采用。

针对上述问题,本文探讨了通过设计OCCI程序访问Oracle Spatial中地理数据的一般过程。由于OCCI程序在代码级上具有类级封装,因此具有灵活、高效、代码简洁、易于理解和维护的优点。OCCI在引入面向对象分析和设计技术后,有利于实现进一步封装,在封装边界上限定软件元素的共生性,产生更健壮、更可靠和更易维护的软件模块。同时,本文采用Wrapper模式向外提供一个简单一致的界面,降低外部程序对功能实现部分的直接依赖。

1 几何对象在Oracle Spatial中的表示

ORACLE SPATIAL 是 Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型、栅格数据类型和持续拓扑数据的原生数据类型。ORACLE SPATIAL使得我们能够在一个多用户环境中部署地理信息系统(GIS),并且与其它企业数据有机结合起来,统一部署电子商务、政务。有了 ORACLE SPATIAL 之后,即可用标准的 SQL 查询管理我们的空间数据……该方案中,能由上述对象关系模型所表示的空间对象被存储在由用户定义的数据表的单个数据域列中。该数据域的数据类型是几何对象类型SDO_GEOMETRY。对象类型SDO_GEOMETRY的定义如下:

CREATE TYPE sdo_geometry AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO

MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES

MDSYS.SDO_ORDINATE_ARRAY);

其中:SDO_GTYPE描述地理对象的类型,SDO_SRID用以确定所采用的坐标系,SDO_ELEM_INFO用以定义对象组成元素的信息。

2 OCCI

OCCI(Oracle C++ Calling Interface)是Oracle公司推出的专为访问Oracle数据库的API类库,它为用户提供了一个底层二次开发环境。通过OCCI,用户可以开发自己的程序,灵活、高效地访问Oracle数据库,获取数据库管理系统的支持,完成对数据的访问。

2.1 OCCI的优势

OCCI本质上是对OCI代码的类级封装。因此在继承了OCI强大功能的基础上,OCCI在访问Oracle方面还具有许多新的特性:

(1)封装了复杂的实现细节,提供了一致的调用接口。代码简洁有力,程序易于开发、理解和维护。

(2)引入面向对象的设计和编程技术,使编写的程序更健壮、可靠、可扩展、易复用和易维护。

(3)由于具有类级封装,所以有利于在封装的边界上限定软件元素的共生性,使得开发的程序更健壮、可靠和易维护。

类级封装改变了从前的OCI代码难理解、难维护的缺点,为更好地解决软件中的共生性创造了条件。共生性(connascence)是指在一定的环境下,软件元素间为适应某种变化、保持正确性而需要进行的一些变化。但如果采用正确的面向对象设计方法,可以增强封装体内部的聚合质量,降低它们之间的耦合程度,产生封装边界内共生性最大化、边界间共生性最小化的较佳设计效果。这样产生的软件模块具有健壮、可靠、易扩展、易复用和易维护的特点。

2.2 OCCI应用程序生成机制

第三方应用程序通过与OCCI类库进行连接生成OCCI应用程序(OCCI Application)。通过获得Oracle数据库管理系统服务(Oracle Database Server)的支持,OCCI应用程序支持所有的SQL数据定义、数据操纵和事务处理功能。OCCI应用程序生成机制如图1所示。

2.3 一般对象访问流程

OCCI进行对象访问的流程为:(1)采用对象模式初始化程序环境。(2)取得对象的一个拷贝存到用户端的缓存中。(3)在该缓存中操纵对象。(4)如对该对象拷贝进行了设置操作,则将该拷贝置为Dirty。(5)如果需要,用修改过的对象拷贝刷新数据库中的永久对象。OCCI的一般对象访问流程如图2所示。

3 Wrapper Facade模式封装OCCI代码

3.1 Wrapper Facade的意图和一般结构

Wrapper facade模式的意图是采用面向对象类的接口对底层函数和数据结构进行封装,以产生简洁、健壮、可移植和易复用的应用程序模块。本文应用环境下,虽然OCCI对OCI进行了类级别的封装,但在具体应用程序中,开发人员仍然要根据应用需要编写OCCI代码序列。常见的Wrapper facade pattern的应用实例有MFC、ACE以及AWT,它们都封装了操作系统的C代码API函数。

图3和图4是该模式一般结构示意图和动态结构用UML的类图和顺序图分别表示的情况。模式中主要的成分有:(1)函数,封装了已有的底层函数和数据结构序列,这个序列提供一个内聚的功能服务。(2)包装界面(Wrapper facade),由包含一个或多个类的集合构成。这些类封装了上述函数及其相关的数据结构,通过类中的方法来组织上述函数。用户通过对包装界面类的方法调用进而获得对底层代码序列的调用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭