对象模型图(OMD)阅读指南
樱木 原文 对象模型图(OMD)阅读指南(转载)
补充几个名词概念:
UML:Unified Modeling Language
统一建模语言,是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
OMD:Object model diagrams 对象模型图表。
首先来看看OMD能帮我们做什么?
1. 该类支持哪些接口;
2. 完成任务需要哪些对象;
3. 如何使用该类的对象;
4. 是否可以直接实例化类;
5. 接口有哪些方法和属性;
6. 是否有其它类也支持该接口;
7. 对象间的关系
下面图示中,便是贯穿本书的对象模型图的钥匙。
这些符号是基于UML 画图工具创建的,UML
符号是面向对象分析和设计的工业图样标准。
对象模型图中提供的信息非常多,是对象浏览器中信息的重要补充。Visual
Basic,或者其它的开发环境,都会列出所有的类和成员,但不会指明这些类之间的关系。所以,对象模型图是非常有利于读者对ArcInfo
组件的理解的!
本书使用UML 来描述ArcInfo
组件,即ArcObjects,并描述你能够创建的数据模型。
以下详细说明。
1. 类和对象
在UML 图中有三种类型的类:抽象类(abstract
class)、可创建类(createable
class)与可实例化类(instantiable class)。
抽象类不能用以创建新对象,但可以用来指定子类。举个例子,“line”(线)是“primaryline”(干线)和“secondary
line”(副干线)的抽象类。
可创建类指的是那些你能够直接使用开发环境中的对象定义语法来创建对象。比如在Visual
Basic 中是这样书写:Dim As New
<object> 或者CreateObject
<object>。
可实例化类不能够直接创建新对象,但是这种类的对象能够作为其它对象的属性被创建或是从其它类的方法中创建。------比较难理解。
2. 关联
在抽象类、可创建类和可实例化类之间,有几种存在的关联(或称关系)。
联系(association)便描述了类之间的关联。在两端的类中可以定义多重性(
Multiplicity)关联。
在这张图上,一个业主能有拥有一块或多块宗地;同样地,一块宗地可以被一个或多个业主所共有。
多重性关联就是限制对象类与其它对象关联的数目关系。以下是用于多重性关联的符号:
1 ----
一个并且只有一个,这种多样性是可选的;如果不标明,则默认为“1”
0..1 ---- 零个或一个
M..N ---- 从M 到N(正整数)
*或者0… * ---- 从零到任意正整数
1… * ---- 从一到任意正整数
类继承(type
inheritance)定义了专门的类,它们拥有超类的属性和方法,并且同时也有自身的属性和方法。
上图说明primary line 和secondary line 是line
的一种类型。
实例化(Instantiation)指定一个类的对象有这样的方法,它能够创建另外一个类的对象。
pole 对象有一个方法能够创建transformer 对象。
聚合(Aggregation)是一种不对称的关联方式,在这种方式下一个类的对象被认为是一个“整体”,而另一个类的对象被认为是“部件”。
一个transformer bank 正好有3 个transformer
。在这个图中transformer 能和一个transformer bank
相关联,但当transformer bank 移除以后,transformer
依然能够存在。
组成(Composition)是一种更为强壮的聚合方式,此种方式下,“整体”对象控制着“部分”对象的生存时间。
一个pole
包含一个或多个crossarm。在这个图中当pole
被移除后,crossarm 就不能再使用了。因为pole
控制着crossarm 的生存时间。
在安装完AE后,我们就可以在相关目录中找到AE的OMD图,
一般在 安装目录\DeveloperKit\Diagrams下
下为ArcEngine中OMD的截图:
其中
OMD中的符号:
一个三角形符号 表示继承
菱形的黑色小块 表示组成
虚线前头带个箭头 表示用来创建
* 表示对应关系1:N
一条直线表示 联合
类的类别:
抽象类:不能创建或实例化,从来没有一个抽象类的实例
用于定义子类的公共接口,子类继承其定义的接口。
OMD符号为:二维的内部有阴影的矩形。
实例化类:不能创建,从别的对象获得实例。
OMD符号为:3D矩形内部没有阴影。
可创建的类:用New关键字创建对象或者从别的对象获得运行实例。
OMD符号为:带阴影的3D矩形符号。
属性和方法:
属性:哑铃状的图标,Read(左侧的哑铃)和write(右侧的哑铃)
方法:指向左侧的箭头
接口:棒棒糖类型的图标
图表之间的连接:虫洞
===========================
个人感觉在OMD图中比较难理解的就是可实例化类CLASS。我做了以下例子去理解它:
ArcEngine中 workSpace 就是一个可实例化类,
WorkSpace不能用new创建,但可以通过WorkSpaceFarctory.Openfromfile()方法来创建.如下:
IWorkspaceFactory pWorkspaceFactory = new
AccessWorkspaceFactoryClass();
IWorkspace pWorkspace =
pWorkspaceFactory.OpenFromFile(ConnectionString, 0);
但当我们尝试用New去创建一个Workspace类时,如下:
IWorkspace pWorkspace = new WorkspaceClass();
就会出现以下错误:
“类型”ESRI.ArcGIS.Geodatabase.WorkspaceClass未定义构造函数;
所以,Class和CoClass的主要区别就是CoClass是带构造函数的Class.以此它可以用New直接创建对象
对象模型图(OMD)阅读指南的更多相关文章
- 理解对象模型图(Reading OMDS)
理解对象模型图(Reading OMDS) 引言 这篇文章大部分内容是翻译的帮助资料里的东西.学习技术,英语是个好工具.一直把英语的地位看得和技术一样重,也会强迫自己看英语版的技术书籍(都是PDF版的 ...
- 转:苹果Xcode帮助文档阅读指南
一直想写这么一个东西,长期以来我发现很多初学者的问题在于不掌握学习的方法,所以,Xcode那么好的SDK文档摆在那里,对他们也起不到什么太大的作用.从论坛.微博等等地方看到的初学者提出的问题,也暴露出 ...
- android插件化-apkplugdemo源代码阅读指南-10
阅读本节内容前可先了解 apkplug基础教程 本教程是基于apkplug V1.6.8 版本号编写 最新开发方式以官网为准 可下载最新的apkplugdemo源代码http://git.oschi ...
- 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在学习5G规范过程中,有些内容把握不定的时候,有时 ...
- 【转载】 JQuery.Gantt(甘特图) 开发指南
转载来自: http://www.cnblogs.com/liusuqi/archive/2013/06/09/3129293.html JQuery.Gantt是一个开源的基于JQuery库的用于实 ...
- 苹果Xcode帮助文档阅读指南
文档导读 https://developer.apple.com/legacy/library/navigation/ 前面我们讲Xcode的文档结构是在介绍如何能够快速定位到你要找的内容.但是很多人 ...
- Python基础知识思维导图|自学Python指南
微信公众号[软件测试大本营]回复"python",获取50本python精华电子书. 测试/开发知识干货,互联网职场,程序员成长崛起,终身学习. 现在最火的编程语言是什么?答案就是 ...
- MaxCompute 图计算开发指南
快速入门step by step MaxCompute Studio 创建完成 MaxCompute Java Module后,即可以开始开发Graph了. 代码示例 在examples目录下有gra ...
- 《金融业人工智能实践 》(Hands-On Artificial Intelligence for Banking) 阅读指南 - 第5章
术语中英互查: Morningstar Style Box - 晨星投资风格箱方法 (该翻译来自于晨星中国官网,权威得不能再权威了 https://cn.morningstar.com/help/da ...
随机推荐
- 多行文本溢出显示...的方法(-webkit-line-clamp)
限制在一个块元素显示的文本的行数. -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 为了实现该 ...
- visualSVN+花生壳实现外网访问局域网内SVN
使用SubVersion+TortoiseSVN局域网内访问SVN成功后,想从外网访问SVN,使用花生壳绑定路由器动态DNS,但是折腾半天没搞定,突然发现一个帖子http://hi.baidu.com ...
- PatentTips - Improving security in a virtual machine host
BACKGROUND Computer viruses are a common problem for computer users. One typical mode of attack is t ...
- POJ 3461 Oulipo KMP算法题解
本题就是给出非常多对字符串,然后问一个字符串在另外一个字符串出现的次数. 就是所谓的Strstr函数啦. Leetcode有这道差点儿一模一样的题目. 使用KMP算法加速.算法高手必会的算法了. 另外 ...
- 内存泄漏与指针悬挂&野指针介绍
内存泄漏概念:内存泄漏时指动态申请的内存空间没有正常释放,但是也不能继续使用的情况. 例如: char *ch1; ch1 = new char('A'); char = *ch2 = new cha ...
- if 的理解
1. if 实现集合的划分 比如著名的 Prim 算法(最小生成树),从某一确定的点出发,每次新加入的点,都是在已访问过的结点(u∈U)和未访问过(v∈V−U)的结点之间的边.这里的未被访问(V−U) ...
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- ZZUACM 2015 暑假集训 round 01
A. Encoding Problem Description Given a string containing only 'A' - 'Z', we could encode it using t ...
- [NPM] Update published npm packages using np
When we want to update our package we need to do a few things: pull latest from our git remote, bump ...
- 106.TCP传文件
客户端 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include < ...