引言

这篇文章大部分内容是翻译的帮助资料里的东西。学习技术,英语是个好工具。一直把英语的地位看得和技术一样重,也会强迫自己看英语版的技术书籍(都是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里面都有的)

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

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

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

九层之台,始于垒土。

 

 
 
分类: ArcGIS Engine

理解对象模型图(Reading OMDS)的更多相关文章

  1. 对象模型图(OMD)阅读指南

    樱木 原文 对象模型图(OMD)阅读指南(转载) 补充几个名词概念: UML:Unified Modeling Language 统一建模语言,是用来对软件密集系统进行可视化建模的一种语言.UML为面 ...

  2. 图说C++对象模型:对象内存布局详解

    0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看. 本文的结论都在VS2013上得到验证.不同的编译器在内存布局的细节上可能有 ...

  3. 浅谈Excel开发:三 Excel 对象模型

    前一篇文章介绍了Excel中的菜单系统,在创建完菜单和工具栏之后,就要着手进行功能的开发了.不论您采用何种方式来开发Excel应用程序,了解Excel对象模型尤其重要,这些对象是您与Excel进行交互 ...

  4. 好文章系列C/C++——图说C++对象模型:对象内存布局详解

    注:收藏好文章,得出自己的笔记,以查漏补缺!     ------>原文链接:http://blog.jobbole.com/101583/ 前言 本文可加深对C++对象的内存布局.虚表指针.虚 ...

  5. 【转载】图说C++对象模型:对象内存布局详解

    原文: 图说C++对象模型:对象内存布局详解 正文 回到顶部 0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看.本文的结论都在 ...

  6. JavaScript对象模型-执行模型

    数据类型基本数据类型基本数据类型是JS语言最底层的实现.简单数值类型: 有Undefined, Null, Boolean, Number和String.注意,描述中的英文单词在这里仅指数据类型的名称 ...

  7. 机器阅读理解(看各类QA模型与花式Attention)

    目录 简介 经典模型概述 Model 1: Attentive Reader and Impatient Reader Model 2: Attentive Sum Reader Model 3: S ...

  8. 机器阅读理解(看各类QA模型与花式Attention)(转载)

    目录 简介 经典模型概述 Model 1: Attentive Reader and Impatient Reader Attentive Reader Impatient Reader Model ...

  9. 理解和使用SQL Server中的并行

    许多有经验的数据库开发或者DBA都曾经头痛于并行查询计划,尤其在较老版本的数据库中(如sqlserver2000.oracle 7.mysql等).但是随着硬件的提升,尤其是多核处理器的提升,并行处理 ...

随机推荐

  1. 一些有用的javascript实例分析(三)

    原文:一些有用的javascript实例分析(三) 10 输入两个数字,比较大小 window.onload = function () { var aInput = document.getElem ...

  2. .Net 4.5中的HttpClient试用

    .Net 4.5中增加了一个新的System.Net.Http.HttpClient名字空间(在 System.Net.Http.dll 中),用于发送 HTTP 请求和接收 HTTP 响应. 基本操 ...

  3. WIN2003+IIS6+FastCGI+PHP5.4.30的安装配置

    原文:WIN2003+IIS6+FastCGI+PHP5.4.30的安装配置 说明:PHP5.5已不支持win2003了,Win2003最高能安装PHP5.4.30. 安装好系统:并且安装好IIS6. ...

  4. Notification(一个)——使用演示样本的基础知识

    main.xml如下面: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  5. LogMaster4Net

    使用LogMaster4Net实现应用程序日志的集中管理 日志在软件系统中的重要性我在此也不赘述了,几乎所有程序员每天都会更日志打交道. 那么你是否曾今为这样的一些事情而困扰过: - 远程登录到不同的 ...

  6. Swift语言指南(六)--可选值

    原文:Swift语言指南(六)--可选值 在值可能不存在的情况下使用可选值(optional), 可选值是: · 存在一个值,这个值等于 x 或 · 不存在任何值 注: 在 C 和 Objective ...

  7. [CLR via C#]5.4 对象哈希码和dynamic基元类型

    原文:[CLR via C#]5.4 对象哈希码和dynamic基元类型 FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处.为此,System.Object提供了虚方 ...

  8. cform 开发框架介绍

    CForm是从2012年开始研发的一套灵活,易用,简单,成熟的中小型应用系统开发框架.目前已成功应用在浙江大学.温州科技职业学院.广西农业局.青岛市农业局.乐清妇保院.老博会.婚尚起义结婚网等单位. ...

  9. Codeforces 527C Glass Carving(Set)

    意甲冠军  片w*h玻璃  其n斯普利特倍  各事业部为垂直或水平  每个分割窗格区域的最大输出 用两个set存储每次分割的位置   就能够比較方便的把每次分割产生和消失的长宽存下来  每次分割后剩下 ...

  10. JS模板引擎:tppl

    全球最快的JS模板引擎:tppl 废话不多说,先上测试: 亲测请访问:[在线测试地址]单次结果不一定准确,请多测几次. tppl 的编译渲染速度是著名的 jQuery 作者 John Resig 开发 ...