基本概念
对象(Object):系统中用来描述客观事物的一个实体。
对象是由类实例化产生的。
类(Class)描述了一组具有相同特性(属性)和相同行为(方法)的对象。
类和对象的关系如同模具和铸件的关系,对象是类的实例化结果,而类是对对象的抽象。
如人是一个类,张三,李四就是对象。
接口(Interface)是定义了一组方法(Method)和属性(Property)的数据结构,通过这组数据结构,可以调用组件对象的功能。
在面向对象编程中,人们通过类的接口来使用类,接口由具体的类来实现,接口定义一个对象能做什么(what),而类定义它怎么做(how).
三种类
AE中共分为3种类:
假设A为抽象类,B为普通类,C为组件对象类, a,b,c为对应的对象。
1、抽象类(Abstract Class)
符号为普通的二维矩形
不能够被创建或者实例化,抽象类用来定义子类的公共接口,子类继承其定义的接口。OMD(Object Model Diagrams,对象模型图)中每个抽象类至少有一个子类。
如Geometry是一个抽象类,它不能直接创建,但是他的子类如Point, Polyline, Polygon可以直接创建, Geometry给出了所有几何元素的共有属性和方法。
2、普通类(Class)
符号为带阴影的二维矩形
不能够直接创建新对象,但可以作为其他类的对象的一个属性
如 B object = c.certainProperty;
或者从某个类的对象的方法来创建。
B object =c.certainMethod();
如FeatureCursor是一个普通类,FeatureCursor不能用new创建,但可以通过IFeatureLayer.Search()方法创建
IFeatureCursor pFeatureCursor = pFeatureLayer.Search(spatialFilter, false);
这里如果pFeatureLayer对象被销毁,那么依附于其上的pFeatureCursor也会消失,可以认为两者之间是组成关系。
3、组件对象类(Component Class,Coclass)
符号为三维立方体
可以用New 关键字来创建
IMap pMap = New MapClass();
或者从别的对象获得运行实例。
IMap pMap = axMapControl1.Map
- 案例一
ArcEngine中workSpace 是一个普通类,不能通过New来创建,但可以通过WorkSpaceFarctory.Openfromfile()方法来创建。
如:
IWorkspaceFactory pWorkspaceFactory =new AccessWorkspaceFactoryClass();
AccessWorkspaceFactoryClass是一个组件对象类,可以直接new来新建一个对象,IWorkspaceFactory是访问该对象的接口。
IWorkspace pWorkspace =
pWorkspaceFactory.OpenFromFile(ConnectionString, 0);
OpenFromFile是IWorkspaceFactory接口中的一个方法,这个方法的结果返回一个WorkSpace对象,该过程称为实例化,我们通过Iworkspace接口去访问WorkSpace对象。
但当我们尝试用New去创建一个Workspace类时,如下:
IWorkspace pWorkspace = new WorkspaceClass();
就会出现以下错误:
“类型”ESRI.ArcGIS.Geodatabase.WorkspaceClass未定义构造函数;
这里可以理解为CoClass是带构造函数的Class,因此它可以用New直接创建对象 。
- 案例二
IMap pMap = New MapClass();
这一步不单单是实例化出一个Map对象,同时把IMap作为访问该对象的默认接口,可以使用IMap里面的属性(Property)和方法(Method)对地图对象进行操作。
PMap.name= “test”;
通过IMap中的name属性来修改地图对象。
PMap.clearLayers();
通过IMap中的clearLayers()方法来清除地图中的所有图层。
PMap.Clear();
执行这一步,出现错误。 因为Clear()属于在Map类的另外一个接口IActiveView所有,不可能从IMap接口中得到这个方法。
可以通过QI(Query Interface,查询接口)来切换到IActiveView上。
IActiveView pView = pMap as IActiveView;
或者IActiveViewpView = (IActiveView)pMap;
PView.Clear();
五种关系
- Type inheritance(类型继承)
符号:带空心三角的线
鹰属于鸟类,是一种继承关系。
- Instantiation (实例化)
符号:虚线箭头前带一个箭头
实例化指某个类的对象具有创建另一个类的方法。鹰(Hawk)通过Birth()这个方法可以创造一个Egg对象。
- Association(关联)
符号:一条普通的直线
鹰和巢之间是松散的关联关系,一只鹰可以拥有几个巢,一个巢可以让几只鹰居住。
关联关系具有方向性:单向关联和双向关联。
- Aggregation(聚合)
符号:带空心菱形的线
如鹰爸爸,鹰妈妈,鹰宝宝聚合成一个家庭,但是当鹰宝宝长大离家之后,鹰宝宝依然存在,不会因为离开家庭而消亡。
- Composition(组成)
符号:带实心菱形的线
鹰的翅膀和鹰的关系,翅膀离开鹰就没有意义,没有价值了,翅膀的生命周期与鹰的生命周期一致。
从联系的紧密程度来看,Association< Aggregation< Composition.
可以这样理解:聚合(Aggregation)是一种特殊的关联(Association),组成(Composition)是一种特殊的聚合(Aggregation)。
- Association
A 和 B 相互调用和访问对方的元素。
A and B call and access each other’s elements.
如学生和课程的关系,一个学生可以学习多门课程,一个课程也会容纳多名学生。
- Aggregation
A 中拥有一个 B,但 B 脱离于 A 仍然可以独立存活。
A has a B, and B can outlive A.
A "uses" B = Aggregation : B exists independently(conceptually) from A.
如学生和班级的关系,27个学生组成了10041451班,但任何一个同学在转出这个班级后仍然存在。
- Composition
A 中拥有一个 B,B 脱离 A 后在系统中没有任何存活的意义。
A has a B, and B depends on A.
A "owns" B=Composition : B has no meaning or purpose in the system without A.
如鸡和翅膀的关系,翅膀脱离了鸡无法存在,没有意义,只能沦为烤鸡翅T_T
- 案例三
- 案例四
其他
常用数据类型介绍:
1、Shapefile:一种基于文件方式存储GIS数据的文件格式,至少有.shp,.dbf,.shx三个文件组成,分别存储空间数据,属性数据,空间和属性数据之间的关系,是GIS比较通用的一种数据格式。
2、Coverage:一种拓扑数据结构,一般的GIS原理书中都有它的原理论述,数据结构复杂,属性缺省存储在Info表中。目前ArcGIS中仍然有一些分析操作只能基于这种数据格式进行操作。
3、Geodatabase:ArcInfo 发展到ArcGIS时推出的一种数据格式,基于RDBMS(关系型数据库管理系统)存储的数据格式。
- Personal Geodatabase, 用来存储小数据量数据,个人地理数据库中的所有内容都保存在单个Microsoft Access 文件(.mdb) 中。
- File Geodatabase, GIS中较为通用,可以保存较多内容,文件地理数据库每个数据集都是磁盘上的一个单独文件,文件地理数据库是用来保存其数据集文件的文件夹。