对象模型图(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 ...
随机推荐
- 请妥善保管自己的QQ等网络帐号
自从2008年以来,太多的同学.朋友,QQ等网络帐号被盗. 然后,盗号者来骗钱.比如 借用账号.帮忙支付费用等. 盗号者固然可恶,传统骗子的网络版. 可是,这些帐号的主人就仅仅是可怜么? 自己的号被盗 ...
- 如何优雅的写UI——(5)选项卡功能实现
先在我们的选项卡可以说能用了,每个标签页都能点进去,但是这还远远没到能用的地步,比如说你把窗口最大化后. 立马就露出马脚了,所以这篇我们要先讲讲tabctrl的最基本的功能实现 改变选项卡大小 上图的 ...
- Java反射之getInterfaces()方法
今天学习Spring3框架,在理解模拟实现Spring Ioc容器的时候遇到了getInterfaces()方法.getInterfaces()方法和Java的反射机制有关.它能够获得这个对象所实现的 ...
- Android 使用开源库载入网络图片
Android 使用开源库载入网络图片,使用开源库载入图片.单击listview弹出popupwindow弹出框详情查看: Android 单击listview弹出popupwindow弹出框 ,里面 ...
- SICP 习题 (1.39)解题总结
SICP 习题1.39沿着习题1.37, 1.38的方向继续前行,要求我们依据德国数学家J.H.Lambert的公式定义tan-cf过程,用于计算正切函数的近似值. J.H.Lambert的公式例如以 ...
- WINDOWS 安装 M2Crypto for Python2.7
WINDOWS 安装 M2Crypto for Python2.7运行环境 WIN8.1 + Python2.7 + VS2008(Microsoft Visual C++ 9.0) VS2008 可 ...
- git- 仓库创建、修改、提交、撤销
1.仓库创建 zhangshuli@zhangshuli-MS-:~$ mkdir myGit zhangshuli@zhangshuli-MS-:~$ cd myGit/ zhangshuli@zh ...
- 43.c++指针类型转换
数据类型转换(static_cast) //数据类型转换 printf("%d\n", static_cast<int>(10.2)); 指针类型转换(reinterp ...
- 【2017 Multi-University Training Contest - Team 7】 Euler theorem
[Link]:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=765 [Description] 问你a ...
- PatentTips - Supporting address translation in a virtual machine environment
BACKGROUND A conventional virtual-machine monitor (VMM) typically runs on a computer and presents to ...