第四章 空间数据库
第一节 数据库概述
数据库技术是60年代初开始发展起来的一门数据管理自动化的综合性新技术。数据库的应用领域相当广泛,从一般事务处理,到各种专门化数据的存储与管理,都可以建立不同类型的数据库。建立数据库不仅仅是为了保存数据,扩展人的记忆,而主要是为了帮助人们去管理和控制与这些数据相关联的事物。地理信息系统中的数据库就是一种专门化的数据库,由于这类数据库具有明显的空间特征,所以有人把它称为空间数据库,空间数据库的理论与方法是地理信息系统的核心问题。
数据库的定义
数据库就是为了一定的目的,在计算机系统中以特定的结构组织、存储和应用的相关联的数据集合。
计算机对数据的管理经过了三个阶段—最早的程序管理阶段,后来的文件管理阶段,现在的数据库管理阶段。其中,数据库是数据管理的高级阶段,它与传统的数据管理相比有许多明显的差别,其中主要的有两点:一是数据独立于应用程序而集中管理,实现了数据共享,减少了数据冗余,提高了数据的效益;二是在数据间建立了联系,从而使数据库能反映出现实世界中信息的联系。
地理信息系统的数据库(以下称为空间数据库)是某区域内关于一定地理要素特征的数据集合。空间数据库与一般数据库相比,具有以下特点:
(1) 数据量特别大,地理系统是一个复杂的综合体,要用数据来描述各种地理要素,尤其是要素的空间位置,其数据量往往大得惊人。即使是一个很小区域的数据库也是如此。
(2) 不仅有地理要素的属性数据(与一般数据库中的数据性质相似),还有大量的空间数据,即描述地理要素空间分布位置的数据,并且这两种数据之间具有不可分割的联系。
(3) 数据应用的面相当广,如地理研究、环境保护、土地利用与规划、资源开发、生态环境、市政管理、道路建设等等。
上述特点,尤其是第二点,决定了在建立空间数据库时,一方面应该遵循和应用通用数据库的原理和方法,另一方面又必须采取一些特殊的技术和方法来解决其它数据库所没有的管理空间数据的问题。
二、数据库的主要特征
数据库方法与文件管理方法相比,具有更强的数据管理能力。数据库具有以下主要特征:
数据集中控制特征
在文件管理方法中,文件是分散的,每个用户或每种处理都有各自的文件,不同的用户或处理的文件一般是没有联系的,因而就不能为多用户共享,也不能按照统一的方法来控制、维护和管理。数据库很好地克服了这一缺点,数据库集中控制和管理有关数据,以保证不同用户和应用可以共享数据。数据集中并不是把若干文件“拼凑”在一起,而是要把数据“集成”。因此,数据库的内容和结构必须合理,才能满足众多用户的要求。
数据冗余度小的特征
冗余是指数据的重复存储。在文件方式中,数据冗余太。冗余数据的存在有两个缺点:一是增加了存储空间;二是易出现数据不一致。设计数据库的主要任务之一是识别冗余数据,并确定是否能够消除。在目前情况下,即使数据库方法也不能完全消除冗余数据。有时,为了提高数据处理效率,也应该有一定程度的数据冗余。但是,在数据库中应该严格控制数据的冗余度。在有冗余的情况下,数据更新、修改时,必须保证数据库内容的一致性。
3、数据独立性特征
数据独立是数据库的关键性要求。数据独立是指数据库中的数据与应用程序相互独立,即应用程序不因数据性质的改变而改变;数据的性质也不因应用程序的改变而改变。数据独立分为两级:物理级和逻辑级。物理独立是指数据的物理结构变化不影响数据的逻辑结构;逻辑独立意味着数据库的逻辑结构的改变不影响应用程序。但是,逻辑结构的改变必然影响到数据的物理结构。目前,数据逻辑独立还没有能完全实观。
4、复杂的数据模型 数据模型能够表示现实世界中各种各样的数据组织以及数据间的 联系。复杂的数据模型是实现数据集中控制、减少数据冗余的前提和保证。采用数据模型是数据库方法与文件方式的一个本质差别。
数据库常用的数据模型有三种:层次模型,网络模型和关系模型。因此,根据使用的模型,可以把数据库分成:层次型数据库,网络型数据库和关系型数据库。
5、数据保护特征
数据保护对数据库来说是至关重要的,一旦数据库中的数据遭到破坏,就会影响数据库的功能,甚至使整个数据库失去作用、数据保护主要包括四个方面的内容:安全性控制、完整性控制、并发控制、故障的发现和恢复。
三、数据库的系统结构
数据库是一个复杂的系统。数据库的基本结构可以分成三个层次:物理级、概念级和用户级。
1、物理级:数据库最内的一层。它是物理设备上实际存储的数据集合(物理数据库)。它是由物理模式(也称内部模式)描述的。
2、概念级:数据库的逻辑表示,包括每个数据的逻辑定义以及数据间的逻辑联系。它是由概念模式定义的,这一级也被称为概念模型。
用户级:用户所使用的数据库,是一个或几个特定用户所使用的数据集合(外部模型),是概念模型的逻辑子集。它由外部模式定义。
四、数据组织方式
数据是现实世界中信息的裁体,是信息的具体表达形式。为了表达有意义的信息内容,数据必须按照一定的方式进行组织和存储。数据库中的数据组织一般可以分为四级:数据项、记录、文件和数据库。
1、数据项:是可以定义数据的最小单位,也叫元素、基本项、字段等。数据项与现实世界实体的属性相对应,数据项有一定的取值范围,称为域。域以外的任何值对该数据项都是无意义的。如表示月份的数据项的域是1—12,13就是无意义的值。每个数据项都有一个名称,称为数据项目。数据项的值可以是数值的、字母的、汉字的等形式。数据项的物理特点在于它具有确定的物理长度,一般用字节数表示。
几个数据项可以组合,构成组合数据项。如“日期”可以由日、月、年三个数据项组合而成。组合数据项也有自己的名字,可以作为一个整体看待。
2、记录:由若干相关联的数据项组成。记录是应用程序输入—输出的逻辑单位。对大多数据库系统,记录是处理和存储信息的基本单位。记录是关于一个实体的数据总和,构成该记录的数据项表示实体的若干属性。
记录有“型”和“值”的区别。“型”是同类记录的框架,它定义记录,“值”是记录反映实体的内容。
为了唯一标识每个记录,就必须有记录标识符,也叫关键字。记录标识符一般由记录中的第一个数据项担任,唯一标识记录的关键字称主关键字,其它标识记录的关键字称为辅关键字。
3、文件:文件是一给定类型的(逻辑)记录的全部具体值的集合。文件用文件名称标识。文件根据记录的组织方式和存取方法可以分为:顺序文件、索引文件、直接文件和倒排文件等等。
4、数据库:是比文件更大的数据组织。数据库是具有特定联系的数据的集合,也可以看成是具有特定联系的多种类型的记录的集合。数据库的内部构造是文件的集合,这些文件之间存在某种联系,不能孤立存在。
五、数据间的逻辑联系
数据间的逻辑联系主要是指记录与记录之间的联系。记录是表示现实世界中的实体的。实体之间存在着一种或多种联系,这样的联系必然要反映到记录之间的联系上来。数据之间的逻辑联系主要有三种:
1、一对一的联系:简记为1:1,如图4-1所示,这是一种比较简单的一种联系方式,是指在集合A中存在一个元素ai,则在集合B中就有一个且仅有一个bj与之联系。在1:1的联系中,一个集合中的元素可以标识另一个集合中的元素。例如,地理名称与对应的空间位置之间的关系就是一种一对一的联系.
2、一对多的联系(1:N):现实生活中以一对多的联系较多常见。如图4-2所示,这种联系可以表达为:在集合A中存在一个ai,则在集合B中存在一个子集B′=(bj1, bj2…bjn)与之联系。通常,B′是B的一个子集。行政区划就具有一对多的联系,一个省对应有多个市,一个市有多个县,一个县又有多个乡。
3、多对多的联系(M:N):这是现实中最复杂的联系(如图4-3所示),即对于集合A中的一个元素ai。在集合B就存在一个子集B′=(bj1, bj2…bjn)与之相联系。反过来,对于B集合中的一个元素Bj在集合A中就有一个集合A′=(ai1,ai2,ai3…ain)与之相联系。M:N的联系,在数据库中往往不能直接表示出来,而必须经过某种变换,使其分解成两个1:N的联系来处理。地理实体中的多对多联系是很多的,例如土壤类型与种植的作物之间有多对多联系。同一种土壤类型可以种不同的作物,同一种作物又可种植在不同的土壤类型上。
第二节 传统数据库系统的数据模型
数据模型是数据库系统中关于数据和联系的逻辑组织的形式表示。每一个具体的数据库都是由一个相应的数据模型来定义。每一种数据模型都以不同的数据抽象与表示能力来反映客观事物,有其不同的处理数据联系的方式。数据模型的主要任务就是研究记录类型之间的联系。
目前,数据库领域采用的数据模型有层次模型、网状模型和关系模型,其中应用最广泛的是关系模型。
层次模型
层次模型是数据处理中发展较早、技木上也比较成熟的一种数据模型。它的特点是将数据组织成有向有序的树结构。层次模型由处于不同层次的各个结点组成。除根结点外,其余各结点有且仅有一个上一层结点作为其“双亲”,而位于其下的较低一层的若干个结点作为其“子女”。结构中结点代表数据记录,连线描述位于不同结点数据间的从属关系(限定为一对多的关系)。对于图4-4所示的地图M用层次模型表示为如图4-5所示的层次结构。
层次模型反映了现实世界中实体间的层次关系,层次结构是众多空间对象的自然表达形式,并在一定程度上支持数据的重构。但其应用时存在以下问题:
1、由于层次结构的严格限制,对任何对象的查询必须始于其所在层次结构的根,使得低层次对象的处理效率较低,并难以进行反向查询。数据的更新涉及许多指针,插入和删除操作也比较复杂。母结点的删除意味着其下属所有子结点均被删除,必须慎用删除操作。
2、层次命令具有过程式性质,它要求用户了解数据的物理结构,并在数据操纵命令中显式地给出存取途径。
3、模拟多对多联系时导致物理存贮上的冗余。
4、数据独立性较差。
二、网状模型
网络数据模型是数据模型的另一种重要结构,它反映着显示世界中实体间更为复杂的联系,其基本特征是,结点数据间没有明确的从属关系,一个结点可与其它多个结点建立联系。如图4-6所示的四个城市的交通联系,不仅是双向的而且是多对多的。如图4-7所示,学生甲、乙、丙、丁、选修课程,其中的联系也属于网络模型。
网络模型用连接指令或指针来确定数据间的显式连接关系,是具有多对多类型的数据组织方式,网络模型将数据组织成有向图结构。结构中结点代表数据记录,连线描述不同结点数据间的关系。
有向图(Digraph)的形式化定义为:
Digraph=(Vertex,(Relation))
其中Vertex为图中数据元素(顶点)的有限非空集合;Relation是两个顶点(Vertex)之间的关系的集合。
有向图结构比层次结构具有更大的灵活性和更强的数据建模能力。网络模型的优点是可以描述现实生活中极为常见的多对多的关系,其数据存贮效率高于层次模型,但其结构的复杂性限制了它在空间数据库中的应用。
网络模型在一定程度上支持数据的重构,具有一定的数据独立性和共享特性,并且运行效率较高。但它应用时存在以下问题:
1、网状结构的复杂,增加了用户查询和定位的困难。它要求用户熟悉数据的逻辑结构,知道自身所处的位置。
2、网状数据操作命令具有过程式性质。
3、不直接支持对于层次结构的表达。
三、关系模型
在层次与网络模型中,实体间的联系主要是通过指针来实现的,即把有联系的实体用指针连接起来。而关系模型则采用完全不同的方法。
关系模型是根据数学概念建立的,它把数据的逻辑结构归结为满足一定条件的二维表形式。此处,实体本身的信息以及实体之间的联系均表现为二维表,这种表就称为关系。一个实体由若干个关系组成,而关系表的集合就构成为关系模型。
关系模型不是人为地设置指针,而是由数据本身自然地建立它们之间的联系,并且用关系代数和关系运算来操纵数据,这就是关系模型的本质。
在生活中表示实体间联系的最自然的途径就是二维表格。表格是同类实体的各种属性的集合,在数学上把这种二维表格叫做关系。二维表的表头,即表格的格式是关系内容的框架,这种框架叫做模式,关系由许多同类的实体所组成,每个实体对应于表中的一行,叫做一个元组。表中的每一列表示同一属性,叫做域。
对于图4-4的地图,用关系数据模型则表示为图4-8所示。
关系数据模型是应用最广泛的一种数据模型,它具有以下优点:
1、能够以简单、灵活的方式表达现实世界中各种实体及其相互间关系,使用与维护也很方便 。关系模型通过规范化的关系为用护提供一种简单的用户逻辑结构。所谓规范化,实质上就是使概念单一化,一个关系只描述一个概念,如果多于一个概念,就要将其分开来。
2、关系模型具有严密的数学基础和操作代数基础——如关系代数、关系演算等,可将关系分开,或将两个关系合并,使数据的操纵具有高度的灵活性;
3、在关系数据模型中,数据间的关系具有对称性,因此,关系之间的寻找在正反两个方向上难度程度是一样的,而在其它模型如层次模型中从根结点出发寻找叶子的过程容易解决,相反的过程则很困难。
目前,绝大多数数据库系统采用关系模型。但它的应用也存在着如下问题:
1、实现效率不够高。由于概念模式和存贮模式的相互独立性,按照给定的关系模式重新构造数据的操作相当费时。另外,实现关系之间联系需要执行系统开销较大的联接操作。
2、描述对象语义的能力较弱。现实世界中包含的数据种类和数量繁多,许多对象本身具有复杂的结构和涵义,为了用规范化的关系描述这些对象,则需对对象进行不自然的分解,从而在存贮模式、查询途径及其操作等方面均显得语义不甚合理。
3、不直接支持层次结构,因此不直接支持对于概括、分类和聚合的模拟,即不适合于管理复杂对象的要求,它不允许嵌套元组和嵌套关系存在。
4、模型的可扩充性较差。新关系模式的定义与原有的关系模式相互独立,并未借助已有的模式支持系统的扩充。关系模型只支持元组的集合这一种数据结构,并要求元组的属性值为不可再分的简单数据(如整数、实数和字符串等),它不支持抽象数据类型,因而不具备管理多种类型数据对象的能力。
5、模拟和操纵复杂对象的能力较弱。关系模型表示复杂关系时比其它数据模型困难,因为它无法用递归和嵌套的方式来描述复杂关系的层次和网状结构,只能借助于关系的规范化分解来实现。过多的不自然分解必然导致模拟和操纵的困难和复杂化。
第三节 GIS中空间数据库的组织方式
GIS中的数据大多数都是地理数据,它与通常意义上的数据相比,具有自己的特点:地理数据类型多样,各类型实体之间关系复杂,数据量很大,而且每个线状或面状地物的字节长度都不是等长的等等。地理数据的这些特点决定了利用目前流行的数据库系统直接管理地理空间数据,存在着明显的不足,GIS必须发展自己的数据库-空间数据库。
空间数据库是作为一种应用技术而诞生和发展起来的,其目的是为了使用户能够方便灵活地查询出所需的地理空间数据,同时能够进行有关地理空间数据的插入、删除、更新等操作,为此建立了如实体、关系、数据独立性、完整性、数据操纵、资源共享等一系列基本概念。以地理空间数据存储和操作为对象的空间数据库,把被管理的数据从一维推向了二维、三维甚至更高维。由于传统数据库系统(如关系数据库系统)的数据模拟主要针对简单对象,因而无法有效地支持以复杂对象(如图形、影像等)为主体的工程应用。空间数据库系统必须具备对地理对象(大多为具有复杂结构和内涵的复杂对象)进行模拟和推理的功能。一方面可将空间数据库技术视为传统数据库技术的扩充;另一方面,空间数据库突破了传统数据库理论(如将规范关系推向非规范关系),其实质性发展必然导致理论上的创新。
空间数据库是一种应用于地理空间数据处理与信息分析领域的具有工程性质的数据库,它所管理的对象主要是地理空间数据(包括空间数据和非空间数据)。传统数据库系统管理地理空间数据有以下几个方面的局限性:
(1)传统数据库系统管理的是不连续的、相关性较小的数字和字符;而地理信息数据是连续的,并且具有很强的空间相关性。
(2)传统数据库系统管理的实体类型较少,并且实体类型之间通常只有简单、固定的空间关系;而地理空间数据的实体类型繁多,实体类型之间存在着复杂的空间关系,并且还能产生新的关系(如拓扑关系)。
(3)传统数据库系统存贮的数据通常为等长记录的数据;而地理空间数据通常由于不同空间目标的坐标串长度不定,具有变长记录,并且数据项也可能很大,很复杂。
(4)传统数据库系统只操纵和查询文字和数字信息;而空间数据库中需要有大量的空间数据操作和查询,如相邻、连通、包含、叠加等。
目前,大多数商品化的GIS软件都不是采取传统的某一种单一的数据模型,也不是抛弃传统的数据模型,而是采用建立在关系数据库管理系统(RDBMS)基础上的综合的数据模型,归纳起来,主要有以下三种:
混合结构模型(Hybrid Model)
它的基本思想是用两个子系统分别存储和检索空间数据与属性数据,其中属性数据存储在常规的RDBMS中,几何数据存储在空间数据管理系统中,两个子系统之间使用一种标识符联系起来。图4-9为其原理框图。在检索目标时必须同时询问两个子系统,然后将它们的回答结合起来。
由于这种混合结构模型的一部分是建立在标准RDBMS之上,故存储和检索数据比较有效、可靠。但因为使用两个存储子系统,它们有各自的规则,查询操作难以优化,存储在RDBMS外面的数据有时会丢失数据项的语义;此外,数据完整性的约束条件有可能遭破坏,例如在几何空间数据存储子系统中目标实体仍然存在,但在RDBMS中却已被删除。
属这种模型的GIS软件有ARC/INFO、MGE、SICARD、GENEMAP等。
二、扩展结构模型(Extended Model)
混合结构模型的缺陷是因为两个存储子系统具有各自的职责,互相很难保证数据存储、操作的统一。扩展结构模型采用同一DBMS存储空间数据和属性数据。其做法是在标准的关系数据库上增加空间数据管理层,即利用该层将地理结构查询语言(GeoSQL)转化成标准的SQL查询,借助索引数据的辅助关系实施空间索引操作。这种模型的优点是省去了空间数据库和属性数据库之间的繁琐联结,空间数据存取速度较快,但由于是间接存取,在效率上总是低于DBMS中所用的直接操作过程,且查询过程复杂。图4—10为其原理框图。
这种模型的代表性GIS软件有SYSTEM 9,SMALL WORLD等。
三、统一模数据型(Integrated Model)
这种综合数据模型不是基于标准的RDBMS,而是在开放型DBMS基础上扩充空间数据表达功能。如图4-11所示,空间扩展完全包含在DBMS中,用户可以使用自己的基本抽象数据类型(ADT)来扩充DBMS。在核心DBMS中进行数据类型的直接操作很方便、有效,并且用户还可以开发自己的空间存取算法。该模型的缺点是,用户必须在DBMS环境中实施自己的数据类型,对有些应用将相当复杂。
属于此类综合模型的软件如TIGRIS(intergraph)、GEO++(荷兰)等。
第四节 面向对象数据库系统
面向对象技术概述
近十几年来,一种新颖,具有独特优越性的新方法,正引起全世界越来越强烈的关注和高度的重视,它就是被誉为“研究高技术的好办法”的“面向对象方法”(Object-Oriented Paradigm,简称OO)
面向对象方法起源于面向对象的编程语言(简称OOPL)。60年代中后期,Simula-67语言的设计者首次提出了“对象”(Object)的概念,并开始使用数据封装(data encapsulation)技术(对外部只提供一个抽象接口而隐藏具体实现细节)。但面向对象方法的推广应用则主要得益于面向对象语言Smalltalk—80,它在系统设计中强调对象概念的统—,引入对象、对象类、方法、实例等概念和术语,采用动态联编和单继承性机制。它还以OOPL为核心,集各种软件开发工具为一体,建立OO计算环境,配有很强的图形功能和多窗口用户界面。因此,Smalltalk的商品化标志了面向对象的编程语言已建立较完善的概念和理论,并推向实用。Smalltalk作为一种新的、纯粹的面向对象编程语言,同时又为面向对象方法学的形成和发展起了重大的作用。
面向对象方法基本出发点就是尽可能按照人类认识世界的方法和思维方式来分析和解决问题。客观世界是由许多具体的事物或事件、抽象的概念、规则等组成的。因此,我们将任何感兴趣或要加以研究的事物概念都统称为“对象”(或称目标)。面向对象的方法正是以对象作为最基本的元素,它也是分析问题,解决问题的核心。OO方法很自然地符合人的认识规律。计算机实现的对象与真实世界具有一对一的对应关系,不需作任何转换,这样就使OO方法更易于为人们所理解、接受和掌握。面向对象方法具有的模块化,信息封装与隐藏、抽象性、多形性等独特之处,为解决大型软件管理,提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径,很快被引入到所有与计算机科学有关的领域,如在编程语言方面,Vc、Object Pascal, 数据库管理软件Vb等。吉奥之星、Small World 等GIS软件,也采用了面向对象的方法。
二、面向对象方法中的基本概念
面向对象的定义是指无论怎样复杂的事例都可以准确地由一个对象表示,这个对象是一个包含了数据集和操作集的实体。
1、对象
在面向对象的系统中,所有的概念实体都可以模型化为对象。多边形地图上的一个结点或一条弧段是对象,—条河流或—个省也是一个对象。一个对象是由描述该对象状态的—组数据和表达它的行为的一组操作(方法)组成的。例如,河流的坐标数据描述了它的位置和形状,而河流的变迁则表达了它的行为。由此可见,对象是数据和行为的统—体。
GIS中的地理对象则可定义为:描述一个实体的空间和属性数据以及定义一系列对实体有意义的操作函数的统一体。如一个城市、一条街道、一个街区等。
定义1:一个对象object是一个三元组
object=(ID,S,M)
其中,ID为对象标识,M为方法集,S为对象的内部状态,它可以直接是—属性值,也可以是另外一组对象的集合,因而它明显地表现出对象的递归。把ID,S,M三部分作为—个整体对象作如下递归定义。
定义2:
①Number, String, Symbol, True, False等称为原子对象;
②如S中都是属性值,S1,S2…Sn均为原子对象,则称object为简单对象。
③如果S1,S2…Sn包含了原子对象以外的其它类型的对象,则称Object为复杂对象。而其中的Si称为子对象。若S中所包含的子对象属同—类对象,则称Object为组合对象,或称简单的复杂对象。
在面向对象的系统中,对象作为一个独立的实体,一经定义就带有一个唯—的标识号,且独立于它的值而存在。
总之,一个对象就是一个具有名称标识并有自身的状态与功能的实体。如一个人,他有一些身体状况如性别、年龄、身高、体重等,他还有一些其他的情况如所干工作、所学专业、爱好等。
2、对象类
对象类,简称类,是关于同类对象的集合,具有相同属性和操作的对象组合在一起形成“类”(class)。类是用来定义抽象数据类型的,类描述了实例的形式(属性等)以及作用于类中对象上的操作(方法)。属于同一类的所有对象共享相同的属性项和方法,每个对象都是这个类的一个实例,即对象与类的关系是instance—of的关系。同一个类中的对象在内部状态的表现形式上(即型)相同,但它们有不同的内部状态,即有不同的属性值,类中的对象并不是一模一样的,而应用于类中所有对象的操作却是相同的。
所以,在实际的系统中,仅需对每个类型定义一组操作,供该类中的每个对象应用。但因每个对象的内部状态不完全相同,所以要分别存贮每个对象的属性值。
如所有河流均有共性,名称、长度、面积以及操作方法,抽象成河流类,而黄河、长江等就是其实例对象,同时又有其自身的状态特征(属性值)。
3、方法和消息
对一个类所定义的所有操作称为方法。对对象类的操作是由方法来具体实现的,而对象间的相互联系和通信的唯一途径是通过“消息”传送来实现。消息是对象与对象之间相互联系、请求、协作的途径。
另外, 消息还分公有消息和私有消息,例如,如果一批消息都属于同一个对象,但有些是可由其它对象向它发送,叫公有消息,另外一些则是由它自己向本身发送,叫私有消息。
4、协议与封装
对象和消息对自然界的实际事物进行了良好的模拟,也简化了人们对世界事物的理解。但是,现实事物仅靠这两个概念还不能充分表达。例如,一个人有各种各样的能力。有一些能力,他乐意向外人宣告;有些能力只向一部分人通告;还可能有些能力,不想让任何人知道。另外,即使外人知道了他的某些能力,但他也不向外界提供这些服务。这是经常出现的情况,上面的私有消息便是这样的例子。这里就有一个协议的问题。
协议是一个对象对外服务的说明,它告知一个对象可以为外界做什么。外界对象能够并且只能向该对象发送协议中所提供的消息,请求该对象服务。因此,它是由一个对象能够接受并且愿意接受的所有消息构成的对外接口。也就是说,请求对象进行操作的唯一途径就是通过协议中提供的消息来进行。即使一个对象可以完成某一功能,但它没有将该功能放入协议中去,外界对象依然不能请求它完成这一功能。从私有消息和公有消息上看,协议是一个对象所能接受的所有公有消息的集合。
对象、消息和协议是面向对象设计中的支柱性概念,这些概念一起又引入了一个新的概念——封装。封装就是将某件事物包围起来,使外界不必知道其实际内容。也就是说,对象通过封装后,其它对象只能从公有消息中提供的功能进行请求服务,对这个对象内部的情况不必了解。
封装的最基本单位是对象。封装技术提高了面向对象方法开发软件的可重用性,从而大大提高了复杂软件的开发效率、质量和可靠性,更加易于维护。
三、面向对象方法的数据抽象技术和数据抽象工具
面向对象的方法除数据与操作的封装性以外,还具有极强的抽象表达能力,具有分类(classification)、概括(generalization)、聚集(aggregation)和联合(association)等数据抽象技术以及继承(inheritance)和传播(propagation)等强有力的抽象工具。
1、分类(classification)
把一组具有相同结构的实体归纳成类的过程,称为分类,而这些实体就是属于这个类的实例对象。属于同一类的对象具有相同的属性结构和操作方法。
2、超类与概括
在定义类型时,将几种类型中某些具有公共特征的属性和操作抽象出来,形成一种更一般的超类(Superclass)。
设有两种类型
C1assl= (CIDl,CSA,CSB,CMA,CMB)
Class2=(CID2,CSA,CSC,CMA,CMC)
C1assl和Class2中都带有相同的属性子集CSA和操作子集CMA
并且
CSA CS1 和CSA CS2
及CMA CMl和CMA CM2
因而将它们抽象出来,形成一种超类Superclass=(SID,CSA,CMA) ,这里的SID为超类的标识号。
在定义了超类以后,则Classl 和C1ass2可表达为:
Classl=(CIDl,CSB, CMB)
Class2=(CID2,CSC, CMC)
其中Class1和Class2则称为Superclass的子类。
子类与超类的关系是is-a的关系。例如,建筑物是饭店的超类,因为饭店也是建筑物。子类还可以进一步分类,如饭店类可以进一步分为小餐馆、普通旅社、涉外宾馆、招待所等类型。所以一个类可能是某个或某几个超类的子类,同时又可能是几个子类的超类。
建立超类实际上是一种概括,避免了说明和存贮上的大量冗余。但是仅由(10—7)式不足以描述Classl和Class2的状态和操作,它们需要结合(10—6)式中的CSA和CMA共同表达该对象。所以需要一种机制,在获取子类对象的状态和操作时,能自动得到它的超类的状态和操作。这就是面向对象方法中著名的模型工具—继承。
3、继承
继承是一种服务于概括的工具。在上述概括的概念中,子类的某些属性和操作来源于它的超类。例如在前面概括的例子中,饭店类是建筑物类的子类,它的一些操作,如显示和删除对象等,以及一些属性如房主、地址、建筑日期等是所有建筑物公有的,所以仅在建筑物类中定义它们,然后遗传给饭店类等子类。
在遗传的过程中,还可以将超类的属性和操作遗传给子类的子类。例如可将建筑物类的一些操作和属性通过饭店遗传给孙类——招待所类等。继承是一有力的建模工具,它有助于进行共享说明和应用的实现,提供了对世界简明而精确的描述。
继承有单个继承和多个继承。单个继承是指子类仅有一个直接的父类,而多个继承允许多于一个直接父类。
多个继承的现实意义是一个子类的属性和操作可以抽象出几个其它子类所公有的属性和操作子集,建立一个以上的超类。
GIS中经常要遇到多个继承的问题,下面举例说明两个不同的体系形成的多个继承。一个由人工和自然的交通线形成,另一个是以水系为主线。运河具有两方面的特性,即人工交通线和水系;而可航行的河流也有两方面的特性,即河流和自然交通线。其它一些类型如高速公路和池塘仅属于其中某一个体系(见图4-12)。
另外,从继承内容上讲,继承还有包含继承、受限继承、取代继承等等。如水系是一类对象,湖是一种特殊的水系。湖继承了水系的所有特征,并且任何一个湖都是一个水系,这便是包含继承,即湖包含了水系具有的所有特征。鸵鸟是类特殊的鸟,它们不能继承鸟会飞的特征,这就是受限继承。
联合与组合对象
在定义对象时,将同—类对象中的几个具有部分相同属性值的对象组合起来,为了避免重复,设立一个更高水平的对象表示这些相同的属性值。例如一个县是由若干个乡镇联合而成。
联合常用集合来描述,有联合关系的对象叫成员,所以联合就指的是“成员”关系。 在联合中,一个成员对象的具体细节被忽略了,强调的是整个对象的特征。一个集合对象的实例可以分解成一系列其成员对象的实例。联合通过其成员产生集合数据结构,一个集合的操作是由该集合每个成员的操作组成的。
5、聚集与复合对象
聚集有点类似于联合,但聚集是将几个不同特征的对象组合成一个更高水平的对象。每个不同特征的对象是该复合对象的一部分,它们有自己的属性描述数据和操作,这些是不能为复合对象所公用的,但复合对象可以从它们那里派生得到一些信息,它们与复合对象的关系是Parts-of的关系。例如房子从某种意义上说是一个复合关系,它是由墙、门、窗和房顶组成的。
考虑聚集时,不能强调复合对象的具体细节,每个聚集对象的实例都可以分解成其它成员对象实例,每个成员对象都保持其自有的功能。聚集的操作和其它部分的操作是不兼容的。聚集的每一个操作是由每个部分产生的不同操作所组成的。
6、传播
传播是作用于联合和聚集的工具,它通过一种强制性的手段将子对象的属性信息传播给复杂对象。就是说,复杂对象的某些属性值不单独存于数据库中,而是从它的子对象中提取或派生。
例如,一个多边形的位置坐标数据,并不直接存于多边形文件中,而是存于弧段和结点的文件中,多边形文件仅提供一种组合对象的功能和机制,借助于传播的工具可以得到多边形的位置信息。这一概念可以保证数据库的一致性,因为独立的属性值仅存贮一次,不会因数据库的更新而破坏它的一致性。
以上分类、概括、联合和聚集的概念丰富了面向对象方法的语义模型,使面向对象的系统具有支持多种语义联系的功能,这些概念的抽象关系列举如下:
分类 instance—of
概括 is—a
联合 member—of
聚集 parts—of
继承和传播工具为实现这种语义模型提供了有力的保证。它们分别用在不同的方面,继承是在概括中使用,而传播则作用于联合和聚集的结构;继承是以从上到下的方式,从一般类型到更详细的类型,而传播则以自下而上的方式,提取或派生子对象的值;继承应用于类型方面。传播直接作用于对象:继承包括了属性和操作,而传播一般仅涉及属性值;继承—般是隐含的,系统提供—种机制,只要声明子类与超类的关系,超类的特征—般会自动遗传给它的子类,而传播是—种带强制性的工具,它需要在复杂对象中显式定义它的每个子对象,并声明它需要传播哪些属性值。
四、面向对象的几何抽象类型
考察GIS中的各种地物,在几何性质方面不外乎表现为四种类型,即点状地物、线状处物、面状地物以及由它们混合组成的复杂地物,因而这四种类型可以作为GIS中各种地物类型的超类(见图4-13)。从几何位置抽象,点状地物为点,具有x, y, z坐标。线状地物由弧段组成,弧段由结点组成。面状地物由弧段和面域组成。复杂地物可以包含多个同类或不同类的简单地物(点、线、面),也可以再嵌套复杂地物。因此弧段聚集成线状地物,简单地物组合成复杂地物,结点的坐标由标识号传播给线状地物和面状地物,进而还可以传播给复杂地物。
为了描述空间对象的拓扑关系,对空间对象的抽象,除了点、线、面、复杂地物外,还可以再加上结点、弧段等几何元素。如我国一些研究人员,把空间对象还分为零维对象、一维对象、二维对象、复杂对象,其中,零维对象包括独立点状地物、纯结点、结点地物(既是几何拓扑类型,又是空间地物)、注记参考点、多边形标识点。一维对象包括拓扑弧段、无拓扑弧段(也称面条地物,如等高线)、线状地物。二维对象是指面状地物,它由组成面状地物的周边弧段组成,有属性编码和属性表。复杂对象包括有边界复杂地物和无边界复杂地物。
在美国空间数据交换标准中,对矢量数据模型中的空间对象,抽象为6类分别是:复杂地物(Complex),多边形(polygon)、环(ring )、线(line)、弧(arc)、点-结点(point-node)。其中,线相当于线状地物,由弧段组成,弧是指圆弧、B样条曲线等光滑的数学曲线,环是为了描述带岛屿的复杂多边形而新增的,结点作为一种点对象和点状地物合并为点-结点类。
在定义一个地物类型时,除按属性类别分类外,还要声明它的几何类型,例如定义建筑物类时,声明它的几何类型为面状地物,此时它自动联接到面状地物的数据结构,继承超类的几何位置信息及有关对几何数据的操作。这种联接可以通过类标识和对象标识实现。
五、面向对象的属性数据模型
关系数据模型和关系数据库管理系统基本上适应于GlS中属性数据的表达与管理。但如果采用面向对象数据模型,语义将更加丰富,层次关系也更明了。与此同时,它又能吸收关系数据模型和关系数据库的优点,或者说它在包含关系数据库管理系统的功能基础上,在某些方面加以扩展,增加面向对象模型的封装、继承、信息传播等功能。
GIS中的地物可根据国家分类标准或实际情况划分类型。如一个大学GIS的对象可分为建筑物、道路、绿化、管线等几大类,地物类型的每一大类又可以进一步分类,如建筑物可再分成教学楼、科研实验楼、行政办公楼、教工住宅、学生宿舍、后勤服务建筑、体育楼等子类,管线可再分为给水管道、污水管道、电信管道、供热管道、供气管道等,另一方面,几种具有相同属性和操作的类型可综合成一个超类。
六、面向对象数据库系统的实现方式
面向对象的数据模型为用户提供了自然的丰富的数据语义,从概念上将人们对GIS的理解提高到了一个新的高度。同时它又巧妙地容纳了GIS中拓扑数据结构的思想,能有效地表达空间数据的拓扑关系。另一方面,面向对象数据模型在表达和处理属性数据时,又具有许多独特的优越性。因而,完全有可能采用面向对象的数据模型和面向对象的数据库管理系统同时表达和管理图形和属性数据,结束目前许多GIS软件将它们分开处理的历史。
目前,采用面向对象数据模型,建立面向对象数据库系统,主要有三种实现方式:
1、扩充面向对象程序设计语言(OOPL),在OOPL中增加DBMS的特性
面向对象数据库系统的一种开发途径便是扩充OOPL,使其处理永久性数据。典型的OOPL有Smalltalk和C十十。在OODBMS中增加处理和管理地理信息数据的功能,则可形成地理信息数据库系统。在这种系统中,对象标识符为指向各种对象的指针;地理信息对象的查询通过指针依次进行(巡航查询);这类系统具有计算完整性。
这种实现途径的优点是:①能充分利用OOPL强大的功能,相对地减少开发工作量;②容易结合现有的C十十(或C)语言应用软件,使系统的应用范围更广。这种途径的缺点是没有充分利用现有的DBMS所具有的功能。
2、扩充RDBMS,在RDBMS中增加面向对象的特性
RDBMS是目前应用最广泛的数据库管理系统。既可用常规程序设计语言(如C、FORTRAN等)扩充RDBMS,也可用OOPL(如C十十)扩充RDBMS。IRIS就是用C语言和LISP语言扩展RDBMS所形成的一种OODBMS。
这种实现途径的优点是:①能充分利用RDBMS的功能,可使用或扩展SQl查询语言; ②采用OOPL扩展RDBMS时,能结合二者的特性,大大减少开发的工作量。这种途径的缺点是数据库I/O检查比较费时,需要完成一些附加操作,所以查询效率比纯OODBMS低。
3、建立全新的支持面向对象数据模型的OODBMS
这种实现途径从重视计算完整性的立场出发,以记述消息的语言作为基础,备有全新的数据库程序设计语言(DBPL)或永久性程序设计语言(PPL)。此外,它还提供非过程型的查询语言。它并不以OOPL作为基础,而是创建独自的面向对象DBPl。
这种实现途径的优点是:①用常规语言开发的纯OODBMS全面支持面向对象数据模 型,可扩充性较强,操作效率较高;②重视计算完整性和非过程查询。这种途径的缺点是数据库结构复杂,并且开发工作量很大。
上述三种开发途径各有利弊,侧重面也各有不同。第一种途径强调OOPL中的数据永久化;第二种途径强调RDBMS的扩展;第三种途径强调计算完整性和纯面向对象数据模型的实现。这三种途径也可以结合起来,充分利用各自的特点,既重视OOPL和RDBMS的扩展,也强调计算完整性。
七、Geostar 中的空间对象模型
Geostar软件是由武汉测绘科技大学测绘遥感信息工程国家重点实验室研制开发的面向对象的GIS软件。
在Geostar中,把GIS需要的地物抽象成结点、弧段、点状地物、线状地物、面状地物和无空间拓扑关系的面条地物。为了便于组织与管理,对空间数据库又设立了工程、工作区和专题层,工程包含了某个GIS工程需要处理的空间对象,工作区则是在某一个范围内,对某几种类型的地物,或某几个专题的地物进行操作的区域。从工程和地物的属性而言,空间地物又可以进一步向上抽象,按属性特征划分为各种地物类型,若干种地物类型组成一个专题层。同一地理空间的多个专题层组成一个工作区,而一个工程又可以包含一个或多个工作区。这种从下到上的抽象过程与从上往下的分解过程组成了GIS中的面向对象模型(如图4—14所示)。一方面它表达了地理空间的自然特性,接近人们对客观事物的理解;另一方面,它完整地表达了各类地理对象(大到工程,小到结点)之间的各种关系,而且用层次方法清晰地表达了它们之间的联系。同时,为了表达方便,在Geostar中,还设立了一个数据结构—位置坐标(Location),为了制图的方便,还包括制图的辅助对象如注记、符号、颜色等。
虽然,完全意义上的面向对象的空间数据库系统尚未出现,但目前已有的成果已经显示,面向对象的数据库系统会逐步成为空间数据库的基本结构形式。