gis二次开发概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意,每个子类只定义那些这个类所特有的特性。而如果没有按级分类,每类都必须显式的 定义它所有的特性。
z 多态 多态是 OOP 的另一个重要概念。多态的意思是事物具有不同形式的能力。举个例子,对于不
同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。比如说加法操 作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。
g)
1.2.1 面向对象程序设计模式
发明面向对象程序设计方法的主要出发点是弥补面向过程程序设计方法中的一些缺点。OOP 把数 据看作程序开发中的基本元素,并且不允许它们在系统中自由流动。它将数据和操作这些数据的 函数紧密的连结在一起,并保护数据不会被外界的函数意外的改变。OOP 允许我们将问题分解为 一系列实体——这些实体被称为对象(object),然后围绕这些实体建立数据和函数。面向对象程 序设计中的数据和函数的组织结构如图 4 所示。
合 GIS 工具软件与当今可视化开发语言的集成二次开发方式就成为 GIS 应用开发的主流。它的优 点是既可以充分利用 GIS 工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发 语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且 使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且
fruit mango; 就创建了一个 fruit 类的对象 mango。
z 数据抽象和封装 把数据和函数包装在一个单独的单元(称为类)的行为称为封装。数据封装是类的最典型特
点。数据不能被外界访问,只能被封装在同一个类中的函数访问。这些函数提供了对象数据和程 序之间的接口。避免数据被程序直接访问的概念被称为“数据隐藏”。
利用 GIS 工具软件生产厂家提供的建立在 OCX 技术基础上的 GIS 功能控件,如 ESRI 的 MapObjects、MapInfo 公司的 MapX 等,在 Delphi 等编程工具编制的应用程序中,直接将 GIS 功 能嵌入其中,实现地理信息系统的各种功能
z 三种实现方式的分析与比较 由于独立开发难度太大,单纯二次开发受 GIS 工具提供的编程语言的限制差强人意,因此结
Biblioteka Baidu
z 对象 在一个面向对象的系统中,对象是运行期的基本实体。它可以用来表示一个人或者说一个银
行帐户,一张数据表格,或者其它什么需要被程序处理的东西。它也可以用来表示用户定义的数
云南大学 杨克诚
kecheng@yang.com.cn
3
第 1 章 GIS 二次开发
据,例如一个向量,时间或者列表。在面向对象程序设计中,问题的分析一般以对象及对象间的 自然联系为依据。如前所述,对象在内存中占有一定空间,并且具有一个与之关联的地址,就像 Pascal 中的 record 和 C 中的结构一样。
云南大学 杨克诚
kecheng@yang.com.cn
5
第 1 章 GIS 二次开发
在结构化程序设计中,另一个严重的缺陷是不能很好的模拟真实世界的问题。这是因为函数 都是面向过程的,而不是真正的对应于问题中的各个元素。
面向过程的程序设计的一些特点如下: ·强调做(算法); ·大程序被分隔为许多小程序,这些小程序称为函数; ·大多数函数共享全局数据; ·数据开放的由一个函数流向另一个函数。函数把数据从一种形式转换为另一种形式。 采用由上至下的程序设计方法。
例如,知更鸟属于飞鸟类,也属于鸟类。就像图 5 中描绘的那样,这种分类的原则是,每一个子 类都具有父类的公共特性。
云南大学 杨克诚
kecheng@yang.com.cn
4
第 1 章 GIS 二次开发
在 OOP 中,继承的概念很好的支持了代码的重用性(reusability),也就是说,我们可以向一 个已经存在的类中添加新的特性,而不必改变这个类。这可以通过从这个已存在的类派生一个新 类来实现。这个新的类将具有原来那个类的特性,以及新的特性。而继承机制的魅力和强大就在 于它允许程序员利用已经存在的类(接近需要,而不是完全符合需要的类),并且可以以某种方式 修改这个类,而不会影响其它的东西。
云南大学 杨克诚
kecheng@yang.com.cn
2
第 1 章 GIS 二次开发
1.2.2 什么是面向对象程序设计?
面向对象程序设计(OOP)技术汲取了结构化程序设计中好的思想,并将这些思想与一些新 的、强大的理念相结合,从而给你的程序设计工作提供了一种全新的方法。通常,在面向对象的 程序设计风格中,你会将一个问题分解为一些相互关联的子集,每个子集内部都包含了相关的数 据和函数。同时,你会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型 的变量。当你定义了一个对象,你就隐含的创建了一个新的数据类型。
z类 我们刚才提到,对象包含数据以及操作这些数据的代码。一个对象所包含的所有数据和代码
可以通过类来构成一个用户定义的数据类型。事实上,对象就是类类型(class type)的变量。一 旦定义了一个类,我们就可以创建这个类的多个对象,每个对象与一组数据相关,而这组数据的 类型在类中定义。因此,一个类就是具有相同类型的对象的抽象。例如,芒果、苹果和桔子都是 fruit 类的对象。类是用户定义的数据类型,但在一个程序设计语言中,它和内建的数据类型行为 相同。比如创建一个类对象的语法和创建一个整数对象的语法一模一样。如果 fruit 被定义为一个 类,那么语句
简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。 在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种方
式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用 了对象的私有部分。
z 继承 继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。
在多函数程序中,许多重要的数据被声明为全局变量,这样它们才可以被所有的函数访问。 每个函数又可以具有它自己的局部变量。全局变量很容易被某个函数不经意之间改变。而在一个 大程序中,很难分辨每个函数都使用了哪些变量。如果我们需要修改某个外部数据的结构,我们 就要修改所有访问这个数据的函数。这很容易导致 bug 的产生。
z 宿主型二次开发 指基于 GIS 平台软件上进行应用系统开发。大多数 GIS 平台软件都提供了可供用户进行二次
开发的脚本语言,如 ESRI 的 ArcView 提供了 Avenue 语言,MapInfo 公司的 MapInfo Professional 提供了 MapBasic 语言等等。用户可以利用这些脚本语言,以原 GIS 软件为开发平台,开发出自 己的针对不同应用对象的应用程序。这种方式省时省心,但进行二次开发的脚本语言,作为编程 语言,功能极弱,用它们来开发应用程序仍然不尽如人意,并且所开发的系统不能脱离 GIS 平台 软件,是解释执行的,效率不高。
抽象指仅表现核心的特性而不描述背景细节的行为。类使用了抽象的概念,并且被定义为一 系列抽象的属性如尺寸、重量和价格,以及操作这些属性的函数。类封装了将要被创建的对象的 所有核心属性。因为类使用了数据抽象的概念,所以它们被称为抽象数据类型(ADT)。
z 封装 封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。它同样允许创建对象。
当一个程序运行时,对象之间通过互发消息来相互作用。例如,程序中包含一个“customer” 对象和一个“account”对象,而 customer 对象可能会向 account 对象发送一个消息,查询其银行 帐目。每个对象都包含数据以及操作这些数据的代码。即使不了解彼此的数据和代码的细节,对 象之间依然可以相互作用,所要了解的只是对象能够接受的消息的类型,以及对象返回的响应的 类型,虽然不同的人会以不同的方法实现它们。
云南大学 杨克诚
kecheng@yang.com.cn
1
第 1 章 GIS 二次开发
可靠性好、易于移植、便于维护。尤其是使用 OCX 技术利用 GIS 功能组件进行集成开发,更能 表现出这些优势。
由于上述优点,集成二次开发正成为应用 GIS 开发的主流方向。这种方法唯一的缺点是前期 投入比较大,需要同时购买 GIS 工具软件和可视化编程软件,但“工欲善其事,必先利其器”,这 种投资值得。
目前许多软件公司都开发了很多 ActiveX 控件,合理选择和运用现成的控件,减少了开发者 的编程工作量,使开发者避开某些应用的具体编程,直接调用控件,实现这些具体应用,不仅可 以缩短程序开发周期,使编程过程更简洁,用户界面更友好,可以使程序更加灵活、简便。
1.2 面向对象的开发 (OOP: Object Oriented Programmin-
1.2.3 面向对象程序设计中的基本概念
“面向对象”作为一个术语,在不同的人群中有着不同的解释。因此,了解一些在面向对象 程序设计中广泛应用的概念是必须的。本节我们讨论以下这些内容:
1、对象(Object) 2、类(Class) 3、数据抽象(Data abstraction) 4、继承(Inheritance) 5、动态绑定(Dynamic binding) 6、数据封装(Data encapsulation) 7、多态性(Polymorphism) 8、消息传递(Message passing)
z 动态绑定 绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定的意思是,与给定的过程
调用相关联的代码只有在运行期才可知。它与多态和继承的联系极为紧密。一个多态引用的函数 调用决定于这个引用的动态类型。
图 6 演示了一个函数处理不同数量、不同类型的参数。就像某个单词在不同的上下文中具有 不同的含义
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对 象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。多 态在实现继承的过程中被广泛应用。
面向对象程序设计语言支持多态,术语称之为“one interface multiple method(一个接口,多 个实现)”。简单来说,多态机制允许通过相同的接口引发一组相关但不相同的动作,通过这种方 式,可以减少代码的复杂度。在某个特定的情况下应该作出怎样的动作,这由编译器决定,而不 需要程序员手工干预。
第 1 章 GIS 二次开发
Chapter 1.GIS 二次开发概述
地理信息系统根据其内容可分为两大基本类型:一是应用型地理信息系统,以某一专业、领 域或工作为主要内容,包括专题地理信息系统和区域综合地理信息系统;二是工具型地理信息系 统,也就是 GIS 工具软件包,如 ARC/INFO 等,具有空间数据输入、存储、处理、分析和输出等 GIS 基本功能。随着地理信息系统应用领域的扩展,应用型 GIS 的开发工作日显重要。如何针对 不同的应用目标,高效地开发出既合乎需要又具有方便美观丰富的界面形式的地理信息系统,是 GIS 开发者非常关心的问题。
z 基于 GIS 组件的二次开发 大多数 GIS 软件产商都提供商业化的 GIS 组件,如 ESRI 公司的 MapObjects、MapInfo 公司
的 MapX 等,这些组件都具备 GIS 的基本功能,开发人员可以基于通用软件开发工具尤其是可视 化开发工具,如 Delphi、Visual C++、Visual Basic、Power Builder 等为开发平台,进行二次开发。
1.1 GIS 开发模式
z 独立开发 指不依赖于任何 GIS 工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所
有的算法都由开发者独立设计,然后选用某种程序设计语言,如 Visual C++、Delphi 等,在一定 的操作系统平台上编程实现。这种方式的好处在于无须依赖任何商业 GIS 工具软件,减少了开发 成本,但一方面对于大多数开发者来说,能力、时间、财力方面的限制使其开发出来的产品很难 在功能上与商业化 GIS 工具软件相比,而且在购买 GIS 工具软件上省下的钱可能还抵不上开发者 在开发过程中绞尽脑汁所花的代价。
z 多态 多态是 OOP 的另一个重要概念。多态的意思是事物具有不同形式的能力。举个例子,对于不
同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。比如说加法操 作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。
g)
1.2.1 面向对象程序设计模式
发明面向对象程序设计方法的主要出发点是弥补面向过程程序设计方法中的一些缺点。OOP 把数 据看作程序开发中的基本元素,并且不允许它们在系统中自由流动。它将数据和操作这些数据的 函数紧密的连结在一起,并保护数据不会被外界的函数意外的改变。OOP 允许我们将问题分解为 一系列实体——这些实体被称为对象(object),然后围绕这些实体建立数据和函数。面向对象程 序设计中的数据和函数的组织结构如图 4 所示。
合 GIS 工具软件与当今可视化开发语言的集成二次开发方式就成为 GIS 应用开发的主流。它的优 点是既可以充分利用 GIS 工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发 语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且 使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且
fruit mango; 就创建了一个 fruit 类的对象 mango。
z 数据抽象和封装 把数据和函数包装在一个单独的单元(称为类)的行为称为封装。数据封装是类的最典型特
点。数据不能被外界访问,只能被封装在同一个类中的函数访问。这些函数提供了对象数据和程 序之间的接口。避免数据被程序直接访问的概念被称为“数据隐藏”。
利用 GIS 工具软件生产厂家提供的建立在 OCX 技术基础上的 GIS 功能控件,如 ESRI 的 MapObjects、MapInfo 公司的 MapX 等,在 Delphi 等编程工具编制的应用程序中,直接将 GIS 功 能嵌入其中,实现地理信息系统的各种功能
z 三种实现方式的分析与比较 由于独立开发难度太大,单纯二次开发受 GIS 工具提供的编程语言的限制差强人意,因此结
Biblioteka Baidu
z 对象 在一个面向对象的系统中,对象是运行期的基本实体。它可以用来表示一个人或者说一个银
行帐户,一张数据表格,或者其它什么需要被程序处理的东西。它也可以用来表示用户定义的数
云南大学 杨克诚
kecheng@yang.com.cn
3
第 1 章 GIS 二次开发
据,例如一个向量,时间或者列表。在面向对象程序设计中,问题的分析一般以对象及对象间的 自然联系为依据。如前所述,对象在内存中占有一定空间,并且具有一个与之关联的地址,就像 Pascal 中的 record 和 C 中的结构一样。
云南大学 杨克诚
kecheng@yang.com.cn
5
第 1 章 GIS 二次开发
在结构化程序设计中,另一个严重的缺陷是不能很好的模拟真实世界的问题。这是因为函数 都是面向过程的,而不是真正的对应于问题中的各个元素。
面向过程的程序设计的一些特点如下: ·强调做(算法); ·大程序被分隔为许多小程序,这些小程序称为函数; ·大多数函数共享全局数据; ·数据开放的由一个函数流向另一个函数。函数把数据从一种形式转换为另一种形式。 采用由上至下的程序设计方法。
例如,知更鸟属于飞鸟类,也属于鸟类。就像图 5 中描绘的那样,这种分类的原则是,每一个子 类都具有父类的公共特性。
云南大学 杨克诚
kecheng@yang.com.cn
4
第 1 章 GIS 二次开发
在 OOP 中,继承的概念很好的支持了代码的重用性(reusability),也就是说,我们可以向一 个已经存在的类中添加新的特性,而不必改变这个类。这可以通过从这个已存在的类派生一个新 类来实现。这个新的类将具有原来那个类的特性,以及新的特性。而继承机制的魅力和强大就在 于它允许程序员利用已经存在的类(接近需要,而不是完全符合需要的类),并且可以以某种方式 修改这个类,而不会影响其它的东西。
云南大学 杨克诚
kecheng@yang.com.cn
2
第 1 章 GIS 二次开发
1.2.2 什么是面向对象程序设计?
面向对象程序设计(OOP)技术汲取了结构化程序设计中好的思想,并将这些思想与一些新 的、强大的理念相结合,从而给你的程序设计工作提供了一种全新的方法。通常,在面向对象的 程序设计风格中,你会将一个问题分解为一些相互关联的子集,每个子集内部都包含了相关的数 据和函数。同时,你会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型 的变量。当你定义了一个对象,你就隐含的创建了一个新的数据类型。
z类 我们刚才提到,对象包含数据以及操作这些数据的代码。一个对象所包含的所有数据和代码
可以通过类来构成一个用户定义的数据类型。事实上,对象就是类类型(class type)的变量。一 旦定义了一个类,我们就可以创建这个类的多个对象,每个对象与一组数据相关,而这组数据的 类型在类中定义。因此,一个类就是具有相同类型的对象的抽象。例如,芒果、苹果和桔子都是 fruit 类的对象。类是用户定义的数据类型,但在一个程序设计语言中,它和内建的数据类型行为 相同。比如创建一个类对象的语法和创建一个整数对象的语法一模一样。如果 fruit 被定义为一个 类,那么语句
简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。 在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种方
式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用 了对象的私有部分。
z 继承 继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。
在多函数程序中,许多重要的数据被声明为全局变量,这样它们才可以被所有的函数访问。 每个函数又可以具有它自己的局部变量。全局变量很容易被某个函数不经意之间改变。而在一个 大程序中,很难分辨每个函数都使用了哪些变量。如果我们需要修改某个外部数据的结构,我们 就要修改所有访问这个数据的函数。这很容易导致 bug 的产生。
z 宿主型二次开发 指基于 GIS 平台软件上进行应用系统开发。大多数 GIS 平台软件都提供了可供用户进行二次
开发的脚本语言,如 ESRI 的 ArcView 提供了 Avenue 语言,MapInfo 公司的 MapInfo Professional 提供了 MapBasic 语言等等。用户可以利用这些脚本语言,以原 GIS 软件为开发平台,开发出自 己的针对不同应用对象的应用程序。这种方式省时省心,但进行二次开发的脚本语言,作为编程 语言,功能极弱,用它们来开发应用程序仍然不尽如人意,并且所开发的系统不能脱离 GIS 平台 软件,是解释执行的,效率不高。
抽象指仅表现核心的特性而不描述背景细节的行为。类使用了抽象的概念,并且被定义为一 系列抽象的属性如尺寸、重量和价格,以及操作这些属性的函数。类封装了将要被创建的对象的 所有核心属性。因为类使用了数据抽象的概念,所以它们被称为抽象数据类型(ADT)。
z 封装 封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。它同样允许创建对象。
当一个程序运行时,对象之间通过互发消息来相互作用。例如,程序中包含一个“customer” 对象和一个“account”对象,而 customer 对象可能会向 account 对象发送一个消息,查询其银行 帐目。每个对象都包含数据以及操作这些数据的代码。即使不了解彼此的数据和代码的细节,对 象之间依然可以相互作用,所要了解的只是对象能够接受的消息的类型,以及对象返回的响应的 类型,虽然不同的人会以不同的方法实现它们。
云南大学 杨克诚
kecheng@yang.com.cn
1
第 1 章 GIS 二次开发
可靠性好、易于移植、便于维护。尤其是使用 OCX 技术利用 GIS 功能组件进行集成开发,更能 表现出这些优势。
由于上述优点,集成二次开发正成为应用 GIS 开发的主流方向。这种方法唯一的缺点是前期 投入比较大,需要同时购买 GIS 工具软件和可视化编程软件,但“工欲善其事,必先利其器”,这 种投资值得。
目前许多软件公司都开发了很多 ActiveX 控件,合理选择和运用现成的控件,减少了开发者 的编程工作量,使开发者避开某些应用的具体编程,直接调用控件,实现这些具体应用,不仅可 以缩短程序开发周期,使编程过程更简洁,用户界面更友好,可以使程序更加灵活、简便。
1.2 面向对象的开发 (OOP: Object Oriented Programmin-
1.2.3 面向对象程序设计中的基本概念
“面向对象”作为一个术语,在不同的人群中有着不同的解释。因此,了解一些在面向对象 程序设计中广泛应用的概念是必须的。本节我们讨论以下这些内容:
1、对象(Object) 2、类(Class) 3、数据抽象(Data abstraction) 4、继承(Inheritance) 5、动态绑定(Dynamic binding) 6、数据封装(Data encapsulation) 7、多态性(Polymorphism) 8、消息传递(Message passing)
z 动态绑定 绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定的意思是,与给定的过程
调用相关联的代码只有在运行期才可知。它与多态和继承的联系极为紧密。一个多态引用的函数 调用决定于这个引用的动态类型。
图 6 演示了一个函数处理不同数量、不同类型的参数。就像某个单词在不同的上下文中具有 不同的含义
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对 象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。多 态在实现继承的过程中被广泛应用。
面向对象程序设计语言支持多态,术语称之为“one interface multiple method(一个接口,多 个实现)”。简单来说,多态机制允许通过相同的接口引发一组相关但不相同的动作,通过这种方 式,可以减少代码的复杂度。在某个特定的情况下应该作出怎样的动作,这由编译器决定,而不 需要程序员手工干预。
第 1 章 GIS 二次开发
Chapter 1.GIS 二次开发概述
地理信息系统根据其内容可分为两大基本类型:一是应用型地理信息系统,以某一专业、领 域或工作为主要内容,包括专题地理信息系统和区域综合地理信息系统;二是工具型地理信息系 统,也就是 GIS 工具软件包,如 ARC/INFO 等,具有空间数据输入、存储、处理、分析和输出等 GIS 基本功能。随着地理信息系统应用领域的扩展,应用型 GIS 的开发工作日显重要。如何针对 不同的应用目标,高效地开发出既合乎需要又具有方便美观丰富的界面形式的地理信息系统,是 GIS 开发者非常关心的问题。
z 基于 GIS 组件的二次开发 大多数 GIS 软件产商都提供商业化的 GIS 组件,如 ESRI 公司的 MapObjects、MapInfo 公司
的 MapX 等,这些组件都具备 GIS 的基本功能,开发人员可以基于通用软件开发工具尤其是可视 化开发工具,如 Delphi、Visual C++、Visual Basic、Power Builder 等为开发平台,进行二次开发。
1.1 GIS 开发模式
z 独立开发 指不依赖于任何 GIS 工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所
有的算法都由开发者独立设计,然后选用某种程序设计语言,如 Visual C++、Delphi 等,在一定 的操作系统平台上编程实现。这种方式的好处在于无须依赖任何商业 GIS 工具软件,减少了开发 成本,但一方面对于大多数开发者来说,能力、时间、财力方面的限制使其开发出来的产品很难 在功能上与商业化 GIS 工具软件相比,而且在购买 GIS 工具软件上省下的钱可能还抵不上开发者 在开发过程中绞尽脑汁所花的代价。