您的位置:首页 > 其它

COM技术内幕-读书笔记-系列之一

2008-12-17 09:30 295 查看
第1章 组件

===================================================================================
未经许可,也可转载,但请注明出处!希望能够与各位初学COM的网友共勉:-)
[b]======================================================================= [/b]


本节要点:本章重点讨论了组件的优点以及软件工业技术对组件的需求。为了解决软件的频繁升级问题,最有效的方法就是将应用程序分成一些小的组件,然后这些组件在运行时组装起来形成所需要的应用程序,并且保证每一个组件在不影响其它组件的情况下被升级。为此,COM提供了编写组件的一个标准方法。遵循COM标准的组件可以被组合起来以形成应用程序。至于这些组件是谁编写的、如何实现的,都是无关紧要的。每一个COM组件均可同其它组件一起使用。实现这种可动态改变组件的关键问题是信息的封装。对于封装,COM是通过组件和客户之间的接口来实现的。

1、什么是COM?
COM: Componet Object Model(组件对象模型),是开发软件组件的方法之一。它也是一个如何建立可动态互变组件的规范,它提供了为保证能够互操作,客户和组件都必须遵循的一些标准。(P6 $1.3,也说明了组件并不就是COM)

2、什么是组件?
组件实际上是一些小的二进制可执行的程序,它可以给应用程序、操作系统以及其它组件提供一些服务。组件可以在运行时、在不重新链接或编译应用程序的情况下被卸载或替换掉。多个COM对象可以连接起来以形成应用程序或组件系统。

3、由组件构成的应用程序有何好处?


将单个应用程序分割为多个组件组成的程序(如上图所示),其带来的好处就是,随着技术的发展可以用新的组件取代原有的组件,从而逐渐使软件日臻完善。这样无需对整个程序进行更改编译,从而更有利于软件的维护和升级(如下图所示)。另外还可以动态的从程序中插入和卸载。再次组件的使用可以做到与语言的无关性。




4、什么是分布式组件?它们如何工作?
分布组件就是分布在网络上的远地组件(暂且本人这样认为)。由分布在网络上的多个组件构成分布式应用程序。
下图是一个使用了远程组件的分布式应用程序工作示意图。



其本地上的两个组件C和组件D被放在网络上的远程机上,取而代之的是两个新的组件:远程C和远程D(实际上就是代理/存根DLL),这两个组件的作用是将其他组件发来的请求通过网络发给组件C和组件D。本地机器上的应用程序并不需要知道实际所应用的组件到底在何处。类似地,远地组件也不需要知道他们是否位于远地。这样,通过加入合适的远地组件,应用程序完全不需要知道实际的组件到底在哪里,具体情况可参考本书P219 $10.4远程访问能力。

5、对组件有何要求?
为了实现组件可以方便的从程序中动态插入和卸载,所有组件必须满足下面两个条件:
1、组件必须能够动态链接。
2、必须能够封装其内部实现细节,对客户做到完全透明。

6、如何将客户和组件的实现很好的隔离开来?
1、组件必须将其实现所用的编程语言封装起来。任一客户都应能使用任一组件,不论它们是用什么编程语言实现的。将实现用的编程语言暴露出来只会在组件及客户间引入新的依赖。
2、组件必须以二进制的形式发布。如果想将实现组件的编程语言隐藏起来,那么在发布时,它们必须是已被编译、链接好并且马上就可以投入使用的。
3、组件必须可以在不妨碍已有用户的情况下被升级。一个组件的新版本必须既能够同老版本的客户一起使用,也可以同心版本的客户一起使用。
4、组件在网络上的位置必须可以被透明的重新分配。组件及使用它的程序应能够在同一进程中、不同的进程中或不同的机器上运行。否则,当将某个本地组件移动到网络上的另外某个地方时,客户程序必须被重新编译。

7、什么是COM规范?
COM规范就是一套为组件架构设置的标准文档。遵循COM规范编写的组件将能满足对组件架构的所有要求。本书所开发的所有组件都遵守此标准。

8、COM是…?
1、COM组件是以Win32动态链接库(DLL)或者可执行文件(EXE)的形式发布的可执行二进制代码所组成的。
2、COM组件是动态链接的。
3、COM组件是完全与语言无关的。
4、COM组件是可以在网络上透明的被重新分配位置的。
5、COM组件是在兼容老客户的情况下悄然升级的。
6、COM组件是一种给其它应用程序提供面向对象的API或服务的极好方法。
7、COM是组织软件的一种方法。

9、COM不是…?
1、COM不是一种计算机语言。
2、COM不是DLL。
3、COM不是函数集。
4、COM不是类库。

10、使用COM有那些好处?
1、提供了一个所有组件都应遵循的标准。
2、允许使用组件的多个不同的版本,而这一点对于用户而言几乎是透明的。
3、使得可以按相同的方式来处理类似的组件。
4、定义了一个与语言无关的架构。
5、支持对远程组件的透明连接。

** 什么是客户?
对如一个应用程序或者组件,如果它使用了其它组件,相对于被使用的组件而言,我们将它称之为客户。(P5)

BENKONG2008-12-15
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: