理解对象模型图(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.“类”的类型

上图有三种类型的框分别代表是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里面都有的)

注意这些符号的时候,细节也很重要。
比如:接口有空心、实心的,空心表示入接口,实心表示出接口。接口符号还有长短,长的接到方框的代表列出了这个接口的全部成员,而短的没列出来完。
了解一些基本的类、接口和他们的关系,是很重要的。同时专业英语词汇也是很有必要记住的,有空总结出来分享给大家。
九层之台,始于垒土。
理解对象模型图(Reading OMDS)的更多相关文章
- 对象模型图(OMD)阅读指南
樱木 原文 对象模型图(OMD)阅读指南(转载) 补充几个名词概念: UML:Unified Modeling Language 统一建模语言,是用来对软件密集系统进行可视化建模的一种语言.UML为面 ...
- 图说C++对象模型:对象内存布局详解
0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看. 本文的结论都在VS2013上得到验证.不同的编译器在内存布局的细节上可能有 ...
- 浅谈Excel开发:三 Excel 对象模型
前一篇文章介绍了Excel中的菜单系统,在创建完菜单和工具栏之后,就要着手进行功能的开发了.不论您采用何种方式来开发Excel应用程序,了解Excel对象模型尤其重要,这些对象是您与Excel进行交互 ...
- 好文章系列C/C++——图说C++对象模型:对象内存布局详解
注:收藏好文章,得出自己的笔记,以查漏补缺! ------>原文链接:http://blog.jobbole.com/101583/ 前言 本文可加深对C++对象的内存布局.虚表指针.虚 ...
- 【转载】图说C++对象模型:对象内存布局详解
原文: 图说C++对象模型:对象内存布局详解 正文 回到顶部 0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看.本文的结论都在 ...
- JavaScript对象模型-执行模型
数据类型基本数据类型基本数据类型是JS语言最底层的实现.简单数值类型: 有Undefined, Null, Boolean, Number和String.注意,描述中的英文单词在这里仅指数据类型的名称 ...
- 机器阅读理解(看各类QA模型与花式Attention)
目录 简介 经典模型概述 Model 1: Attentive Reader and Impatient Reader Model 2: Attentive Sum Reader Model 3: S ...
- 机器阅读理解(看各类QA模型与花式Attention)(转载)
目录 简介 经典模型概述 Model 1: Attentive Reader and Impatient Reader Attentive Reader Impatient Reader Model ...
- 理解和使用SQL Server中的并行
许多有经验的数据库开发或者DBA都曾经头痛于并行查询计划,尤其在较老版本的数据库中(如sqlserver2000.oracle 7.mysql等).但是随着硬件的提升,尤其是多核处理器的提升,并行处理 ...
随机推荐
- Android入门——电话拨号器和4种点击事件
关于HelloWorld为,电话拨号程序还AndroidA入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1. ...
- wcf系列5天速成——第一天 binding的使用(1)
原文:wcf系列5天速成--第一天 binding的使用(1) 作为WCF速成系列,只介绍些项目开发中常用到的实战知识. 学习wcf,还是对其中的几个术语要了解一下.wcf中有一个ABC的概念,就是 ...
- 前端学习笔记(zepto或jquery)—— 布局技巧(一)
html5中有一些标签我们很难改变其样式,例如input=file,select等.这个时候我们需要改变一下思路,将原有透明度置为0,借助于div或span等以控制样式的标签来代替. 效果图: < ...
- Notification(一个)——使用演示样本的基础知识
main.xml如下面: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
- 新版live555代理server
好久没搞流媒体了,近期又回归了,已经把live555代理服务器更新到最新的live555代码(V0.82). 改进了一大坨问题,还去掉了一个类,代码更精简了. 改进了命令行參数格式,仅仅要这样:rts ...
- MVC验证08-jQuery异步验证
原文:MVC验证08-jQuery异步验证 本文主要体验通过jQuery异步验证. 在很多的教材和案例中,MVC验证都是通过提交表单进行的.通过提交表单,可以很容易获得验证出错信息.因为,无论是客户端 ...
- Spring之使用Annotation注解开发项目
我们也可以使用Annotation来实现注入操作,提高我们写代码的灵活性和效率.spring中要使用annotation,需要在配置文件中增加: <beans xmlns="http: ...
- C语言库函数大全及应用实例六
原文:C语言库函数大全及应用实例六 [编程资料]C语言库函数大全及应用实例六 函数名: getlinesett ...
- 苹果浏览器Safari对JS函数库中newDate()函数中的参数的解析中不支持形如“2020-01-01”形式
苹果浏览器safari对new Date('1937-01-01')不支持,用.replace(/-/g, "/")函数替换掉中划线即可 如果不做处理,会报错:invalid da ...
- 假如我来架构12306网站---文章来自csdn(Jackxin Xu IT技术专栏)
(一)概论 序言: 此文的撰写始于国庆期间,当中由于工作过于繁忙而不断终止撰写,最近在设计另一个电商平台时再次萌发了完善此文并且发布此文的想法,期望自己的绵薄之力能够给予各位同行一些火花,共同推进国 ...