3.3 GIS数据结构(3)
面向对象的数据结构表示法
面向对象(Object-Oriented,简称OO)技术最早出现在20世纪60年代,但在80年代后期至今已得到广泛的应用。在GIS中,为更好地表示现实世界,地理数据也用到面向对象的数据模型。
1.面向对象的概念
面向对象模型是含有数据和操作方法的独立模块,可以认为是数据和行为的统一体。对象可以识别、可以描述的实体,因此,分布在地球表面的所有可以描述的地理实体,都可以视为对象(Object)。如一个城市、一棵树均可作为地理对象。这些数据操作和运算行为都称为对象的方法。对象的特点:① 具有一个唯一的标识,以表明其存在的独立性;② 具有一组描述特征的属性,以表明其在某一时刻的状态——静态属性数据;③ 具有一组表示行为的操作方法,用以改变对象的状态——作用、功能—函数、方法。
通过寻找共同点,所有具有共性的系统成分就可为一种对象。根据对象的共性,及对它研究的目的可划分为类、实例和消息等。它们之间的关系如图3.20所示。

图3.20对象、类 、实例和消息
(1)类(Class):共享同一属性和方法集的所有对象的集合构成类。如河流均具有共性,如名称、长度、流域面积等,以及相同的操作方法,如查询、计算长度、求流域面积等,因而可抽象为河流类。类可组合为“超类(Superclass)”或分为“子类(Subclass)”。例如:城市和县市都属于某一个省,因此,省是城市和县的超类,城市和县是省的子类。
(2)实例(Instance):类的一个具体对象,称为实例,如长江、黄河等。真正抽象的河流不存在,只存在河流的例子。类是抽象的对象,是实例的组合。类和实例是相对的,类和实例的关系为上下层关系。
(3)消息(Message):对象之间的请求和协作,称为消息。如单击“鼠标”,就是对按钮提出请求,就是消息。
2面向对象数据模型
面向对象数据的模型是以对象的属性和方法来表示、记录和存储地理数据的,而且地理实体的定位特性与专题属性一样,都表示为对象的属性。每一个对象都属于一个类别。图3.21以“城市类”为例,可以看出由类产生对象实际上是以具体的数据来描述一个具体对象的属性,并将这些数据和该类对象所允许的行为,即操作和运算数据方法,包装在一起,将其中一些属性数据和方法隐藏起来不让外部对象访问、调用、修改和执行。外部对象只能发给它一个消息(请求),让它根据其类型定义对数据进行一定的操作或运算。

图3.21“城市”类与实例
3.面向对象的特性
面向对象具有三个特性,即抽象、封装和多态。
(1)抽象:是对现实世界的简明表示。形成对象的关键是抽象,对象是抽象思维的结果。
(2)封装:指把对象的状态及其操作集成化,使之不受外界影响。这种将对象的属性和方法包装在一起并加以隐藏的特性,也称为“对象的封闭性”。
(3)多态:是指同一消息被不同对象接收时,可解释为不同的含义。同一消息,对不同对象,功能不同。功能重载多态,简化消息,但功能不减。
4.面向对象的核心技术
面向对象具有四种核心技术,即分类、概括、聚集和联合。
(1)分类:把一组具有相同属性结构和操作方法的对象归纳或映射为一个公共类的过程。如建筑物可分为住宅、厂房等,住宅可分为城市住宅和农村住宅等,城市住宅可分为行政区、商业区、住宅区、文化区等若干个类(如图3.22)。

图3.22 对象分类
(2)概括:将相同特征和操作的类再抽象为一个更高层次、更具一般性的超类的过程。子类是超类的一个特例。一个类可以是超类的子类,也可是几个子类的超类。所以,概括可能有任意多层次。概括技术避免了存储上的大量冗余。这需要一种能自动地从超类的属性和操作中获取子类对象的属性和操作的机制,即继承机制。
(3)聚集:把几个不同性质类的对象组合成一个更高级的复合对象的过程。
(4)联合:相似对象抽象组合为集合对象。其操作是成员对象的操作集合。
5.面向对象数据模型的核心工具
面向对象数据模型有两种核心工具,即继承和传播。
(1)继承:一类对象可继承另一类对象的特性和能力,子类继承父类的共性,继承不仅可以把父类的特征传给中间子类,还可以向下传给中间子类的子类。子类还可定义自己新的数据结构,它服务于概括。继承机制可减少代码冗余,减少相互间的接口和界面。子类若任意使用父类的数据结构,有可能破坏封装,若只能通过发送消息来使用父类的域,又可能失去有效性。继承的类型有单重继承和多重继承,有全部继承和部分继承,有取代继承和包含继承等,可在图3.23中体现。

图3.23 继承类型示例
(2)传播:指复杂对象的某些属性值不单独存于数据库中,而由子对象派生或提取,并将子(成员)对象的属性信息强制地传播给综合复杂对象。成员对象的属性只存储一次,以保证数据一致性和减少冗余。如福州市总人口,由存储在各成员对象中的各区人口总和。继承与传播又有区别,表现在:①继承服务于概括,传播作用于联合和聚集;② 继承是从上层到下层,应用于类,而传播是自下而上,直接作用于对象;③ 继承包括属性和操作,而传播一般仅涉及属性;④继承是一种信息隐含机制,只要说明子类与父类的关系,则父类的特征一般能自动传给它的子类,而传播是一种强制性工具,需要在复合对象中显式定义它的每个成员对象,并说明它需要传播那些属性值。
6.案例2
在ArcGIS软件中,数据结构就是一种基于对象的表达:
(1)对象类(Object class)
在Geodatabase中对象类是一种特殊的类,它没有空间特征,是指存储非空间数据的表格(Table)。
(2)要素类(Feature class)
同类空间要素的集合即为要素类。如:河流、道路、植被、用地、电缆等。要素类之间可以独立存在,也可具有某种关系。当不同的要素类之间存在关系时,我们将其组织到一个要素数据集(Feature dataset)中。
(3)要素数据集(Featuredataset)
要素数据集由一组具有相同空间参考(Spatial Reference)的要素类组成。将不同的要素类放到一个要素数据集下一般有三种情况:
①专题归类表示——当不同的要素类属于同一范畴。
②创建几何网络——在同一几何网络中充当连接点和边的各种要素类,须组织到同一要素数据集中。。
③考虑平面拓扑(Planar topologies)——共享公共几何特征的要素类。
存放了简单要素的要素类可以存放于要素集中,也可以作为单个要素类直接存放在Geodatabase的目录下。直接存放在Geodatabase目录下的要素类也称为独立要素类(standalonefeature)。存储拓扑关系的要素类必须存放到要素集中,使用要素集的目的是确保这些要素类具有统一的空间参考,以利于维护拓扑。Geodatabase支持要素类之间的逻辑完整性,体现为对复杂网络(complexnetworks)、拓扑规则和关联类等的支持。
(4)关系类(Relationshipclass)
定义两个不同的要素类或对象类之间的关联关系。
(5)几何网络(Geometricnetwork)
几何网络是在若干要素类的基础上建立的一种新的类。
(6) Domains
定义属性的有效取值范围。可以是连续的变化区间,也可以是离散的取值集合。
(7)Validation rules
对要素类的行为和取值加以约束的规则。
(8)Raster Datasets
用于存放栅格数据。可以支持海量栅格数据,支持影像镶嵌。
(9)TIN Datasets
TIN是ARC/INFO非常经典的数据模型,用不规则分布的采样点的采样值(通常是高程值,也可以是任意其它类型的值)构成的不规则三角集合。用于表达地表形状或其它类型的空间连续分布特征。
(10)Locators
定位器(Locator)是定位参考和定位方法的组合,对不同的定位参考,用不同的定位方法进行定位操作。所谓定位参考,不同的定位信息有不同的表达方法,在geodatabase中,有四中定位信息:地址编码、<X,Y>、地名及邮编、路径定位。定位参考数据放在数据库表中,定位器根据该定位参考数据在地图上生成空间定位点。

