简单谈谈组件及COM---我的第一帖

2008-02-23 05:35:30来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?BoardID=56&ID=97973

转眼间,在编程道路上的行走已快一年了,心里突然觉得有许多话想拿出来和大家分享一下.我觉得我的路走得很不一般,首先我是学无线电出身的.和编程有点接触,但并不是看家本领.好闲话少述,我们进入正题吧,不然斑竹要删帖了,我的话题是属于C ,希望我没走错屋子,作为我在这个坛子里的第一帖,我想谈谈我对组件的一些看法.
  简而言之,组件就是对象。C 中没有组件的概念,但他能够做出各种各样的组件,C 是一门语言,而组件是个编程模型,Delphi中叫部件,而在Visual BASIC中叫控件。
  组件是对数据和方法的简单封装,C 能够实现组件就因为C 对象模型具备这样的能力。组件能够有自己的属性和方法。属性是组件的数据存贮单位。方法则是组件的一些简单而可见的功能。
  为了说明白话题,我来具个例子,我想研发一个工程,这个工程的功能是简单得不能再简单的计算.设这个实现1 1=2的组件的方法为int Add(int var1=1, int var2=1),实现了这个组件后,我把这个组件买过来,进行二次研发.也就是说我的应用程式用了这个组件,但我在用的过程中我得到的并不是原码,只是二进制的可执行码,和相关的头文档(.H什么的…),更有库文档(.lib什么的),最后一个是.dll文档.我在应用中用的只是Add这个方法,他的实现我不知道,但他行为的结果,我能够接受,因为我要他算1 1=?时,他不会告诉我等于11.但是总于有那么一天(或真有)1 1不等于2了,我就要向卖给我这个组件的研发商说:”我说朋友呀,您最初卖给我的东西,过时了,现在都何年代了,怎么1 1从您的产品出来的还是等于2呢?我现在呀,没时间再改我原先的应用了,您得负责,您得让我原来的应用得出1来呀,不然我以后不再和您合作了”,这时研发商就回去改变了他原先的组件,然后把他交给我,我当然不会再为我原先的应用重新编译拉,链接拉什么的…我只是把他给我的.dll覆盖掉老到掉牙的那分.dll.然后我执行我的老应用程式,奇迹出现了,1 1真的不是2了,而是1或作别的什么的.
这就是组件的一般用法,但是他感人的地方远远不只这些呀.接下来我要来点术语了和细节了.
首先提个问题(看来我的问题挺多的,呵呵)
为什么COM (Common Component Objce)只能提供接口(Interface接口是个包含方法入口地址的表格,但更确切的说,他就是个指向表格的指针变量的一个地址,是不是不好理解)给用户访问对像,而不能直接访问Object的数据成员呢?
这个问题的答案是: 这并不是绝对不能够直接访问Object的数据成员,要访问得有条件:
1 客户端的应用程式必须由支持指针的语言来开,例如C , 但VB不能够.
2 一旦一个组年已生成,也就是编译,链接成.dll文档后,就不能再改变组件的数据成员了(例如,给对像加一个变量,删除一个等),甚至把数据员声明顺序也不能改变,但接口能够扩充,记住原来的接口也不能够改变的,但能够扩充.(因为扩充接口,和改变接口的实现,是COM较为讨人喜欢的地方之一)
要我接受这么苛刻的需要,就相当于,1 1永远等于2了,不能再改变了,也就是,研发商不会再为我提供更新的服务了.假如要,的话,您得重新编译链接,那么我还研发什么组件呀,研发商直接给我源码得了呗.这样看来我们最还是不要直接访问组件对像的数据成员好了.这也是COM最基本特性之一.
为什么会这样呢?
这又得从COM所采用的对象模型谈起(真累呀!).不知道是巧合还是微软有意思将COM模型建立在C 对象模型的基础之上.也就是说现在我们的重点是放在C 对象模型上了.众所周知C 对象模型的特点是:
1 空间和存取时间的效率较好(最起码要比CORBA和SOM所采取的对像模型要好)
2 灵活性及弹性确不够理想,例如,不能直接访问对象的数据成员就表明弹性不足(但CORBA 和SOM确能够)
通常情况下,效率和弹性是一对死对头,两者都很Radical(极端).假如您要效率,那么您会去相应的弹性,反之亦然.就似乎VB比较可人,但运行起来要比C 大哥慢许多相同.但他们谁也不指望谁要消失.因为,各有各的长处就是了.
至于,C 对像模型(COM采用),表格驱动对像模型(CORBA和SOM采用)我想下次再说吧,我为我的帖子写了我前提到的组件(实现Add), 但不知道为什么原因总传不上来,假如谁有兴趣就跟贴吧,大家多顶几下,想必这是我的第一贴,呵呵




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C /CLI基本数据类型探索

下一篇: 简单谈谈组件及COM---对象模型图

热门词条
热门标签