关于组件类结构图

通过阅读SuperMap iMobile for Android 的类结构图,或者称为组件对象模型图(Component Objects Model Diagram,即COMD),可以很快地熟悉SuperMap iMobile for Android 不同类型之间的关系。

类结构图是基于UML(Unified Modeling Language),即统一建模语言绘制的,在类结构图上,程序员可以清楚地了解类之间的关系,如何从一个对象得到另外一个对象,从而选择正确的应用程序接口,获取需要的属性和方法等成员,帮助程序员有效地建立应用系统。

在阅读SuperMap iMobile for Android 类结构图之前,首先必须明确在SuperMap iMobile for Android 架构中共有几种不同的类,以及各种类如何使用。

类的类型

在SuperMap iMobile for Android 中,共有5种类型的类,如下图所示为5种类图例,分别为抽象类(Abstract Class),可创建类,不可创建类,静态类(Static Class),枚举类(Enumeration Class)。

图:五种类图例

抽象类

抽象类,又称虚类,不可实例化,也就是说,抽象类没有实例,但很多具体类可以继承于此抽象类。

例如,Geometry类是一个抽象类,不存在Geometry对象,但是GeoPoint,GeoLine,GeoRegion等类都是继承于Geometry类,GeoPoint,GeoLine,GeoRegion等的实例分别为二维点几何对象,二维线几何对象和二维面几何对象。抽象类定义的成员都可以被其子类继承。

可创建类

可创建类,是指其实例对象可以通过New关键字直接创建出来并初始化的类型。其实例对象不依赖其它对象而存在,其生存周期也不用其它对象来管理。

例如,Workspace类是一个可创建类,通过以下语句来创建一个Workspace的对象,其中的workspace为一个Workspace类的实例。

Workspace workspace = new  Workspace();

不可创建类

不可创建类,是指其实例对象不能直接产生,而是通过其它类的方法得到。不可创建类的对象不可以用New关键字来创建,也不存在构造函数。

例如,Datasources类是一个不可创建类,其产生方式可以通过Workspace类的Datasources方法来得到。其中,workspace为Workspace类的对象,而datasources为由此Workspace对象得到的Datasources对象。

Datasources datasources =  workspace.getDatasources();

静态类

静态类,其成员均为静态的方法,没有实例,可以直接使用。静态类的作用相当于一个地理处理的工具集,其中的每个方法为一个地理处理工具,输入为其参数,输出为其返回值。

例如,Geometrist类型为静态类型,可以通过以下方式来使用。其中,geoRegion1,geoRegion2和geoRegion3分别为三个GeoRegion对象。Geometrist类可以直接使用,不需要创建其类的对象。

GeoRegion geoRegion3 =  Geometrist.intersect(geoRegion1, geoRegion2);

枚举类

枚举类,定义相关常量,同样没有实例对象。

EncodeType类型为一个枚举类型,其中,datasetVInfo为一个DatasetVectorInfo对象。

datasetVectorInfo.getEncodeType(EncodeType.INT32);

类的关系

SuperMap iMobile for Android 中的各类之间的关系共有三种:聚合关系,继承关系和关联关系;其中聚合关系又包含三种,都可以通过UML图中的连接关系描述出来。

聚合关系

聚合关系分为3种,如下图所示:

  • 对象A包含一个对象B,表示一个对象A中必须包含或对应一个对象B,且必有一个对象B,例如一个Datasource对象必定对应一个Datasets对象;
  • 对象A包含零个或一个对象B,表示一个对象A中只能包含或对应一个或零个对象B,例如一个Layer对象可以对应一个Theme对象,也可以不对应Theme对象;
  • 对象A包含零个或多个对象B,在这个关系中,一般A对象为B对象的集合,例如一个Datasources对象可以包含多个Datasource对象。
图:聚合关系

继承关系

一个抽象类不可以直接产生一个对象,只能通过其子类来实现其属性和方法,子类将继承父类全部的非私有方法和属性,而且子类可以看做是父类的一种。子类与其父类的关系为继承关系。

如下图所示:B从A继承,A为父类,B为其子类。类之间的继承可以看做是类功能的扩展,即子类在保存父类的属性和行为的基础上,增加自己特有的行为和属性。

例如,GeoPoint,GeoLine,GeoRegion和GeoText都继承于Geometry抽象类。当然继承关系并不仅局限为抽象类与其子类之间的继承关系,但在SuperMap iMobile for Android 中,这种类型的继承关系是最常见的。

图:继承关系

关联关系

A与B之间有一定的关联,可以从A类的对象访问到B类的对象,则A与B之间的关系为关联关系,如下图所示:

图:关联关系

关联关系比较概括地反映类之间松散的关系。在SuperMap iMobile for Android 中,类之间的关联可以归纳成两种:

例如,Datasource与EngineType之间的关联关系,Datasource通过EngineType来设置其引擎类型。

例如,DatasetVector与Tolerance类型之间的关联关系。

例如,Workspace类和WorkspaceConnectionInfo类之间为关联关系,Workspace可以通过WorkspaceConnectionInfo对象来创建,打开和保存。

例如,DatasetVector与Recordset,通过对DatasetVector进行查询操作可以得到Recordset,通过Recordset对象也可以获得其对应的DatasetVector对象。

  • 使用与被使用的关系。如主要类对枚举类的使用,主要类对其属性类的使用,以及主要类型创建时所需要的信息类型。
  • 操作的关系。