组件
1、何谓组件技术?
组件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的细节进行了封装,同时对各种业务逻辑规则进行了实现,用于处理用户的内部操作细节,甚至于将安全机制和事物机制体现的淋漓尽止。而这个封装体就常常的被我们称作组件。
2、组件有什么作用?
这个问题似乎有些笼统,试着想一想windwos何以实现如此强大的生产力?而在它的背后到底有什么在服务着?
一句话:组件就是windows的灵魂,脱离了组件,windows系统将不再如今天一样如日冲天,windows如此,Unix也同样是如此,作为一个操作系统,它所完成的功能无不体现着组件的服务,一个很轻松的Copy– Paster都要靠DDE来支持,而DDE就是一种组件服务对象,而具体到某一个细节,
组件有其自身的规则实现,而规则的实现又体现了接口的实现,但是组件对象本身也是一个组件,它也有业务逻辑规则需要处理,它也要起到所集合的组件的协调。如此一来,可以能过某一个组件对象来协调的实现一些、一部分的业务逻辑规则!而对于应用者来说,这一切完全没有必要去得知,甚至是没有意义的。
3、为什么要应用组件技术?使用组件技术的的目的是实现各种规则的实现,而且组件对象还将从更广阔的方面来考虑,它能将一个大型的分布式系统进行统一的规划、合理的处理冗余、安全、平衡负载……等单纯的编程手段不能实现的功能,这就是我们要应用组件的一个很重要的原因。再者,组件对象不是普通的可执行文件,更不是将各种规则定死在其内部,它可以很平滑的实现自身的升级、扩展。
组件(component)技术是各种软件重用方法中最重要的一种方法,也是分布式计算和Web服务的基础。网络应用中的软件组件,又被称为中间件(middleware)。
组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和服务器端的EJB(Sun/Java)。
在网络及其应用都很发达的今天,对组件服务的需求十分强烈,因此组件技术近年来得到了飞速的发展和广泛的应用。
概述
面向过程的编程重用函数、面向对象的编程重用类、范型编程重用的是算法的源代码,而组件编程则重用特定功能完整的程序模块。
每个组件会提供一些标准且简单的应用接口,允许使用者设置和调整参数和属性。用户可以将不同来源的多个组件有机地结合在一起,快速构成一个符合实际需要(而且价格相对低廉)的复杂(大型)应用程序。
组件区别于一般软件的主要特点,是其重用性(公用/通用)、可定制性(设置参数和属性)、自包容性(模块相对独立,功能相对完整)和互操作性(多个组件可协同工作)。可以简单方便地利用可视化工具来实现组件的集成,也是组件技术一个重要优点。
组件在某些方面类似于“可执行程序”,在另一些方面又类似于“库”。
组件标准
组件应用的基础是标准,没有统一的接口描述、没有规范的组件通信、没有标准的对象请求和远程调用,就没有组件应用的可能。目前的主要标准有CORBA(国际通用)、EJB(Sun的Java)、COM和CLR(Microsoft的Windows和.NET)。
这里主要说一下COM和CLR3.COM / .CLR
COM(Component Object Model组件对象模型)是微软公司于1993年提出的一种组件技术,是软件对象组件之间相互通信的一种方式和规范,它是一种平台无关、语言中立、位置透明、支持网络的中间件技术。
COM是OLE(ObjectLinking and Embedding对象链接和嵌入)的发展(而OLE又是DLL [Dynamic LinkLibraries动态链接库]的发展),DCOM(Distributed COM分布式COM,1996年)和COM+(DCOM+管理,1999年)则是COM的发展。ActiveX控件是COM的具体应用(如VBX和DirectX都是基于ActiveX的)。ATL(Active Template Library活动模板库)是开发COM的主要工具,也可以用MFC来直接开发COM,但是非常复杂。
作为组件技术的进一步发展,微软公司又于2002年推出了.NET框架,其中的核心技术就是用来代替COM组件功能的CLR(Common Language Runtime公共语言运行库),可采用各种编程语言,利用托管代码来访问(例如C#、VB、MC++),使用的是.NET的框架类库FCL(FrameworkClass Library)
微软公司的各种组件技术之间的关系与发展可以参见下图:
下面分别对这几种组件技术加以简单的介绍:
1)DLL
DLL(Dynamic Link Libraries动态链接库)还不能算组件技术,但它是软件重用的鼻祖。
DLL采用动态链接,对公用的库函数,系统只有一个拷贝(位于系统目录的*.DLL文件),而且只有在应用程序真正调用时,才加载到内存。在内存中的库函数,也只有一个拷贝,可供所有运行的程序调用。当再也没有程序需要调用它时,系统会自动将其卸载,并释放其所占用的内存空间。
由于应用程序是通过系统来调用动态链接库的,因此每个DLL都有一个类似于main的入口函数。在DLL中,供外部应用程序调用的库函数叫做导出函数,而只是被DLL内部调用的库函数则叫做内部函数。导出函数在客户端叫做导入函数。
2)OLE
OLE(Object Linking and Embedding对象链接和嵌入)是微软公司于1991年推出的一种简单的组件技术,它允许Windows中的程序相互之间进行合作——一个(客户)程序调用另一个(服务器)程序,以完成特定的功能。而且客户/主程序的界面不变,就似将服务器程序嵌入到客户程序中一样。
3)COM
OLE 1.0实际上只是一种复合文档,而OLE 2.0已经具有标准组件的特性了,显然它是受了CORBA的影响。所以从OLE 1.0到OLE 2.0,是微软公司在组件技术上的一次飞跃。这时,OLE的名称就有一些名不副实了,因此,在增加了一些功能和规范之后,微软公司于1993年在OLE 2.0的基础上又推出了COM,用来替代原有的OLE。这样一来,OLE就不再是一种独立的组件技术,而只是COM技术在链接和嵌入方面的一个具体应用。而1996年3月推出的ActiveX控件,也只是COM的一个具体应用,它是用来替代原有的VBX控件的。
COM(Component Object Model组件对象模型)的核心是一组组件对象间交互的规范,它定义了组件对象如何与其使用者通过二进制接口标准进行交互,COM的接口是组件的球类型纽带。
除了规范之外,COM还是一个称为COM库的实现,它包括若干API函数,用于COM程序的创建。
4)DCOM
DCOM(Distributed COM,分布式COM)是COM的网络化。COM具有进程透明性,组件对象和客户代码不必考虑调用传递的细节,只须按照普通函数方式进行调用即可。而DCOM将COM的进程透明性扩展为位置透明性,形成分布式的组件对象模型。
5)COM+
COM+是COM-based services and technologies(基于COM的服务与技术)的简称,+表示将COM组件技术和MTS(Microsoft Transaction Server微软事务服务器)应用程序主机技术结合在一起。它是一个面向应用的高级COM运行环境,它在COM基础上实现了许多面向企业应用的分布式应用程序所需要的服务。COM+是1999年随Windows 2000推出的。
6).NET / CLR
.NET的核心是CLR,它可以视为是COM技术的继承和发展,它解决了COM组件模型中存在的主要问题。
COM向CLR过渡
鉴于COM技术已经被使用多年,有许多现存的资源,程序员和用户也不可能一下子就全部完全转换到.NET环境。因此,微软公司也允许在CLR环境中继续使用COM/DCOM/ COM+和DNA,这可以通过.NET框架的System.EnterpriseServices命名空间来进行。
但是鉴于与COM相比,CLR组件所具有的无比优越性。COM技术必然会走向灭亡,而.NET的CLR终将取而代之。
整理自:组件技术介绍
.net互操作
相对于COM技术,.NET技术就是为基于组件的程序设计而生的,所以其编码效率和语言可读性要高出COM一个等级。但是由于1993年以后的十多年时间里,人们利用基于COM的组件程序设计技术开发了大量的高复杂度,高可用性的代码,并且他们运行良好,效率极高,如果用.NET技术重写这些代码简直就是得不偿失,加之在.NET的实现过程中并不是所有的Windows API都被重写,有些功能是.NET所不能完成的。面对这样的问题, .NET互操作技术应运而生,可见需求才是技术的原动力。