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

简单谈谈组件及COM---对象模型图

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

我发现没有一张图,是说明不了问题,但是贴子,放不了图片,没办法先,上传一张吧.

在第一贴,我们最后谈到对象模型,我现在谈谈这方面的问题。
就我所知的对像模型有三种:简单对像模型,表格驱动对象模型,和C 对像模型。
但是在真正用于产品的也但是是后两种,我不知道第一种有没有真正被应用(读者假如知道请告诉我一声),表格驱动对象模型被CORBA(common object request broker architecture)和SOM (system object model) 采用,而C 对象模型被COM所采用。
先看看表格驱动对象模型:
图中的表格驱动模型对象中,左边的就是个对象了,本对象由两部组成(其实不只这些,因为假如对象是继承而来的话,会多些数据),首先看看dataPtr,他是个指针,指向右边的表格,而这个表格,放的就是成员变量了(也就是说类中的属性)例如,data1,data2.而funPtr
放的也是个指针,但是这个指针所指向的表格有点特别,因为,表格的每一项的大小都是相等的,一般是4个字节为一项,放的是个成员函数的入口地址,但是要注意,他所放的虚函数的入口地址,也就是virtual member function而不是nonvirtual member function.这些入口函数的入口地址,在编译时由编译器写入。而funPtr则是当程式运行,并创建对象时由构造函数,或都=拷贝运算符动态写入的。我们再仔细看看这个函数表格的第一项,我没有给他写上任何东西,那是因为,他能常不会放函数的入口地址,他可能会放一些指向别的对像的指针,如type_info类型的对象,这是个描述一个对像的RTTI(runtime type info)的对象,在他的前而还可能是会有一些项放的即不是对象指针也不是函数入口地址,他放的是一些偏移量(当这个对像是由虚拟继承而来的话),Sun公司,及cfont的某个版本的编译器,假如我没记错的话就是用这个原理来实现类的虚拟继承,但是MSVC 的编译不是这样的,这里不想多说,因为我们的主题不在这。
如了说到了这里我想您会想到一我在第一贴里提到的,组件和客户程式,只要接口不变,那么后续的组件,对于客户原来的应用程式,不用再编译,链接就能使用的原理所在了。答案就在于对像的funPtr的指针上,他并不是由编译器给固定成某个值,而是随着组件程式的改变而不断的改变的,他的值是在过行时才确定的。所以客户的应用程式不用编译,链接就能远行,也就是说,组件的方法,一定要用C 的虚函数才能实现。要有一层的间隔才能灵活,富有弹性。我们还注意到,表格驱动的对象模型连数据都是间接访问,说明他也能让客户时进行直接访问,不但仅局限于接口能让客户使用。现在我们来看看C 的对象模型,他的数据并没有像表格驱动的对象模型那样具用间接性,所以,客户就不能直接访问,而只有接口了,这就是为什么COM只能提供接口让客户访问的原因,那么是不是C 对象模型编出来的组像就不能提供,属性访问呢。就我个人来说,不是的。C 对象模型同样能编出即能提供接口也能提供性性访问的组件,但是这种组件就不能再称为COM了吧。但是我不敢下结论因为我没有看过COM规范的原文,不知道COM是不是也把直接拱属性访问作为他的标准。下一次我将编一个支持属性直接访问的组件(提示,得用到虚拟继承)




文章整理:西部数码--专业提供域名注册虚拟主机服务
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