樱木 原文 对象模型图(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)阅读指南的更多相关文章

  1. 理解对象模型图(Reading OMDS)

    理解对象模型图(Reading OMDS) 引言 这篇文章大部分内容是翻译的帮助资料里的东西.学习技术,英语是个好工具.一直把英语的地位看得和技术一样重,也会强迫自己看英语版的技术书籍(都是PDF版的 ...

  2. 转:苹果Xcode帮助文档阅读指南

    一直想写这么一个东西,长期以来我发现很多初学者的问题在于不掌握学习的方法,所以,Xcode那么好的SDK文档摆在那里,对他们也起不到什么太大的作用.从论坛.微博等等地方看到的初学者提出的问题,也暴露出 ...

  3. android插件化-apkplugdemo源代码阅读指南-10

    阅读本节内容前可先了解 apkplug基础教程 本教程是基于apkplug V1.6.8 版本号编写  最新开发方式以官网为准 可下载最新的apkplugdemo源代码http://git.oschi ...

  4. 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在学习5G规范过程中,有些内容把握不定的时候,有时 ...

  5. 【转载】 JQuery.Gantt(甘特图) 开发指南

    转载来自: http://www.cnblogs.com/liusuqi/archive/2013/06/09/3129293.html JQuery.Gantt是一个开源的基于JQuery库的用于实 ...

  6. 苹果Xcode帮助文档阅读指南

    文档导读 https://developer.apple.com/legacy/library/navigation/ 前面我们讲Xcode的文档结构是在介绍如何能够快速定位到你要找的内容.但是很多人 ...

  7. Python基础知识思维导图|自学Python指南

    微信公众号[软件测试大本营]回复"python",获取50本python精华电子书. 测试/开发知识干货,互联网职场,程序员成长崛起,终身学习. 现在最火的编程语言是什么?答案就是 ...

  8. MaxCompute 图计算开发指南

    快速入门step by step MaxCompute Studio 创建完成 MaxCompute Java Module后,即可以开始开发Graph了. 代码示例 在examples目录下有gra ...

  9. 《金融业人工智能实践 》(Hands-On Artificial Intelligence for Banking) 阅读指南 - 第5章

    术语中英互查: Morningstar Style Box - 晨星投资风格箱方法 (该翻译来自于晨星中国官网,权威得不能再权威了 https://cn.morningstar.com/help/da ...

随机推荐

  1. Dubbo springcloud

    简而言之,Dubbo确实类似于Spring Cloud的一个子集,Dubbo功能和文档完善,在国内有很多的成熟用户,然而鉴于Dubbo的社区现状(曾经长期停止维护,2017年7月31日团队又宣布重点维 ...

  2. 初识Django框架——环境搭建前你需要了解的几点

    Django是一个开放源代码的Web应用框架,由Python写成. 采用了MVC的框架模式,即模型M,视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是C ...

  3. 【Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) A】 Perfect Squares

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] N*1000暴力就好 [代码] #include <bits/stdc++.h> using namespace std ...

  4. jquery的图片轮播 模板类型

    先说一下用到的几个重要的事件 j jQuery on()方法是官方推荐的绑定事件的一个方法. $(selector).on(event,childSelector,data,function,map) ...

  5. H5+混合移动app

    H5+混合移动app 前言 经过2个多月的艰苦奋斗,app的第一个版本已经快完工了,期间遇到了太多的坑,作为一个喜欢分享的人,我当然不会吝啬分享这爬坑历程.不要问我有多坑,我会告诉你很多,很多.... ...

  6. CF-833B The Bakery(线段树优化Dp)

      Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredie ...

  7. 反序列化xml到treeview

    private void Form1_Load(object sender, EventArgs e) { string xmlPath = System.Environment.CurrentDir ...

  8. Android时间对话框TimePickerDialog介绍

    目前网上流行着很多对“时间对话框TimePickerDialog”的讲解文章,但感觉都不是很详细.这里详细对该方面的知识进行介绍,旨在帮助初学者能够快速掌握该项技术. 首先要做的是声明一个日历类的对象 ...

  9. socket UDP简单通讯

    // // SocketUDPServerClient.m // socket_server_client // // Created by lujunjie on 2016/11/26. // Co ...

  10. 在CentOS7 开发与部署 asp.net core app笔记

    原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...