1、GISGIS程序设计全册配套程序设计全册配套完整教学课件完整教学课件2 2GISGIS程序设计概述程序设计概述主要内容主要内容一一软件类型与形式软件类型与形式二二程序开发语言程序开发语言三三软件即服务软件即服务四四GISGIS程序设计分类程序设计分类五五GISGIS对程序设计的要求对程序设计的要求六六本课程教学内容本课程教学内容一、软件类型与形式一、软件类型与形式n IEEE对软件的定义(1983): 软件是计算机程序、方法、规则、相关的文档资料以及在计算机上运行的程序时所必需的数据的集合。程序程序:是计算机需要遵照执行的一系列指令,它作为一:是计算机需要遵照执行的一系列指令,它作为一种具有逻
2、辑结构的信息,精确而完整地描述计算任务中种具有逻辑结构的信息,精确而完整地描述计算任务中的处理对象和处理规则。的处理对象和处理规则。方法、规则方法、规则:通常是在文档中说明并在程序中实现的。:通常是在文档中说明并在程序中实现的。文档文档:开发、使用和维护程序所需要的图文资料。:开发、使用和维护程序所需要的图文资料。数据数据:向一个程序提供的输入。:向一个程序提供的输入。软件软件 = = 程序(方法)程序(方法) + + 数据数据+ + 文档文档一、软件类型与形式一、软件类型与形式软件类型软件类型n 系统软件系统软件:居于计算机系统中最靠近硬件的一层,:居于计算机系统中最靠近硬件的一层,其他软件
3、一般通过系统软件发挥作用。如操作系其他软件一般通过系统软件发挥作用。如操作系统、编译程序、网络软件系统、数据库系统、人统、编译程序、网络软件系统、数据库系统、人机交互软件系统等。机交互软件系统等。n 支撑软件支撑软件:支撑软件的开发与维护的软件工具和:支撑软件的开发与维护的软件工具和软件开发环境。如环境数据库、各种接口软件和软件开发环境。如环境数据库、各种接口软件和工具组等。工具组等。n 应用软件应用软件:特定应用领域专用的软件。:特定应用领域专用的软件。GISGIS软件软件一、软件类型与形式一、软件类型与形式软件表现形式软件表现形式桌面桌面组件组件浏览器浏览器服务器服务器嵌入式嵌入式一、软件
4、类型与形式一、软件类型与形式软件运行环境软件运行环境一、软件类型与形式一、软件类型与形式多种表现形式软件的挑战多种表现形式软件的挑战多种语言多种语言多种形式多种形式开发方式开发方式多种接口多种接口多个平台多个平台.以不变应万变以不变应万变与时俱进与时俱进一、软件类型与形式一、软件类型与形式C+程序设计的方法论程序设计的方法论OPPDesign Pattern经验经验实践实践功夫功夫二、程序设计语言二、程序设计语言文章文章汉语、英语汉语、英语字、词、语法结构字、词、语法结构写文章写文章程序程序计算机语言计算机语言数据表示、表达式、语句结构数据表示、表达式、语句结构编程序编程序u程序设计语言程序设
5、计语言是人与计算机之间交换信息的工具是人与计算机之间交换信息的工具. 第一代语言(1GL): 汇编语言语言高级语言非过程性语言自然语言语言机器语言 第二代语言(2GL): 第三代语言(3GL): 第四代语言(4GL): 第五代语言(5GL): 与与硬硬件件环环境境无无关关二、程序设计语言二、程序设计语言过程性语言过程性语言n 带有过程性特征的语言称为过程性语言。 用过程性语言编写的程序包含一系列的描述,告诉计算机如何执行这些过程来完成特定的工作。程序通常有一个起点和终点,执行的流程呈直线型,至上而下顺序执行。比如FORTRAN、Pascal、C语言。二、程序设计语言二、程序设计语言脚本语言脚本
6、语言n 脚本语言(Script Language)是一种简单的描述性语言,它的出现较好地解决了Web页的动态交互问题。它通过一个标记或 % 嵌入到HTML页中。脚本语言分为客户端和服务端两个不同的版本,客户端实现改变Web页外观的功能,服务器端完成输入验证、表单处理、数据库查询等功能。n 脚本需要一个主机应用系统依附来运行,不能单机运行。例如用HTML标签为显示网页编写一个脚本,则脚本由网络浏览器解释,这里的网络浏览器就是主机应用系统,没有它HTML脚本就不能运行。二、程序设计语言二、程序设计语言脚本语言示例脚本语言示例WelcomeWelcome欢迎走进计算机世界欢迎走进计算机世界%Dim
7、computerdate,cihdateDim computerdate,cihdatecomputerdate=Datecomputerdate=Datecihdate=DateValue (April 25)cihdate=DateValue (April 25)If computerdate=cihdate Then If computerdate=cihdate Then Response.write&Response.write&小心小心CIHCIH病毒发作病毒发作!End IfEnd IfResponse.write&Response.write&当前日期为当前日期为:&Now:&
8、Now%二、程序设计语言二、程序设计语言n目前常用的程序设计语言有:目前常用的程序设计语言有: C C、C+C+、C#C#、JavaJava、PascalPascal、Visual BasicVisual Basic(VBVB)、)、FlexFlex、QtQtJavaC+/C#二、程序设计语言二、程序设计语言nC+C+n C/C+的历史 汇编语言、FORTRAN、ALGOL-60、Pascal、C Smalltalk、带类的C、C+C+C+是由是由AT&T Bell(AT&T Bell(贝尔贝尔) )实验室的实验室的Bjarne StroustrupBjarne Stroustrup博士及其同
9、博士及其同事于事于2020世纪世纪8080年代初在年代初在C C语言的基础上开发成功的。语言的基础上开发成功的。C+C+保留了保留了C C语言原有的所有优点,增加了面向对象的机制。语言原有的所有优点,增加了面向对象的机制。 C+语言的特点C+C+是由是由C C发展而来的,与发展而来的,与C C兼容。用兼容。用C C语言写的程序基本上可以不加语言写的程序基本上可以不加修改地用于修改地用于C+C+。从。从C+C+的名字可以看出它是的名字可以看出它是C C的超集。的超集。C+C+既可既可用于面向过程的结构化程序设计,又可用于面向对象的程序设用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是
10、一种功能强大的混合型的程序设计语言。计,是一种功能强大的混合型的程序设计语言。二、程序设计语言二、程序设计语言nC+C+n C+语言的特点 支持OOP的最主要代表语言 代码简洁高效率 是C语言的超集 是使用最广泛、最主流的程序设计语言以不变应万变的看家本领!以不变应万变的看家本领!二、程序设计语言二、程序设计语言nC#C#NET NET 框架类库框架类库 FrameworkFramework 二、程序设计语言二、程序设计语言nC#C#n C#C#大多数特点和大多数特点和JAVAJAVA一致一致n C#C#用的符号和用的符号和C,C+C,C+接近接近n 完全面向对象语言完全面向对象语言n C+C
11、+不是完全面向对象语言不是完全面向对象语言n 无用单元搜集无用单元搜集n 避免了内存泄漏避免了内存泄漏n 不用指针不用指针 避免了引用空指针避免了引用空指针二、程序设计语言二、程序设计语言nC#C#C#C#语言及其开发环境语言及其开发环境 Visaul Studio.NETVisaul Studio.NET二、程序设计语言二、程序设计语言nJavaJavaJava的起源 JavaJava是是SunSun公司公司19951995年正式推出的新一代面向对象程序设计语言年正式推出的新一代面向对象程序设计语言, , 特别特别适合于适合于InternetInternet应用程序开发应用程序开发, , 具
12、有平台无关性。具有平台无关性。 JavaJava来自于来自于19911991年年SunSun公司的一个叫公司的一个叫GreenGreen的项目的项目, , 其原先的目的是为其原先的目的是为家用消费电子产品开发一个分布式代码系统家用消费电子产品开发一个分布式代码系统, , 可以把可以把E-mailE-mail发给电冰箱、发给电冰箱、 电视机等家用电器电视机等家用电器, , 对它们进行控制。开始对它们进行控制。开始, , 准备采用准备采用C+, C+, 但但C+C+太复杂太复杂, , 安全性差安全性差, , 最后基于最后基于C+C+开发了一种新的语言开发了一种新的语言Oak(JavaOak(Jav
13、a的前身的前身), Oak), Oak是一是一种用于网络的精巧而安全的语言。种用于网络的精巧而安全的语言。 19941994年下半年年下半年, Internet, Internet的快速发展的快速发展, , 促进了促进了JavaJava语言研制的进展语言研制的进展, , GreenGreen项目组成员用项目组成员用JavaJava编制了编制了HotJava HotJava 浏览器浏览器, , 触发了触发了JavaJava进军进军InternetInternet,使得它逐渐成为,使得它逐渐成为InternetInternet上受欢迎的开发与编程语言,现已发上受欢迎的开发与编程语言,现已发展成为一
14、种重要的展成为一种重要的InternetInternet平台。平台。二、程序设计语言二、程序设计语言- 简单易学:1)风格类似于C+, 基本语法与C语言类似;2)摒弃了C+中容易引发程序错误的地方, 如指针和内存管理; 3)提供了丰富的类库。 面向对象:支持静态和动态风格的代码继承及重用,是完全 面向对象的, 它不支持类似C语言那样的面向过程 的程序设计技术。 解释执行:Java解释器(运行系统)能直接运行目标代码指令。 平台无关:Java源程序被编译成一种高层次的与机器无关的 byte-code格式语言, 被设计在Java虚拟机上运行。nJavaJava特点特点二、程序设计语言二、程序设计语
15、言性能优异:Java可以在运行时直接将目标代码翻译成机器指令, Sun用直接解释器一秒钟内可调用300,000个过程, 翻译目标代码的速度与C/C+的性能没什么区别。 分布式:Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此, Java应用程序可凭借URL打开并访问网络上的对象, 其访问方式与访问本地文件系统几乎完全相同。可移植:Java应用程序可以在配备了Java解释器和运行环境的任何计算机 系统上运行, 通过定义独立于平台的基本数据类型及其运算, Java数据得以在任何硬件平台上保持一致。多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来
16、的好处是可以有更好的交互性能和实时控制性能。二、程序设计语言二、程序设计语言 健壮:Java致力于检查程序在编译和运行时的错误。 类型检查帮助检查出许多开发早期出现的错误。 Java自已操纵内存减少了内存出错的可能性。 Java还实现了真数组, 避免了覆盖数据的可能。 安全:Java的安全性可从两个方面得到保证。一方面, 在Java语言里, 象指针和释放内存等C+功能被删除, 避免了非法内存操作。 另一方面, 当Java用来创建浏览器时, 语言功能和一些浏览器本身提供的功能结合起来, 使它更安全。 动态:Java的动态特性是其面向对象设计方法的拓展, 它允许程序动态地装入运行过程中所需要的类。
17、二、程序设计语言二、程序设计语言Sun JDKSun JDKJavaJava的基石的基石 ,SunSun公司产品,公司产品,19961996年年1 1月推出月推出JDK1.1JDK1.1,目前是,目前是20042004年年9 9月推出的月推出的J2SE 5.0J2SE 5.0Eclipse Eclipse 以构架赢天下,以构架赢天下,20012001年年IBMIBM投资成立了投资成立了EclipseEclipse联盟,联盟,是目前最受欢迎的是目前最受欢迎的JavaJava开发工具开发工具Junit/AntJunit/Ant让让JavaJava自动化的绝代双骄,自动化的绝代双骄, JunitJu
18、nit是单元测试的工是单元测试的工具,具,AntAnt是编译部署工具,是是编译部署工具,是JavaJava程序员的必备工程序员的必备工具具WebsphereWebsphere19991999年年IBMIBM推出,开发推出,开发Web Web 应用程序的平台应用程序的平台WebLogicWebLogic19981998年年BEABEA推出的以推出的以JavaJava为基础的应用平台服务器为基础的应用平台服务器JBuilderJBuilderJavaJava开发工具的王者,是由开发工具的王者,是由BorlandBorland公司推出的公司推出的Java Java 集成开发环境,半年推出一个新版本,
19、目前集成开发环境,半年推出一个新版本,目前为为20052005版版Jdeveloper IDEJdeveloper IDEOracleOracle公司提供的公司提供的JavaJava开发工具开发工具二、程序设计语言二、程序设计语言JavaC+/C#C C语言或语言或C+C+语言无疑是目前最佳的选择。几乎所有的操语言无疑是目前最佳的选择。几乎所有的操作系统都支持作系统都支持C/C+C/C+,JavaJava程序的特点是程序的特点是“编写一次,到处运行编写一次,到处运行(Write once, (Write once, run anywhere)”run anywhere)”用用C/C+C/C+编
20、写的程序则具有编写的程序则具有“编写一次,到处编译编写一次,到处编译 (Write once, compile anywhere)”(Write once, compile anywhere)”的特点。的特点。C/C+C/C+不仅具不仅具有支持多种操作系统的特点,而且成熟、标准,还可以被有支持多种操作系统的特点,而且成熟、标准,还可以被其它多种开发语言调用,更重要的是其它多种开发语言调用,更重要的是C/C+C/C+程序的效率远高程序的效率远高于于JavaJava。 二、程序设计语言二、程序设计语言nFlexFlexFlex是为满足希望开发RIA的企业级程序员的需求而推出的表示层服务器和应用程序
21、框架,它可以运行于J2EE和.NET平台。Flex具有桌面应用程序的响应性与丰富性,又具有Web传播范围广的的特性。二、程序设计语言二、程序设计语言nFlexFlexFlex弥补了许多传统Web应用缺乏的元素,减少了于服务器之间通信的次数,更为详细的展示数据的细节。最适用的应用程序包括:解决多步处理、客户端验证、控制可视数据,使桌面应用和Web应用结合在一起,表现出更强大的表现力。Flex在解决用户体验困难的同时,也带来了新的特点,具体如下。1高效性2易用性3灵活性4全面性二、程序设计语言二、程序设计语言nQtQt Qt是跨平台的C+图形界面的工具包,可以方便的应用于绝大多数的操作系统。 MS
22、/Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP; Unix/X11 Linux、Sun Solaris、HP-UX、Compaq True64Unix、IBM AIX、SGI IRIX和很多其它X11 平台; Macintoshi Mac OSX; 嵌入式的,包含有FramBuffer 的Linux 平台。二、程序设计语言二、程序设计语言nQtQt优点优点1. 优良的跨平台特性Qt支持下列操作系统: Windows,Linux, Solaris, SunOS, FreeBSD, BSD/OS, SCO, AIX, OS3
23、90,QNX 等等。2. 面向对象Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。3. 丰富的 API Qt 包括多达 500 个以上的 C+ 类,还替供基于模板的 collections,serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理功能。4. 大量的开发文档二、程序设计语言二、程序设计语言nQtQt
24、架构架构二、程序设计语言二、程序设计语言nQtQt开发的软件开发的软件二、程序设计语言二、程序设计语言n程序设计语言的选择程序设计语言的选择在程序设计语言发展的历程中,出现过上百种编程语言,在程序设计语言发展的历程中,出现过上百种编程语言,它们分别用于不同的目的。它们分别用于不同的目的。程序设计语言的选择程序设计语言的选择人的因素:编程小组精通这门语言吗人的因素:编程小组精通这门语言吗任务需要:选择的语言能否实现任务的全部功能?能跨任务需要:选择的语言能否实现任务的全部功能?能跨平台吗?有数据库接口功能吗?能直接控制声卡等硬件平台吗?有数据库接口功能吗?能直接控制声卡等硬件吗?吗?客户指定:如
25、要通过串行口控制一个外部设备,客户指定:如要通过串行口控制一个外部设备,C+C+汇编汇编语言是最明智的选择。语言是最明智的选择。二、程序设计语言二、程序设计语言nGISGIS程序设计语言使用情况程序设计语言使用情况二、程序设计语言二、程序设计语言n程序设计语言的发展趋势程序设计语言的发展趋势 程序设计语言的发展从面向过程面向过程,到面向对象面向对象,现在又进一步发展成为面面向组件向组件,到现在面向服务面向服务三、软件即服务三、软件即服务托管软件服务的连续体许可证许可证永久性定购交易广告赞助地点地点内部部署工具第三方托管生命周期管理生命周期管理企业IT应用服务提供商(ASP)黑盒软件通过托管服务
26、的方式来部署而且是通过网络(Internet)来访问的三、软件即服务三、软件即服务为何它如此有吸引力?为何它如此有吸引力?三、软件即服务三、软件即服务给软件架构带来的影响给软件架构带来的影响n多租赁的效率高 共享资源 (在一个实例上运行所有的用户)n可定制的 通过配置来定制n可扩展的 许多应用程序可能对Internet规模有要求三、软件即服务三、软件即服务面向服务的架构面向服务的架构转型转型业务流程外包业务流程外包购并与剥离购并与剥离随需应变的运行环境需要需要可编排服务(SOA)可编排流程开发基础设施管理面向服务架构 (SOA)软件开发整合基础设施SOMA灵活的灵活的业务业务灵活的IT三、软件
27、即服务三、软件即服务以服务的方式开发软件以服务的方式开发软件n SO 是分布式对象技术的演变,但是对于本地处理,SO 未取代(或者尚未取代)OOn 事实上,多数服务提供与使用都用对象模型和 OO 最佳方法来编码四、四、GISGIS程序设计分类程序设计分类n平台软件平台软件n基于平台软件的扩展开发程序基于平台软件的扩展开发程序n基于平台软件的组件开发程序基于平台软件的组件开发程序nWebWeb程序程序n跨平台程序跨平台程序n开源程序开源程序四、四、GISGIS程序设计分类程序设计分类n平台软件平台软件四、四、GISGIS程序设计分类程序设计分类n平台软件平台软件四、四、GISGIS程序设计分类程
28、序设计分类n基于平台软件的扩展开发程序基于平台软件的扩展开发程序n ArcMap VBA 开发、插件开发n MapInfo MapBasic开发n AutoCAD下的开发:Lisp、ARX、插件开发四、四、GISGIS程序设计分类程序设计分类n基于平台软件的组件开发程序基于平台软件的组件开发程序n MO、AO、AEn MapX、MapXTremen SuperObject四、四、GISGIS程序设计分类程序设计分类nWebWeb程序程序n Service:C+n 客户端JSC#RIA:flex、silverlight、html5四、四、GISGIS程序设计分类程序设计分类n跨平台程序跨平台程序
29、n Win CE、Mobilen AndroidnPalm OSnSymbian OSnSeries90 UIQ四、四、GISGIS程序设计分类程序设计分类n开源程序开源程序五、五、GISGIS程序设计要求程序设计要求二次开发二次开发扩展开发扩展开发基础的平台开发技术基础的平台开发技术开源开发开源开发跨平台开发跨平台开发Web开发开发兴趣努力掌握兴趣六、本课程内容六、本课程内容nGISGIS程序设计基础:程序设计基础:C+/COM/DBAC+/COM/DBAnGISGIS扩展开发:扩展开发:VBAVBA、插件开发、插件开发nGISGIS组件开发组件开发nWeb ServiceWeb Servi
30、ce开发开发n开源开发开源开发关于程序语言学习关于程序语言学习质疑猜测实践验证动手实践动手实践! !关于程序语言学习关于程序语言学习质疑猜测实践验证动手实践动手实践! !GISGIS程序设计基础程序设计基础主要内容主要内容一一C+C+二二COMCOM三三DBADBA四四并行计算并行计算1 C+ 介绍介绍C+ reviewn C+语言基础n Object-Based Programmingn Object-Oriented Programmingn STLC+ in my opinionn C+语言在变化,我们的概念也要调整变化n 最能反映OO思想的语言,掌握C+有助于理解OOn 区分C和C+,
31、C+不是C语言,不要用看待C语言的方式来看待C+The foundation for C+n 操作系统的基础知识 文件API、内存管理 infrastructuresn 计算机原理 汇编语言 C/C+是产生ASM代码的frameworkn 编译和执行过程 编译过程 执行过程n 许多概念 进程、heap、stack,.程序开发过程程序开发过程开发编辑编译出错?链接执行结果正确?结束源程序file.cpp目标程序file.obj库函数和其它OBJ可执行程序file.exeYesYesNoNoBuild过程:过程:compile timen Compile + linkn 如何对待错误和警告 错误:
32、一定要排除,从第一个错误找起 警告:或者排除,或者确实理解不会对程序造成危害n 学会设置compile options和link options IDE中如何设置? 一定要知道! 命令行如何设置? 程序代码中如何设置?执行过程:执行过程:runtimen Load、重定位、初始化、mainn 如何调试 断点 assertionn 程序对环境的依赖性 系统环境 CRT 内存影响C+语言语言内容内容n 数据类型 内置(built-in)、标准库、自定义的n 表达式n 控制语句n 函数(模板)n 异常处理C+标准库标准库n C标准库n iostream librarycin、cout、cerrost
33、ream& operator (istream& os, MyClass&)n STL(Standard Template Library)n 例子:template Type min(Type a, Type b)return ab?a:b;n min(10,20);min(10.0, 20.0);n 模板实例化 由参数决定 隐式实例化 显式实例化 min(10,20);函数模板函数模板n Why ?n For instance Macro:# define max(a,b) (a)(b)?(a):(b) Overload:int max(int a,int b) return ab?a:b
34、;float max(float a,float b) return ab?a:b;异常处理异常处理(exception handling)n 错误处理机制、错误代码隔离n Throw (raise) an exception Throw expression 类似于return 语句n Try、catch语句(handler) try catch(type) 或 catch(type obj)n 类似于函数调用 但是类型匹配发生在runtimeObject-Based Programmingn class实现数据封装n 对象n 构造函数与析构函数n 嵌套类n 类中成员初始化n 虚拟函数n 类
35、中运算符重载n 类模板this指针指针n 在类的内部指向类自身的指针n 在每个成员函数中,this指针提供了使用上的方便n this指针把类的多个实例对象区分开来模板模板n函数模板 即以数据类型为“参数”的函数 例如: template Swap(T &a, T&b) T temp; temp = a; a = b; b = temp; n 类模板类模板( (模板类或类生成器模板类或类生成器) ) 即以数据类型为即以数据类型为“参数参数”的类的类 例如:例如: template class template class StackStack private : private : T T po
36、olmaxNumpoolmaxNum; ; intint sp; sp; public: public: Stack(); Stack(); void void Push(TPush(T x); x); T Pop(); T Pop(); BOOL BOOL IsEmptyIsEmpty() const;() const; BOOL BOOL IsFullIsFull() const;() const; ; ; 使用:使用: Stack Stack intStackintStack; ; Stack Stack floatfloat Stack; Stack;从面向过程转换到面向对象从面向过程
37、转换到面向对象n 面向过程以功能为组织单元面向过程以功能为组织单元 在在C C语言中以函数作为功能单元;语言中以函数作为功能单元; 通过数据结构来描述具体的问题;通过数据结构来描述具体的问题; 数据在功能数据在功能( (函数函数) )之间以参数的形式被传送。之间以参数的形式被传送。 n 面向对象面向对象 用类用类classclass封装数据以及与数据相关的操作;封装数据以及与数据相关的操作; 用类的继承性来实现类的重用性;用类的继承性来实现类的重用性; 多态性。多态性。Object-Oriented Programmingn CShapen CPointn CLinen CCirclen CA
38、rcn CTextCShapeCPointCLineCCircleCArcCText多态性和虚拟函数多态性和虚拟函数n 多态性是面向对象的一个支柱 允许程序在实施对象的操作时,允许对象按不同的方式完成不同类型对象的操作;不同类型对象有自己实现操作的方法。n 虚拟函数虚拟函数实现了多态性。说明:在函数说明之前加上关键字virtual在基类的说明中,定义虚拟函数:virtual void Display();调用:CShape *pShape = GetCurrentShape();pShape-Display();关于程序语言学习关于程序语言学习克服当前程序语言学习的克服当前程序语言学习的“三个
39、三个”主义主义 拿来主义:缺乏自己的思考拿来主义:缺乏自己的思考 本本主义:为了考证而学习本本主义:为了考证而学习 迷茫主义:不知道该怎么培养自己的动手能力迷茫主义:不知道该怎么培养自己的动手能力想学英语一样想学英语一样学程序语言!学程序语言!n 象学英语一样学VC+n “授人以鱼不如授人以渔” 语言的学习能力胜于学习语言本身n 强制动手编程:项目的压力n 强制自主学习:积累与成功感n 学会利用资源:自己实现别人的程序关于程序语言学习关于程序语言学习质疑猜测实践验证动手实践动手实践! !2、COM程序、组件和插件程序、组件和插件系统中一种物理系统中一种物理的、可代替的部的、可代替的部件、它封装
40、了实件、它封装了实现并提供了一系现并提供了一系列可用的接口。列可用的接口。组件就是对象,组件就是对象,是对数据和方法是对数据和方法的简单封装的简单封装 程序程序(EXE)组件组件(COM)(COM)插件插件(DLL)(DLL)应用程序是指为了完成某项或某几项特定任务而被开发运行于操作系统之上的计算机程序。运行在用户运行在用户模式,它可以和用户模式,它可以和用户进行交互,具有可视进行交互,具有可视的用户界面的用户界面 插件是一种遵插件是一种遵循一定规范的循一定规范的应用程序接口应用程序接口编写出来的程编写出来的程序。序。 运行在应运行在应用程序提供的用程序提供的界面上界面上扩展扩展基础基础二次开
41、发二次开发控件控件可视化的组件可视化的组件以以ArcGIS体系来说明体系来说明以以ArcGIS体系来说明体系来说明以以ArcGIS体系来说明体系来说明插件插件以以ArcGIS体系来说明体系来说明组件的二次开发组件的二次开发像用像用MFC下下控件一样使用控件一样使用组件的二次开发组件的二次开发举例举例如何封装组件如何封装组件学会封装组件的必要性学会封装组件的必要性解决解决软件发展中遇到的问题n 软件的复杂度增加 代码开发管理n 软件升级和更新 牵一而发动全身?n 分布式软件的发布和配置 用户需要培训,程序员和设计人员更需要n 依赖于全才开发人员 软件层次划分n 软件的可扩展性 用户可定制、脚本支
42、持n 与标准接轨:如Web B/S如何封装组件如何封装组件n 现实:软件工程中的合作越来越普遍n 需要利用别人的资源n 需要以资源的方式提供n 同一项目组的合作学会封装组件的必要性学会封装组件的必要性现实中实际项目和工作的要求现实中实际项目和工作的要求如何封装组件如何封装组件一般动态连接库的开发与使用一般动态连接库的开发与使用由用户自己开发的、可以加入到最终用户(包括用户本人和由用户自己开发的、可以加入到最终用户(包括用户本人和其他使用该模块的人)应用程序中提供某一特定功能的函数其他使用该模块的人)应用程序中提供某一特定功能的函数和类的集合。和类的集合。包括:静态连接库和动态连接库包括:静态连
43、接库和动态连接库 如何封装组件如何封装组件静态连接库的开发与使用静态连接库的开发与使用静态连接库提供了函数的完整的目标代码,如果程序调用静静态连接库提供了函数的完整的目标代码,如果程序调用静态连接库中的函数,则在进行连接时连接程序将静态连接库态连接库中的函数,则在进行连接时连接程序将静态连接库中所包含的该函数的代码拷贝至运行文件中。中所包含的该函数的代码拷贝至运行文件中。 开发与使用开发与使用调试调试 #ifndef _MYLIB_H#define _MYLIB_H#endif如何封装组件如何封装组件动态连接库的开发与使用动态连接库的开发与使用 动态连接库是一个可执行模块,其包含的函数可以由动
44、态连接库是一个可执行模块,其包含的函数可以由Windows应用程序调用以执行一些功能。在程序连接动态连接应用程序调用以执行一些功能。在程序连接动态连接库中的函数时,连接程序并不将包含在动态连接库中的函数的库中的函数时,连接程序并不将包含在动态连接库中的函数的目标代码拷贝至运行文件,而只是简单地记录了函数的位置信目标代码拷贝至运行文件,而只是简单地记录了函数的位置信息,程序在执行时,即可找到该函数的目标代码。因为只是在息,程序在执行时,即可找到该函数的目标代码。因为只是在执行时才得到真正的连接,因此称为动态连接。执行时才得到真正的连接,因此称为动态连接。开发与使用调试 /DEF 文件文件LIBR
45、ARY DLLLIBEXPORTS TestDllLib TestDllMFCConnect如何封装组件如何封装组件推荐动态连接库的开发与使用推荐动态连接库的开发与使用1、微软的扩展、微软的扩展 DLL2、输出类方式、输出类方式AFX_CLASS_EXPORT 如何封装组件如何封装组件ActiveX的开发与使用的开发与使用 ActiveX是在是在MS与与JAVA抗争时产生的一个新名词(抗争时产生的一个新名词(1996年年3月),月),ActiveX技术的前身是技术的前身是OLE技术是技术是MS为了适应为了适应Internet的发展对的发展对OLE进行的扩展(当时的含义是进行的扩展(当时的含义是
46、“Activate the Internet”),当时只是为了发展一种小型的可从网络上快),当时只是为了发展一种小型的可从网络上快速下载的可重用组件。速下载的可重用组件。 现在的现在的ActiveX控件等价与以前的控件等价与以前的OLE控件或控件或OCX,一个典,一个典型的控件包括设计时和运行时的用户界面,唯一的型的控件包括设计时和运行时的用户界面,唯一的IDispatch接接口定义了控件的属性和方法,唯一的口定义了控件的属性和方法,唯一的IConnectionPoint接口定接口定义控件可引发的事件。一个控件可以在容器中运行,所以从运行义控件可引发的事件。一个控件可以在容器中运行,所以从运行
47、的角度看它类似与一个的角度看它类似与一个DLL。由于在。由于在IE中添加了对控件的支持,中添加了对控件的支持,所以你可以在所以你可以在WEB页面中通过页面中通过VBScript对控件进行操纵。对控件进行操纵。 如何封装组件如何封装组件图像显示控件开发实践图像显示控件开发实践3、DBA数据库标准接口数据库标准接口传统方式传统方式数据库标准接口数据库标准接口数据库接口数据库接口数据库标准接数据库标准接口口数据库标准接口数据库标准接口1使用户程序有很高使用户程序有很高的互操作性,相同的互操作性,相同的目标代码适用于的目标代码适用于不同的不同的DBMS2由于由于ODBC的开放的开放性,它为程序集成性,
48、它为程序集成提供了便利,为客提供了便利,为客户机户机/服务器结构服务器结构提供了技术支持提供了技术支持3由于应用与底层网由于应用与底层网络环境和络环境和DBMS分分开,简化了开发维开,简化了开发维护上的困难护上的困难数据库接口技术的分类数据库接口技术的分类微软最新的数微软最新的数据访问技术据访问技术 ,用以实现访问用以实现访问关系或非关系关系或非关系数据库中的数数据库中的数据。据。 ADOMicrosoft推出推出的最早的整合的最早的整合异质数据库的异质数据库的数据库接口,数据库接口,现在已成为一现在已成为一种事实上的标种事实上的标准。准。ODBC是执行是执行SQL语语句的句的Java API
49、 ,由一组用,由一组用Java语言编写语言编写的类与接口组的类与接口组成。成。JDBCVC+数据库访问方式数据库访问方式n1 1、ODBC API ODBC API n2 2、MFC ODBCMFC ODBCn3 3、DAO DAO n4 4、OLE DBOLE DBn5 5、ADOADOVC+数据库访问方式数据库访问方式n1 1、ODBC APIODBC API ODBC(Open Database Connectivity)是被广泛应用的用于数据库访问技术的应用程序编程接口 ,ODBC是为最大的互用性而设计的,即一个应用程序用相同的源代码能够访问不同的数据库管理系统(DBMS)。 VC+数
50、据库访问方式数据库访问方式n2 2、MFC ODBCMFC ODBC MFC ODBC(Microsoft Foundation Classes ODBC) ,ODBC虽然提供了一种统一访问数据库的接口,但是直接使用ODBC API创建应用程序需要编制大量的代码所以,Visual C+中提供了MFC ODBCMFC ODBC类,类,在在MFC ODBCMFC ODBC类中封装了类中封装了ODBC APIODBC API,提供了面向对象的数据库类。这使创建数据库应用程序的过程大大简化。 VC+数据库访问方式数据库访问方式n3 3、DAODAO DAO(Data Access Object) ,D