理解对象模型图(Reading OMDS)

引言

这篇文章大部分内容是翻译的帮助资料里的东西。学习技术,英语是个好工具。一直把英语的地位看得和技术一样重,也会强迫自己看英语版的技术书籍(都是PDF版的,外国的书买不起)、资料。但一开始,这完全是一件痛苦万分的事,大量的专业词汇和概率总是让我摸不着头脑。后来,慢慢积累词汇查找概念对英语这块不恐惧了,趁现在还处在记忆力黄金期希望能多补一补专业英语。这需要长期积累与坚持。这篇文章不光是翻译的内容,还有平常积累的东西和思考总结的东西。愿有个好的开始……

(单是翻译过来的话,文章不好理解,有些地方稍微改变了一下表达方式,但内容没变,看内容的时候请记住和对比符号。)

资料来源

开发帮助:ArcObjects help for .NET(2010)/Learning  ArcObjects/Getting started with ArcObjects .NET/Reading OMDS

内容

对象模型图解采用的是UML(统一建模语言)。对象模型图是对对象浏览器的补充,它列出了开发环境中没有的类与成员、类与类之间的关系和结构,有了对象模型图能更好的理解AO的组件。(获得OMDS的途径有两种一种是通过开发帮助,找到相应命名空间,在它的内容节点找到Diagrams,另一种是在安装路径下“……ArcGIS/DeverloperKit10.0/ Diagrams”)。

1.“类”的类型

1

上图有三种类型的框分别代表是AbstractClass、CoClass、Class三种类型的类。(一定要记住这三种框代表的类)

AbstractClass(抽象类):抽象类,不能用它创建对象(只能通过子类继承)。比如,一个“Line”是“primary Line”和“secondary Line”的抽象类。抽象类对于想要创造出自己的子类是非常重要的(它显示了在继承中哪些是特定的接口,哪些是可选择的接口(optional Interface))。子类必须继承哪些特定接口的所有实现,不然会报错。

CoClass(组件对象类):组件对象类可以直接声明新对象来创建。

Class(类):不能直接创建对象,但可以作为一个类的属性或通过另一个类的实例化来创建类对象。(原因是这种类没有构造函数)

2.类之间的关系

(1)关联(Associations

3

关联在其两端都定义了多样性。多样性是对能与另一个对象关联的对象数目的一种限制。下面列出了可能的多样性记: 
1—表示只有一个对象与另一个对象发生关系。这种多样性的显示是可选的;如果没有显示多样性,则暗示该多样性为“1”。 
0…1—表示多样性为 0 或 1。 
M…N—表示多样性为 M 到 N(正整数)。 
*或 0…*—表示多样性为从 0 到任意大的正整数。 
1…*—表示多样性为从 1 到任意大的正整数

在这个模型图中表示owner 可以拥有一个或多个 land parcels,而一个 landparcel 也可以由一个或多个 owners 占有

(2)继承(inheritance)

4

继承用来定义共享父类的属性和方法,同时又具有自己独特的属性和方法的特定类。

这个模型图表示 primary line(可创建类)和 secondary line(可创建类)都是 line(抽象类)的子类。

(3)实例化(Instantiation)

5

实例化表示某个类的对象具有创建另一个类的对象的方法。

上图表示一个 pole 对象可能具有创建 transformer 对象的方法。

(4)“组成”或“组合”(Composition

6

组成是一种更强的关联,在这种关联中,“whole”类对象控制着“part”类对象的生命周期。

上图表示一个 pole 包含一个或多个 crossarms。在这个设计中,当 pole 被删除时crossarm 也就不存在了。Pole 对象控制着 crossarm 对象的生命周期。

(5)多个关联(N-ary association)

7

n元关联是超过两个以上类的关联。钻石的地方代表了关联的分支处。

3.接口

接口是COM对象的接入点。有入接口(inbound  interfaces),表示了类的属性和方法;出接口(outbound interface),它允许类和其他类的互动。

捕获a

(1)接口继承

因为接口在ArcObjects中是COM接口,他们都继承IUnknown,是COM的基础。如果一个接口被另一个接口继承,初始的接口也是继承接口的成员。

捕获b

比如,IPoint继承自IGeometry,IGeometry的成员也是IPoint的成员。这种继承允许你继承IPoint后,直接使用IGeometry的成员,而不需要查询接口。

接口继承使用得很广泛。虽然COM一旦部署好后,就不能更改。但是一个接口可以继承自原来的接口进行成员的添加以及补充。比如说IEditor2接口继承了IEditor接口,添加了新的成员。

(2)入接口

入接口在OMDS上拥有一些特殊的符号,提供了一些列表之外的信息。

    星星在其他类库定义的接口:如果一个接口的前缀是一个类库的名字,比如,esriSystem.IName,这个接口继承自一个类库而不是实现它。这个类库的名字反映了接口定义的地方。

    星星选择接口:有些接口是可以选择的继承接口。比如,一个抽象类就有些选择接口,它的子类可以选择是否实现选择接口但必须实现非选择接口。这种接口前面的前缀是(Optional)。

    星星选择实例实现的接口(Interface Implemented in select instances):有些类有不同的实现,而不是有多个类去继承一个基类或者抽象类。这种情况,某一个接口就要实现这种选择实例实现的接口。

    捕获e

看上图,the RasterDataset 类可以被不同工作空间实例化,根据获得的数据类型。当file-based 数据初始化了一个  RasterDataset 类,  ITemporaryDataset interface 就被实现了;然而,如果ArcSDE software-based 初始化了一个 RasterDataset 类,这个 IRasterPyramid2 接口就被实现了。

这种类的前缀是(instance)。

(3)出接口

  出接口也叫事件接口。

(4)接口成员

接口成员包括属性(对象的状态)、方法(执行行为)。

属性:用类似哑铃状的东西表示。包括只读(get)、只写(put)、可读可写(get/set)。还可以是引用类型的属性(Reference)用空心表示。

方法:用箭头表示。

捕获f

补充:还包括一些枚举,结构。更多符号标记见下图。(每个OMDS里面都有的)

捕获

注意这些符号的时候,细节也很重要。

比如:接口有空心、实心的,空心表示入接口,实心表示出接口。接口符号还有长短,长的接到方框的代表列出了这个接口的全部成员,而短的没列出来完。

了解一些基本的类、接口和他们的关系,是很重要的。同时专业英语词汇也是很有必要记住的,有空总结出来分享给大家。

九层之台,始于垒土。

 

 
 
分类: ArcGIS Engine
原文地址:https://www.cnblogs.com/Leo_wl/p/3390108.html