手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

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

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

原帖及讨论: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), 但不知道为什么原因总传不上来,假如谁有兴趣就跟贴吧,大家多顶几下,想必这是我的第一贴,呵呵




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS