引言

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

    主要处理 嵌套 div,正则无法很好的处理清洗 比如文本: 想要移除 class =quizPutTag 的div ,内部可能嵌套的还有未知层级的div[前提是html文本段是闭合标签的] 这是< ...

  2. linux_无密登录

    使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机. ssh-keygen 创建公钥和密钥. ssh-copy-id 把本地主 ...

  3. 前端学习笔记(zepto或jquery)——对li标签的相关操作(三)

    对li标签的相关操作——八种方式遍历li标签并获取其值 $("ul>li").forEach(function(item,index){ alert(index+" ...

  4. LeetCode——Flatten Binary Tree to Linked List

    Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 4 6 ...

  5. Java数据结构与算法(3) - ch04栈(栈和转置)

    栈的基本特性是后进先出,最简单的用途是用于转置,还有其他诸如括号匹配,中序表达式(A+B*(C-D/(E+F)) --> ABCDEF+/-*+)和后续表达式(345+*612+/- --> ...

  6. NHibernate构建一个ASP.NET MVC应用程序

    NHibernate构建一个ASP.NET MVC应用程序 什么是Nhibernate? NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/re ...

  7. .net mvc mssql easyui treegrid

    效果图 数据图   可以看到 这里是根据 MenuNo 来 分级别的,支持 无限极,第一级是 01 ,第二级就是 01XX ,第三级 就是 01XXOO.类似 id.pid ,Ztree 里面 也是这 ...

  8. Introducing Visual Studio’s Emulator for Android

    visual studio 2015支持Android开发了. Microsoft released Visual Studio 2015 Preview this week and with it ...

  9. C语言库函数大全及应用实例十一

    原文:C语言库函数大全及应用实例十一                                         [编程资料]C语言库函数大全及应用实例十一 函数名: setbkcolor 功 能 ...

  10. SQL data reader reading data performance test

    /*Author: Jiangong SUN*/ As I've manipulated a lot of data using SQL data reader in recent project. ...