引言
这篇文章大部分内容是翻译的帮助资料里的东西。学习技术,英语是个好工具。一直把英语的地位看得和技术一样重,也会强迫自己看英语版的技术书籍(都是PDF版的,外国的书买不起)、资料。但一开始,这完全是一件痛苦万分的事,大量的专业词汇和概率总是让我摸不着头脑。后来,慢慢积累词汇查找概念对英语这块不恐惧了,趁现在还处在记忆力黄金期希望能多补一补专业英语。这需要长期积累与坚持。这篇文章不光是翻译的内容,还有平常积累的东西和思考总结的东西。愿有个好的开始……
(单是翻译过来的话,文章不好理解,有些地方稍微改变了一下表达方式,但内容没变,看内容的时候请记住和对比符号。)
资料来源
开发帮助:ArcObjects help for .NET(2010)/Learning ArcObjects/Getting started with ArcObjects .NET/Reading OMDS
内容
对象模型图解采用的是UML(统一建模语言)。对象模型图是对对象浏览器的补充,它列出了开发环境中没有的类与成员、类与类之间的关系和结构,有了对象模型图能更好的理解AO的组件。(获得OMDS的途径有两种一种是通过开发帮助,找到相应命名空间,在它的内容节点找到Diagrams,另一种是在安装路径下“……ArcGIS/DeverloperKit10.0/ Diagrams”)。
1.“类”的类型
上图有三种类型的框分别代表是AbstractClass、CoClass、Class三种类型的类。(一定要记住这三种框代表的类)
AbstractClass(抽象类):抽象类,不能用它创建对象(只能通过子类继承)。比如,一个“Line”是“primary Line”和“secondary Line”的抽象类。抽象类对于想要创造出自己的子类是非常重要的(它显示了在继承中哪些是特定的接口,哪些是可选择的接口(optional Interface))。子类必须继承哪些特定接口的所有实现,不然会报错。
CoClass(组件对象类):组件对象类可以直接声明新对象来创建。
Class(类):不能直接创建对象,但可以作为一个类的属性或通过另一个类的实例化来创建类对象。(原因是这种类没有构造函数)
2.类之间的关系
(1)关联(Associations)
关联在其两端都定义了多样性。多样性是对能与另一个对象关联的对象数目的一种限制。下面列出了可能的多样性记:
1—表示只有一个对象与另一个对象发生关系。这种多样性的显示是可选的;如果没有显示多样性,则暗示该多样性为“1”。
0…1—表示多样性为 0 或 1。
M…N—表示多样性为 M 到 N(正整数)。
*或 0…*—表示多样性为从 0 到任意大的正整数。
1…*—表示多样性为从 1 到任意大的正整数
在这个模型图中表示owner 可以拥有一个或多个 land parcels,而一个 landparcel 也可以由一个或多个 owners 占有。
(2)继承(inheritance)
继承用来定义共享父类的属性和方法,同时又具有自己独特的属性和方法的特定类。
这个模型图表示 primary line(可创建类)和 secondary line(可创建类)都是 line(抽象类)的子类。
(3)实例化(Instantiation)
实例化表示某个类的对象具有创建另一个类的对象的方法。
上图表示一个 pole 对象可能具有创建 transformer 对象的方法。
(4)“组成”或“组合”(Composition)
组成是一种更强的关联,在这种关联中,“whole”类对象控制着“part”类对象的生命周期。
上图表示一个 pole 包含一个或多个 crossarms。在这个设计中,当 pole 被删除时crossarm 也就不存在了。Pole 对象控制着 crossarm 对象的生命周期。
(5)多个关联(N-ary association)
n元关联是超过两个以上类的关联。钻石的地方代表了关联的分支处。
3.接口
接口是COM对象的接入点。有入接口(inbound interfaces),表示了类的属性和方法;出接口(outbound interface),它允许类和其他类的互动。
(1)接口继承
因为接口在ArcObjects中是COM接口,他们都继承IUnknown,是COM的基础。如果一个接口被另一个接口继承,初始的接口也是继承接口的成员。
比如,IPoint继承自IGeometry,IGeometry的成员也是IPoint的成员。这种继承允许你继承IPoint后,直接使用IGeometry的成员,而不需要查询接口。
接口继承使用得很广泛。虽然COM一旦部署好后,就不能更改。但是一个接口可以继承自原来的接口进行成员的添加以及补充。比如说IEditor2接口继承了IEditor接口,添加了新的成员。
(2)入接口
入接口在OMDS上拥有一些特殊的符号,提供了一些列表之外的信息。
在其他类库定义的接口:如果一个接口的前缀是一个类库的名字,比如,esriSystem.IName,这个接口继承自一个类库而不是实现它。这个类库的名字反映了接口定义的地方。
选择接口:有些接口是可以选择的继承接口。比如,一个抽象类就有些选择接口,它的子类可以选择是否实现选择接口但必须实现非选择接口。这种接口前面的前缀是(Optional)。
选择实例实现的接口(Interface Implemented in select instances):有些类有不同的实现,而不是有多个类去继承一个基类或者抽象类。这种情况,某一个接口就要实现这种选择实例实现的接口。
看上图,the RasterDataset 类可以被不同工作空间实例化,根据获得的数据类型。当file-based 数据初始化了一个 RasterDataset 类, ITemporaryDataset interface 就被实现了;然而,如果ArcSDE software-based 初始化了一个 RasterDataset 类,这个 IRasterPyramid2 接口就被实现了。
这种类的前缀是(instance)。
(3)出接口
出接口也叫事件接口。
(4)接口成员
接口成员包括属性(对象的状态)、方法(执行行为)。
属性:用类似哑铃状的东西表示。包括只读(get)、只写(put)、可读可写(get/set)。还可以是引用类型的属性(Reference)用空心表示。
方法:用箭头表示。
补充:还包括一些枚举,结构。更多符号标记见下图。(每个OMDS里面都有的)
注意这些符号的时候,细节也很重要。
比如:接口有空心、实心的,空心表示入接口,实心表示出接口。接口符号还有长短,长的接到方框的代表列出了这个接口的全部成员,而短的没列出来完。
了解一些基本的类、接口和他们的关系,是很重要的。同时专业英语词汇也是很有必要记住的,有空总结出来分享给大家。
九层之台,始于垒土。