ArcObjects中的类结构关系图

在ArcObjects中类分为三种,分别是抽象类(Abstract Class),组件类(CoClass)和普通类(Class)[普通类也叫做实例化类]。

如下图所示:


为了更能形象的说明问题,将上图具体化一个示例,如下图所示:



抽象类只能被继承。

组件类可以用New关键字创建。

普通类不能用New关键字创建,可以认为它的构造函数是private的,只能通过其他类(普通类或组件类)的方法产生,这个过程称为实例化。

如下面的例子,A和B为普通类对象,C为组件类对象,D为一个普通类,如下面的代码:

A = B.writeA()   正确

A = C.writeA()  正确

A = New D()    不正确,普通类不能通过new的方法产生

A可以由B和C的writeA方法产生,A的生命周期是由产生它的对象的B和C控制的,如果B或C对象在内存中被释放了,则此对象也将从内存中消失。

下面举一个ArcObjects中普通类的例子:


以上图片说明WorkspaceClass是个普通类,不能够直接创建,但是可以通过IWorkspaceFactory接口的open方法来实例化产生,如下图所示:



如果某个类是抽象类(比如WorkspaceFactory类)或者是普通类(比如Workspace类),那么我们在查看该类的帮助文档时,会发现在一开始就有如下一句话:

SomeClass is a non-creatable object. References to non-creatable objects must be obtained through other objects. 


类之间的关系有四种:继承、依赖、关联、组合。

继承比较简单,就不说了。

依赖关系:比如A---------->B,就说一个对象有方法产生另一个对象,A的一个方法产生了B,即实例化产生了B的一个对象。当A的状况发生变化时,B也会发生变化,如果A消失,那么B也会消失。即前者的生命周期决定后者的生命周期。

关联关系:比如Owener 1...*   ------------      1...*  Land Parcel,这两个对象是松散的关联关系,可以从一个类的对象访问到另一个类的对象。如一个土地可能有多块土地,一块土地也可能被多个所有者拥有。当其中的一个不存在时,另一个不会消失。再比如上图中的chicken与nest的关系就是关联关系。关联关系是有方向的,如果只存在一个方向,称为单项关联;如果是两个方向都存在关系,则称为双相关联。如果没有标注1...*,默认就是1。

组合关系:一定要区分组合关系与关联关系的区别,因为二者都有可能出现1...*,二者的区别是组合关系会出现一个黑色的菱形,而关联关系没有。比如上图中的ckicken与wings就是组合关系,而且是一对多的组合关系。wings是chicken的一部分,当chicken消失的时候,wings自然就不复存在。我们可以认为wings是chicken的一个集合,wings是该集合中的一个对象,当集合为nothing的时候,集合内的对象也将是nothing,即wings的生命周期肯定是由chicken对象控制的,但wings的产生不受chicken的控制。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值