AE 面向接口编程实验报告_第1页
AE 面向接口编程实验报告_第2页
AE 面向接口编程实验报告_第3页
AE 面向接口编程实验报告_第4页
AE 面向接口编程实验报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三面向接口编程一、实验目的:1.理解接口编程、面向对象编程的思想,两者的区别,以及各自的优缺点;2.掌握AE接口实现图层加载的方法:IworkspaceFactory-->Workspace->IfeatureWorkSpace->IFeatrueClass->IFeature();3.理解并掌握使用UI进行属性查询和空间查询;实验内容:1.利用IWorkSpace接口在Map中增加一个GeoDatabase图层;2.利用Imap的SelectBy*实现简单选择;3.利用IQueryFilter实现简单空间查询。(未实现)三、实验心得:1.二次开发初期,深刻理解面向接口编程思想很重要。通过实验,我觉得可以这样理解:接口并不是必须的,去掉完全可以;只不过是为了方便查找,给相似的类一个接口,通过这个接口就可以容易地找到要用的类。接口就是一个把所有类再分成大的类的规则。2.通过这次实验的最大收获是,理解了整个程序框架的基本架构。一个程序主窗体对应于一个主程序,可以同时创建多个窗体,并编写子程序,主程序通过“接口调用抽象类—抽象类创建一个普通类—普通类实例化子窗体”的模式调用子程序。三、实验过程1.什么是接口?什么是面向接口编程?有何优点?答案:(1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则;是在一定粒度视图上同类事物的抽象表示。接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstractclass);第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);一个体有可能有多个抽象面。接口编程的思想:在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。接口的特性:1.接口中的方法可以有参数列表和返回类型,但不能有任何方法体。2.接口中可以包含字段,但是会被隐式的声明为static和final。3.接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。4.接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理。5.当实现一个接口时,需要将被定义的方法声明为public类型的,否则为默认访问类型,Java编译器不允许这种情况。6.如果没有实现接口中所有方法,那么创建的仍然是一个接口。7.扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements。接口编程的优点:1)首先对系统灵活性大有好处。当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。2)不同部件或层次的开发人员可以并行开工,便于团队协作。只要接口一致,设计合理,完全可以并行进行开发,从而提高效率。

3)便于转换为com组件、activex组件等

4)方便的代码复用,无需了解技术细节。接口编程缺点:接口协同工作时,设计不良会出现难以发现的bug,因为你只遵循接口规范,不知道实现的技术细节。(2)面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法;是与“面向过程”即“我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现”相对应的。面向对象实现了对象属性与行为的分离,对象之间通过消息进行通信;具有同一属性和行为的对象被抽象成类,每一个类是相同或相似属性和方法的封装;类与类之间具有继承和派生关系。(3)面向接口与面向对象的区别:接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)是针对编程开发的对象而言的,不是同一感念。interface关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。2.GeoDatabase的数据加载:(1)理解Workspace是一个容器,包含了空间和非空间数据集,如featureclass,rasterdataset,table。提供了一系列创建和操作数据集的方法。FeatureClass是空间事物的顶级类,类似与C#中的Object类,提供了一系列属性和方法。在同一个FeatureClass中的Feature具有相同的属性字段。FeatureLayer是一个基于矢量数据的图层,典型的数据包括Geodatabase、coverage和shapefile等,FeatureLayer可以直接在MapControl中显示。它们之间的关系如下:IworkspaceFactory->IworkSpace->IfeatureWorkSpace-->IFeatrueClass-->IFeature()IfeatureLay--->ILayer----->IMap(2)方法一:调用IWorkspace接口实现创建一个类工厂ClassFactory使用类工厂创建要使用的工作区。使用工作区打开并得到FeatureClass。把FeatureClass装载到新建的图层实例。把图层加载到MapControl控件。代码实现privatevoidaddShpToolStripMenuItem_Click(objectsender,EventArgse){//显示一个打开对话框stringfilePath=string.Empty;OpenFileDialogaddShape=newOpenFileDialog();addShape.Filter="AddShapeFile|*.shp";addShape.Title="AddShape";//点击确定按钮if(addShape.ShowDialog()==DialogResult.OK){//构造ShapeWorkspace工厂IWorkspaceFactoryfactory=newShapefileWorkspaceFactory();//利用工厂建立WorkspaceIFeatureWorkspacefileSpace=factory.OpenFromFile(addShape.FileName.Replace(addShape.SafeFileName,string.Empty),0)asIFeatureWorkspace;//打开workspace中的一个图层(FeatureClass)IFeatureClassfeatureClass=fileSpace.OpenFeatureClass(addShape.SafeFileName);//建立一个Layer,并初始化。IFeatureLayerlayer=newFeatureLayer();layer.FeatureClass=featureClass;layer.Name=featureClass.AliasName;//将Layer加载到Mapcontrol中this.axMap.Map.AddLayer(layer);//刷新mapcontrolthis.axMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,layer,null);}}(3)方法二:调用ICommand接口加载数据:privatevoidaddDataToolStripMenuItem_Click(objectsender,EventArgse){ICommandpCmd=newESRI.ArcGIS.Controls.ControlsAddDataCommandClass();pCmd.OnCreate(this.axMapControl1.Object);pCmd.OnClick();}注意问题:其中ICommand接口需要有namespace,通过Help查找Usingsystem.windows.input;(4)两种方法比较:IWorkspace接口ICommand接口原理严格数据库加载数据的步骤进行调用ESRI加载数据功能模块实现优点便于深刻理解数据加载原理,可以实现多种数据格式的加载,功能灵活,如CAD。简单易实现,实现类的高度复用,符合二次开发的思想。缺点过程复杂,需要熟知接口间依赖关系,对于初学者不易掌握。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论