ArcInfo 的使用方式由两种:其一便是直接使用ArcGIS 桌面应用程序,ArcMap 和ArcCatalog,进行GIS 操作;其二,可以使用其中提供的框架构建开发自己的GIS 应用程序。 数 据建模人员需要站在以上比这两种方式更高的位置来完成自己的工作。用户大多数情况下都会直接使用预先提供的ArcGIS 桌面应用程序创建Geodatabase。当然有时候也会需要你进行一些代码定制,特别是在专业化程度很高的复杂数据模型的模拟上,代码的工作更是不可或 缺。 本书的目标之一便是介绍数据建模的概念,这样的数据建模不仅在ArcInfo 的应用程序中适用,还在ArcInfo 的软件组件中使用,这个软件组建便是我们熟悉的所谓的ArcObjects。 本书中,从使用ArcInfo 软件时遇到的概念说起,然后再使用对象模型图来表现ArcInfo中的这些概念,以利于读者理解。 比如,首先从一个ArcCatalog 用户的角度来讨论geodatabase、要素数据集和要素类的结构。接着从程序员的角度用模型图的相关部分介绍geodatabase 数据的访问对象。 这两种视图模式有相似之处,但是也有很大差别。应用程序的用户界面有时隐藏了对于程序员来说非常重要的一些软件组件细节。本书的目标是让你能够站到比用户和开发者这两个角度更高的位置处理数据建模的工作。 1.8.1 解读类模型图 下面图示中,便是贯穿本书的对象模型图的钥匙。 这些符号是基于UML 画图工具创建的,UML 符号是面向对象分析和设计的工业图样标准。 对象模型图中提供的信息非常多,是对象浏览器中信息的重要补充。Visual Basic,或者其它的开发环境,都会列出所有的类和成员,但不会指明这些类之间的关系。所以,对象模型图是非常有利于读者对ArcInfo 组件的理解的! 本书使用UML 来描述ArcInfo 组件,即ArcObjects,并描述你能够创建的数据模型。 以下详细说明。 1.8.2 类和对象 在UML 图中有三种类型的类:抽象类(abstract class)、可创建类(createable class)与可实例化类(instantiable class)。 抽象类不能用以创建新对象,但可以用来指定子类。举个例子,“line”(线)是“primaryline”(干线)和“secondary line”(副干线)的抽象类。 可创建类指的是那些你能够直接使用开发环境中的对象定义语法来创建对象。比如在Visual Basic 中是这样书写:Dim As New <object> 或者CreateObject <object>。 可实例化类不能够直接创建新对象,但是这种类的对象能够作为其它对象的属性被创建或是从其它类的方法中创建。 在Visual Basic 对象浏览器中,你能够查看ArcInfo 所有的可创建类和可实例化类,但看不到抽象类。 1.8.3 关联 在抽象类、可创建类和可实例化类之间,有几种存在的关联(或称关系)。 联系(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 的生存时间。 1.8.4 用图形符号描述模型 起初你也许不大习惯使用这种图形符号,可以先试着读解上面的例子,并结合自己的实际情况考虑。尝试使用这样的工作方法,而后你将会发现这样的图的读解释很 容易的,而且你也觉得其实花点力气去理解这些符号真的帮助很大——它用简单而富有表现力的方法将对象模型很好的展示给我们,这样理解ArcInfo 组件的概念便轻松简单多了。 如果你需要定制要素,扩展geodatabase 数据访问对象,那么这些UML 符号也是很重要并可以使用的。 |