Component Object Model 组件对象模型

Component Object Model  组件对象模型

DLL和COM 的基本概念- -                                     

我在学习过程中对DLL和COM 的概念很模糊,我上网整理了一下相关的资料,贴出来,供大家学习参考。

一般来说,DLL是一种磁盘文件,以.DLL、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都可以是DLL。它由全局数据、服 务函数和资源组成,在运行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。如果与其它DLL之间没有冲突,该文件通常映射到进程虚拟空间的同一地 址上。DLL模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个 DLL在内存中只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编程语言及编译器无关。

至于作用,先说说没有dll的后果:比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。 可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会 产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写 大的EXE程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。

  有了dll的好处:在Windows系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将独立的程序模块创建为较小的DLL (Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种 方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序使用。Windows自己就将一些主要的系统功能以 DLL模块的形式实现。

什么是COM和COM+?

Components Object Model (COM) 是软件组件互相通讯的一种方式。它是一种二进制和网络标准,允许任意两个组件互相通讯,而不管它们是在什么计算机上运行(只要计算机是相连的),不管各计 算机运行的是什么*作系统(只要该*作系统支持 COM),也不管该组件是用什么语言编写的。COM 还提供了位置透明性:当您编写组件时,其他组件是进程内 DLL、本地 EXE 还是位于其他计算机上的组件,对您而言都无所谓。(当然会有性能区别,但是,即使改变了其他组件的位置,您也不必重新编写什么,这是关键所在。)

COM 是基于对象的??但是这种对象概念与您熟悉的 C++ 或 Visual Basic 中的对象不太一样。(顺便说一下,“对象”和“组件”几乎是同一个东西。GUI 医生在谈论应用程序的结构时愿意说成“组件”,而在谈论实现时愿意说成是“对象”)

首先,COM 对象被很好地封装起来。您无法访问对象的内部实现细节;您无法知道对象使用了什么数据结构。实际上,对象的封装是如此的严密,以致于 COM 对象通常被描绘为盒子。图 1 描绘了一个完全封装的对象。请注意,实现细节是如何向您隐藏的。

Windows 2000中的Component Services是企业级应用中的非常重要的一部分,它为那些基于web的、分布式的应用程序提供了几乎所有需要的功能。尽管COM+服务起初只是被设计 用来为COM组件提供服务的,但是如果.NET组件也能够使用COM+服务的话,那将会是一件很好的事。因为COM+能够为组件提供很多服务如对象缓冲, 资源共享,给予角色的安全机制和分布式事务处理等。

    概括地说,COM具有如下一些优越性:

编程技术难度和工作量降低,开发周期变短,开发成本降低。一般编程人员只须根据应用功能要求选用合适的组件,而不必事无巨细都自己动手去完成。组件模块将编程的技术难度和工作量在人员个体和时间上进行了分摊。

可以实现分层次的编程,从而促进了软件的专业化生产。专业人员可以开发出具有很强专业性的软件组件,这样既保证了普通的编程应用人员能够完成所需要的应用开发,又不至于降低使用的性能。应用人员不便实现的组件模块可以让专业人员定做。

    促进组件市场的丰富,最大限度地满足了各种应用需求,定制特定的软件模块变得相当容易。

    软件的复用率提高,使软件的使用效率得到提高并延长了使用寿命。组件编程体系使大量的编程问题局部化了,使软件的更新和维护变得快速和容易,软件的成本大大降低。

 

你可能感兴趣的:(Component Object Model 组件对象模型)