对象模型图(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 ...
随机推荐
- sql%rowcount 返回影响行数
oracle中.返回影响行数是:If sql%rowcount 举例: update ut_calenderStatus t set t.calenderstatus=pi_flg, t.m=pi_M ...
- 阿姆达尔定律(Amdahl's law)
首先给出阿姆达尔定律的数学公式描述: S(N)=1(1−p)+pN p:程序中可并行部分的程序在单核上执行时间的占比: N:处理器的数目(总的核心数) S(N):程序在 N 个处理器(总核心数)相对在 ...
- C#监控代码运行的时间
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); //开始监视代码运行时间 ...
- Codeforces Round #277.5 解题报告
又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...
- [D3] Draw a basic US d3-geo map
Install: npm install --save d3 d3-geo topojson Code: import React, {Component} from 'react'; import ...
- x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()
x264代码剖析(三):主函数main().解析函数parse()与编码函数encode() x264的入口函数为main().main()函数首先调用parse()解析输入的參数,然后调用encod ...
- Linux下常用的中文输入法平台有IBus、fcitx和scim
Linux下常用的中文输入法平台有IBus.fcitx和scim.scim现在维护滞后,不推荐使用. IBus ("Intelligent Input Bus") 是一个 输入法框 ...
- RPC调用框架比较分析--转载
原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC: RPC(Remote Pr ...
- Mysql学习总结(14)——Mysql主从复制配置
mysql主从复制 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3. ...
- 项目太大tomcat启动不起来
双击server,Open launch configuration Arguments VM arguments增加参数: -Xms512m -Xmx1024m -Xss4m -XX:PermSiz ...