对象模型图【OMD】阅读指南(转)

摘要:
UML是描述、可视化和记录面向对象开发系统产品的标准语言。首先,让我们看看OMD能为我们做些什么?对象模型图提供了大量信息,这是对对象浏览器中信息的重要补充。因此,对象模型图对于读者理解ArcInfo组件非常有帮助!抽象类不能用于创建新对象,但可以用于指定子类。多重关联是为了限制对象类和其他对象之间的关联数量。

补充几个名词概念:
UML:Unified Modeling Language 统一建模语言,是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
OMD:Object model diagrams 对象模型图表。

首先来看看OMD能帮我们做什么?
1. 该类支持哪些接口;
2. 完成任务需要哪些对象;
3. 如何使用该类的对象;
4. 是否可以直接实例化类;
5. 接口有哪些方法和属性;
6. 是否有其它类也支持该接口;
7. 对象间的关系

下面图示中,便是贯穿本书的对象模型图的钥匙。

对象模型图【OMD】阅读指南(转)第1张

这些符号是基于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)关联。

对象模型图【OMD】阅读指南(转)第2张

在这张图上,一个业主能有拥有一块或多块宗地;同样地,一块宗地可以被一个或多个业主所共有。

多重性关联就是限制对象类与其它对象关联的数目关系。以下是用于多重性关联的符号:

1 —— 一个并且只有一个,这种多样性是可选的;如果不标明,则默认为“1”
0..1 —— 零个或一个
M..N —— 从M 到N(正整数)
*或者0… * —— 从零到任意正整数
1… * —— 从一到任意正整数

类继承(type inheritance)定义了专门的类,它们拥有超类的属性和方法,并且同时也有自身的属性和方法。

对象模型图【OMD】阅读指南(转)第3张

上图说明primary line 和secondary line 是line 的一种类型。

实例化(Instantiation)指定一个类的对象有这样的方法,它能够创建另外一个类的对象。

对象模型图【OMD】阅读指南(转)第4张

pole 对象有一个方法能够创建transformer 对象。

聚合(Aggregation)是一种不对称的关联方式,在这种方式下一个类的对象被认为是一个“整体”,而另一个类的对象被认为是“部件”。

对象模型图【OMD】阅读指南(转)第5张

一个transformer bank 正好有3 个transformer 。在这个图中transformer 能和一个transformer bank 相关联,但当transformer bank 移除以后,transformer 依然能够存在。

组成(Composition)是一种更为强壮的聚合方式,此种方式下,“整体”对象控制着“部分”对象的生存时间。

对象模型图【OMD】阅读指南(转)第6张

一个pole 包含一个或多个crossarm。在这个图中当pole 被移除后,crossarm 就不能再使用了。因为pole 控制着crossarm 的生存时间。

在安装完AE后,我们就可以在相关目录中找到AE的OMD图,
一般在 安装目录\DeveloperKit\Diagrams下
下为ArcEngine中OMD的截图:

 对象模型图【OMD】阅读指南(转)第7张

其中
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】阅读指南(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[二] JavaIO之File详解 以及FileSystem WinNTFileSystem简介Hyper-V安装虚拟机下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java中abstract的用法

abstract(抽象)修饰符,可以修饰类和方法1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。2,abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类...

C#抽象类

转自:http://www.cnblogs.com/ArmyShen/archive/2012/09/02/2667953.html abstract修饰符可以和类、方法、属性、索引器及事件一起使用,在类声明中使用abstract修饰符以表明这个类只能是其他类的基类。 抽象类的特性 (1)抽象类不能被实例化 (2)抽象类可以包含抽象方法和抽象访问器 (3...

kotlin面向对象之抽象类、继承、多态

继承: 比较简单,直接看如何使用,这里以父亲与儿子的关系为例: 接着定义儿子并且继承父亲,如下: 是用":"号来继承的,但是此时报错了,看下错误提示: 在kotlin的类并非是人人都可以继承的,从提示来看说Father是一个final类型的,好奇怪,也没对Father类声明为final呀,要想解决这个问题,这时需要在Father类中增加一个关键字"o...

[Java核心技术]五-继承(枚举类)

Java枚举类型(enum) 枚举类型都是继承了Enum类(是一个抽象类)的一个类,我们可以向enum类中添加方法和变量等。编译再反编译可以看到枚举类型对应的类的内容。 每个枚举常量都对应一个Enum类的实例。 例子 public enum Day2 { MONDAY("星期一"), TUESDAY("星期二"), WEDNES...

Java面向对象之接口

内容: 1、接口的概念与定义 2、类实现接口 3、接口的特点 4、接口和抽象类的区别 1、接口的概念与定义 (1)类和接口 类:具有相同属性和功能的事物集合 接口:接口是功能的集合,也就是方法的集合,也就是说接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法必须都是抽象的,可以理解接口是比抽象类更加抽象的一种类 (2)接口的定义 定义类的关键...

项目实战中如何使用抽象类和接口

引子: 时常会有这么一个疑惑,抽象类和接口功能好像,真正用起来该如何抉择呢?? 好问题。。 来看看书上怎么说的(C#7.0本质论) 虽然方法可在基类中声明为抽象成员,但是!!如果都从一个基类派生,会用掉唯一的基类机会,(什么意思呢:也就是C#的单继承特性了),所以,什么都往基类里面加,就会显得特别臃肿,且不通用。 所以,原则就是:大共性你给我放基类,小共性...