加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

AE编程基础02——掌握OMD

(2012-12-04 11:07:30)
标签:

ae

开发

对象

omd

it

我们已经知道使用 ArcGIS Engine 开发,也就意味着我们要和接口打交道,ArcGIS Engine 中提供的接口和类加起来估计上万,但是用过 ArcGIS Engine 的人,知道这个数字不为过。ArcGIS Engine 为了帮助我们方便的使用这些,将这些分散在不同的类库中,为了便于我们阅读,ArcGIS Engine 提供了一系列的对象模型图,也就是 OMD (Object model diagrams) 对象模型图表。下面图示中,便是贯穿本节的对象模型图的钥匙。
这些符号是基于 UML 画图工具创建的,UML 符号是面向对象分析和设计的工业图样标准。对象模型图中提供的信息非常多,是对象浏览器中信息的重要补充。Visual Basic,或者其它的开发环境,都会列出所有的类和成员,但不会指明这些类之间的关系。所以,对象模型图是非常有利于读者对 ArcInfo 组件的理解的!在装了 ArcGIS Engine 后,可以在安装目录下找到很多使用 UML 来描述 ArcInfo 组件的 pdf,这些 pdf 详细的描述了 ArcObjects,并描述你能够创建的数据模型,以下详细说明。
1. 类和对象
在 UML 图中有三种类型的类:抽象类(abstract class)、组件类(CO class)与普通类(instantiable class)。
抽象类:不能创建或实例化,从来没有一个抽象类的实例用于定义子类的公共接口,创建实例的任务由其子类完成。子类继承其定义的接口。  OMD 符号为:二维的内部有阴影的矩形。
普通类:不能创建,从别的对象获得实例。 OMD 符号为:3D 矩形内部没有阴影。
组件类:可以直接创建实例的类,在 C#中,用 New 关键字。 OMD 符号为:带阴影的 3D 矩形符号。
2. 关联
在抽象类、可创建类和可实例化类之间,有几种存在的关联(或称关系)。
联系(association)便描述了类之间的关联。在两端的类中可以定义多重性( Multiplicity)关联。
在这张图上,一个业主能有拥有一块或多块宗地;同样地,一块宗地可以被一个或多个业主所共有。多重性关联就是限制对象类与其它对象关联的数目关系。以下是用于多重性关联的符号:
1 —— 一个并且只有一个,这种多样性是可选的;如果不标明,则默认为“1”
0..1 —— 零个或一个
M..N —— 从M 到N(正整数)
*或者0… * —— 从零到任意正整数
1… * —— 从一到任意正整数
在这张图上,我们知道一个对象可能和多个对象有联系类继承(type inheritance)定义了专门的类,它们拥有超类的属性和方法,并且同时也有自身的属性和方法。
上图说明primary line 和secondary line 是line 的一种类型
实例化(Instantiation)指定一个类的对象有这样的方法,它能够创建另外一个类的对象。
pole 对象有一个方法能够创建transformer 对象聚合(Aggregation)是一种不对称的关联方式,在这种方式下一个类的对象被认为是一个“整体”,而另一个类的对象被认为是“部件”。
在这个图中 transformer 能和一个 transformer bank 相关联,一个 transformer bank 正好有 3 个 transformer 。但当 transformer bank 移除以后,transformer 依然能够存在。组成(Composition)是一种更为强壮的聚合方式,此种方式下,“整体”对象控制着“部分”对象的生存时间。http://s5/mw690/9e32518fxcffe47cf5cb4&690

一个 Pole 包含一个或多个 Crossarm,在这个图中当 pole 被移除后,Crossarm 就不能再使用了,因为 Pole控制着 Crossarm 的生存时间。
在 OMD 图中,我们不仅仅能看到类之间的相互关系,还可以得到属性的一些信息,如下图:
属性和方法:
属性:哑铃状的图标,Read(左侧的实心哑铃)和 write(右侧的实心哑铃)属性除了我们常说的类型,还有一种属性,这个属性本身就是一个对象,符号,空心的哑铃
方法:指向左侧的箭头。
ArcGIS Engline 组件库的每一个组件中定义有不同的类,类下面定义了不同接口,接口中包含不同的
属性和方法。类之间有类型继承(Typelnheritance)关系,接口之间有互相调用(Querylnterface)及相互继承(Interfacelnheritance)关系。
1.1 类与对象在面向对象编程中,类和对象是两个非常重要的概念,可以这么说类就是创建对象的蓝
本,而对象是指具有属性和动作的实体,它封装了一个客观实体的属性与行为。ArcObjcets 中有三类 class,分别是抽象类(AbstractClass)、组件类(CoClass)和普通类(Class)。抽象类的主要目的是为它的子类定义公共接口,一个抽象类将把它的部分或全部实现延迟到子类中,因此,一个抽象类不能被实例化。一个组件类对象可以被直接创建,普通类对象虽然不能直接创建,但它可以可以作为其它类的一个属性或者从其它类的实例化来创建。
1.2 接口和类接口定义了一组方法和属性,在 ArcObjects 中接口名称都以”I”开始,如 IMap, Ilayer等。类实现了接口中的方法。一个类可以有多个接口,如 FeatureLayerClass 类有 IFeatureLayer,IFeatureSelection 等不同接口,而一个接口也可被多个类所拥有,如 CadFeatureLayer 类和 FeatureLayer 类都有 IFeatureLayer 接口。接口定义了能做什么,而定义了该怎么做(The interfacedefines what an object can do,and the class defines how it is done.79 页 Explroing ArcObjects V9.0),在 AO 开发的时候,和对象间的通信是通过接口完成的,而不是我们在一些其他面向对象语言如(Java)中和对象的通信是通过对象完成的.
1.3 接口查询(QueryInterface) 一个类可以有多个接口,声明了接口变量并且指向一个对象的时候,这个变量只能使用该接口内的方法和属性,而不能访问其他接口中的方法和属性,如:
IMap pMap
pMap = New MapClass();
pMap.Clear();
这里会产生错误此时的 pMap 只能使用 IMap 接口中定义的方法和属性,比如获取图层的个数,添加图层等,但是不能清空视图上的内容(因为这个方法是在 IActiveView 中定义的) QueryInterface(QI)很方便的让我们在一个类的不同接口间进行切换:
IActiveView pView
pView= pMap ‘QI 现在 mView 就可以使用 IActiveView 中定义的方法了.
1.4 类类型继承类型继承是指类之间的接口类型的继承,而不是继承其实现。继承过来的接口只是名称相同,具体的实现则不同。比如 ShpfileWorkspaceFactry 和AccessWorkspaceFactry 都继承WorkspaceFactry,而他们的打开(OpenFromFile)方法却不一样,ShpfileWorkspaceFactry 的(OpenFromFile)方法需要一个文件目录位置作为参数,而 AccessWorkspaceFactry 的(OpenFromFile)方法需要一个数据库(mdb)位置作为参数。
1.5 接口继承如 ImapFrame 接口和 IMapSurroundFrame 接口继承于 IFrameElement 接口,则父类接口IFrameElement 所具有的方法和属性对派生接口 ImapFrame 和 IMapSurroundFrame 都有效。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有