通过阅读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对象。
- 使用与被使用的关系。如主要类对枚举类的使用,主要类对其属性类的使用,以及主要类型创建时所需要的信息类型。
- 操作的关系。