面向对象数据模型
- 格式:docx
- 大小:90.91 KB
- 文档页数:7
第三节 面向对象数据模型
已于前述, 目前非空间数据最主要的数据模型是层次模型、 网状模型和
关系模型。这里,我们分别介绍它们用于 GIS 地理数据库的局限性
(1)层次模型用于 GIS 地理数据库的局限性
层次模型反映了地理世界中实体之间的层次关系, 在描述地理世界中自
然的层次结构关系时简单、直观,易于理解,并在一定程度上支持数据的重构。
它用于 GIS 地理数据库存在的主要问题是:
1)、很难描述复杂的地理实体之间的联系,描述多对多的关系时导
致物理存储上的冗余;
2)、对任何对象的查询都必须从层次结构的根结点开始,低层次对
象的查询效率很低,很难进行反向查询;
3)、数据独立性较差,数据更新涉及许多指针,插入和删除操作比较
复杂,父结点的删除意味着其下层所有子结点均被删除;
4)、层次命令具有过程式性质,要求用户了解数据的物理结构,并在
数据控制命令中显式地给出数据的存取路径;
5)、基本不具备演绎功能和操作代数基础。
(2)网状模型用于 GIS 地理数据库的局限性
网状模型是层次模型的普通形式,反映了地理世界中常见的多对多关
系, 在一定程度上支持数据的重构, 具有一定的数据独立和数据共享特性, 且运
行效率较高。用于 GIS 地理数据库的主要问题如下:
1)、由于网状结构的复杂性,增加了用户查询的定位艰难,要求用
户熟悉数据的逻辑结构,知道自己所处的位置;
2) 、网状数据操作命令具有过程式性质, 存在与层次模型相同的问题;
3)、不直接支持对于层次结构的表达;
4)、基本不具备演绎功能和操作代数基础。
(3)关系模型用于 GIS 地理数据库的局限性 关系模型表示各种地理实体及此间的关系, 方式简单、 灵便, 支持数据
重构; 具有严格的数学基础, 并与一阶逻辑理论密切相关, 具有一定的演绎功能;
关系操作和关系演算具有非过程式特点。 尽管如此, 关系模型用于 GIS 地理数据
库也还存在一些不足。主要问题是:
1)、无法用递归和嵌套的方式来描述复杂关系的层次和网状结构,
摹拟和操作复杂地理对象的能力较弱;
2)、用关系模型描述本身具有复杂结构和涵义的地理对象时,需对
地理实体进行不自然的分解, 导致存储模式、 查询途径及操作等方面均显得语义
不甚合理;
3)、由于概念模式和存储模式的相互独立性,及实现关系之间的联系
需要执行系统开消较大的联接操作,运行效率不够高。
不难看出,关系模型的根本问题是不能有效地管理复杂地理对象。
面向对象的基本概念是在本世纪 70 年代萌发出来的,它的基本做法是
把系统工程中的某个模块和构件视为问题空间的一个或者一类对象。到了 80 年代,
面向对象的方法得到很快发展, 在系统工程、 计算机、 人工智能等领域获得了广
泛应用。 但是, 在更高级的层次上和更广泛的领域内对面向对象的方法进行研究
还是 90 年代的事。
(1)基本思想和基本概念
面向对象的基本思想是通过对问题领域进行自然的分割, 用更接近人类
通常思维的方式建立问题领域的模型, 并进行结构摹拟和行为摹拟, 从而使设计
出的软件能尽可能地直接表现出问题的求解过程。 因此, 面向对象的方法就是以
接近人类通常思维方式的思想, 将客观世界的一切实体模型化为对象。 每一种对
象都有各自的内部状态和运动规律, 不同对象之间的相互联系和相互作用就构成
了各种不同的系统。
在面向对象的方法中,对象、类、方法和消息是基本的概念。
对象——含有数据和操作方法的独立模块, 可以认为是数据和行为的统
一体。 如一个城市、 一棵树均可作为地理对象。 对于一个对象, 应具有如下特征:
·具有一个惟一的标识,以表明其存在的独立性;
·具有一组描述特征的属性,以表明其在某一时刻的状态;
·具有一组表示行为的操作方法,用以改变对象的状态。 类——共享同一属性和方法集的所有对象的集合构成类。从一组对象中
抽象出公共的方法和属性, 并将它们保存在一类中, 是面向对象的核心内容。 如
河流均具有共性,如名称、长度、流域面积等,以及相同的操作方法,如查询、
计算长度、求流域面积等,于是可抽象为河流类。被抽象的对象,称为实例,如
长江、黄河等。
消息——对对象进行操作的请求, 是连接对象与外部世界的惟一通
道。
方法——对对象的所有操作, 如对对象的数据进行操作的函数、 指
令、例程等。
(2)面向对象的特性
面向对象方法具有抽象性、封装性、多态性等特性。
抽象是对现实世界的简明表示。 形成对象的关键是抽象, 对象是抽象
思维的结果。抽象思维是通过概念、判断、推理来反映对象的本质,揭示对象内
部联系的过程。 任何一个对象都是通过抽象和概括而形成的。 面向对象方法具有
很强的抽象表达能力, 正是因为这个缘故, 可以将对象抽象成对象类, 实现抽象
的数据类型,允许用户定义数据类型。
封装是指将方法与数据放于一对象中, 以使对数据的操作只可通过该对
象本身的方法来进行。 即一对象不能直接作用于另一对象的数据, 对象间的通信
只能通过消息来进行。对象是一个封装好的独立模块。封装是一种信息隐蔽技术,
封装的目的在于将对象的使用者和对象的设计者分开, 用户只能见到对象封装界
面上的信息,对象内部对用户是隐蔽的。也就是说,对用户而言,只需了解这个
模块是干什么的即功能是什么, 至于怎么干即如何实现这些功能则是隐蔽在对象
内部的。 一个对象的内部状态不受外界的影响, 其内部状态的改变也不影响其它
对象的内部状态。 封装本身即模块性, 把定义模块和实现模块分开, 就使得用面
向对象技术开辟或者设计的软件的可维护性、可修改性大为改善。
多态是指同一消息被不同对象接收时, 可解释为不同的含义。 因此, 可
以发送更普通的消息, 把实现的细节都留给接收消息的对象。 即相同的操作可作
用于多种类型的对象,并能获得不同的结果。
(3)面向对象数据模型的四种核心技术
1)、分类
类是具有相同属性结构和操作方法的对象的集合, 属于同一类的对象具
有相同的属性结构和操作方法。分类是把一组具有相同属性结构和操作方法的对
象归纳或者映射为一个公共类的过程。对象和类的关系是“实例”(instance-of) 的关系。 同一个类中的若干个对象, 用于类中所有对象的操作都是相同的。 属性
结构即属性的表现形式相同, 但它们具有不同的属性值。 所以, 在面向对象的数
据库中, 只需对每一个类定义一组操作, 供该类中的每一个对象使用, 而类中每一个 对象的属性值要分别存储, 因为每一个对象的属性值是不彻底相同的。 例如,
在面 向对象的地理数据模型中,城镇建造可分为行政区、商业区、住宅区、文化区等 若干个类。以住宅区类而论,每栋住宅作为对象都有门牌号、地址、电话号码等 相同的属性结构,但具体的门牌号、地址、电话号码等是各不相同的。固然,对 它们的操作方法如查询等都是相同的。
2)、概括
概括是把几个类中某些具有部份公共特征的属性和操作方法抽象出来,
形成一个更高层次、更具普通性的超类的过程。子类和超类用来表示概括的特征,
表明它们之间的关系是“即是”(is—a)关系,子类是超类的一个特例。
作为构成超类的子类还可以进一步分类, 一个类可能是超类的子类, 同
时也可能是几个子类的超类。所以,概括可能有任意多层次。例如,建造物是住
宅的超类, 住宅是建造物的子类, 但如果把住宅的概括延伸到城市住宅和农村住
宅,则住宅又是城市住宅和农村住宅的超类。
概括技术的采用避免了说明和存储上的大量冗余, 因为住宅地址、 门牌
号、 电话号码等是“住宅”类的实例(属性),同时也是它的超类“建造物”的实
例(属性)。固然, 这需要一种能自动地从超类的属性和操作中获取子类对象的属
性和操作的机制。
3)、会萃
会萃是将几个不同类的对象组合成一个更高级的复合对象的过程。术语
“复合对象”用来描述更高层次的对象, “部份”或者“成份”是复合对象的组成 部份, “成份”与“复合对象”的关系是“部份”(parts—of)的关系,反之“复 合对象”与“成份”的关系是“组成”的关系。例如,医院由医护人员、病人、 门诊部、住院部、道路等会萃而成。
每一个不同属性的对象是复合对象的一个部份, 它们有自己的属性数据和操 作方法, 这些是不能为复合对象所公用的, 但复合对象可以从它们那里派生得到 一些信息。 复合对象有自己的属性值和操作, 它只从具有不同属性的对象中提取 部份属性值, 且普通不继承子类对象的操作。 这就是说, 复合对象的操作与其成 分的操作是不兼容的。
4)、联合
联合是将同一类对象中的几个具有部份相同属性值的对象组合起来, 形成
一个更高水平的集合对象的过程。术语“集合对象”描述由联合而构成的更高水
平的对象, 有联合关系的对象称为成员, “成员”与“集合对象”的关系是“成
员”(member—of)的关系。