理解COM

1、计算机语言,机器语言,高级语言 (节省时间)

为了同计算机打交道,调用计算机的功能、资源,人们发明了计算机语言。同计算机交流的语言,称为计算机语言。 

 一开始,人们要通过机器语言同计算机打交道,但机器语言是二进制的,难以阅读、使用,换句话说,浪费人力、精力。

随后,发明了高级语言。就是说,人们直接使用的是高级语言,这种语言更接近人的自然语言,这是面向人的一面。

但是,计算机不懂高级语言,只懂二进制语言,于是需要一个翻译,这就是编译器。它将人识别的高级语言转化为计算机可以识别的二进制语言。

这一切,都是为了降低难度,简化劳力。

2、库技术:静态库(独享库,节省时间、劳力),动态库(共享库) (节省内存空间)

人们在编写程序的时候,涉及到一个问题是,有很多功能代码是很多人都会用到的,或者说 很多人都编写过的,既然如此,何不只编写一次,随编译器发布,给所有人呢使用呢。

于是,引入了库的概念(思想)。这一思想就是为了节省劳动,实现代码的可重用。库的存在形态通常有 源代码库(高级语言形式),以及经过编译的二进制形式(机器语言形式)。这些库通过连接到程序员的程序中,达到被使用的目的。

对于这些库,新的矛盾又出现了。虽然引入了库,避免了很多代码的重新编写,减轻了这一部分劳动,但是,对于同一台计算机上的很多程序,可能会使用相同的库,这样,同一个库被连接到同一台机器的不同程序中,这些程序如果同时运行,那么这些库在内存中存在很多副本,特别是随着软件的增多,这些库就极大地占用了内存。这就是传统的所谓静态链接库的缺点。 这个传统的静态链接库被每一个应用程序独享。于是人们提出,对于公用的库,能否做成(被不同的应用程序)共享库? 其思想是,库在内存中只有一份,不同应用程序共享这同一个复本。 于是提出了 动态链接库的概念,就是在程序运行的时候(而不是编译的时候)根据需要加载到内存供不同程序访问。

静态链接库-独享库;动态链接库--共享库。 

3、COM,组件技术:语言无关性 组件, 进一步节省空间

引入了动态链接库的概念和技术以后,新的问题又出现了。

传统的动态链接库都是面向语言的。比如,用C++编写的动态链接库无法被 其他语言编写的应用程序调用。因此,其他语言同样需要维护一份该语言的动态链接库,这又需要浪费内存空间。于是又出现了COM的思想。

COM思想希望用不同语言开发的 库 ,可以为不同语言的应用程序所使用。COM思想提出以后,需要一系列的规范把这些思想描述清楚。这规范都不止一家,如有Microsoft的COM/DCOM,Java的JavaBeans和EJB,OMG组织的CORBA。相应的规范都有相应的技术实现。因此,COM不是编程语言、代码库或编译器,而是一个构造二进制兼容软件组件的规范,是一种能够使每个程序部件相互操作的标准。因此,实现COM思想的具体技术就有很多了。

微软提出了自己的一套实现COM思想的COM规范,然后定义并实现了一套支撑COM的技术。对于程序的开发人员,他还提供了ATL+VS这一套简化程序员开发COM组件的开发工具。

总之,节约时间(辛苦,劳动)和节约空间,是推动软件开发技术发展的两个永恒的动力。

 

4、COM不是插件(add-in)

COM技术不是插件技术。插件是指在一个已经开发好并部署的应用中,在后期使用中,利用应用自带的扩展功能和开发方法、要求,开发额外的功能补丁。COM是语言级别的组件技术。

 

5、组件再论

组件 不是 一堆软件组合在一起。也不是插件。COM组件技术将导致在开发一个应用程序时,将导致这个程序由一个个模块组成。这些模块与以往源代码级的代码模块是不同。这每一个模块又由两部分组成,一部分是模块的接口(标准),另一部分是这个接口内函数的具体实现。每一个模块在编译成二进制以后,就与语言无关了。换句话说,任何一个模块都可以用任何的语言开发,只要遵守这个COM规范。另一方面,每一个组件都可以随时被升级、被替换,因为接口通常保持不变,变化的只是接口函数的具体实现。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值