1.1组件
1.1.1组件的概念
组件是完成特定功能的计算机程序模块,如QBASIC语言的库函数sin(x)、cos(x)等等。它们的功能分别是计算角度的正弦、余弦函数值,完成计算的程序指令模块保存在QBASIC语言的函数库文件中,可称为2个组件。这两个组件的程序指令模块是由QBASIC语言编程环境提供的,设计程序时可以直接使用。将用户开发的程序编译连接成执行程序时,QBASIC语言开发工具将组件的程序指令模块复制到了用户的执行程序中,这样形成的用户程序指令完整无缺。连接成的执行程序复制到其它机器上就可以执行,不需要安装任何支持库,无须经过安装步骤。存放组件指令模块的文件称为
静态连接库,文件用扩展名用“.lib”标识。用户不但可以使用开发工具提供的库函数,也可以设计具有特定功能的组件,形成自己的静态连接库,象使用开发工具提供的库函数一样,在设计程序时使用。
静态连接库文件以“.lib”为文件扩展名。与此对应,
动态连接库文件以”.dll”为文件扩展名。两者的函数功能相同,只是在连接方式上有区别。在将用户编写的程序连接形成执行程序时,开发工具没有复制动态连接库中组件的指令模块,只是在生成的执行程序中添加了调用相应组件模块的指令。因此,使用动态连接库的执行程序在安装时,必须安装动态连接库,
组件概念的实现是计算机软件发展过程中的大事件,为计算机软件研制实现社会化分工提供了必要的条件。计算机软件研制变成了设计框架、采购组件、装配组件的过程。
从程序设计的观点看,一个完整的应用程序由框架和组件两部分组成,从功能上看,前者相当于主程序,后者相当于子程序。框架调用组件实现程序功能,框架是调用者,组件是被调用者。组件的类型不同,调用方式也就不同,
组件的类型规定了调用方式,每种类型的组件有自身规定的调用方式。
1.1.2组件的类型
1函数型与对象型
计算机软件设计思想从结构化程序设计发展到面象对象的程序设计,由此产生了两种组件类型:函数型与对象型,函数型组件每个软件模块是一个函数或子程序,对象型组件每个模块是一个对象,在C++等高级语言中称为类。
上文所列举的组件可称为函数型组件,每个组件是一个函数或者子程序,是组件的一种类型,在早期的程序设计语言中,每种语言都有自己的库函数,这类组件得到了广泛的应用,现在仍在应用,也许是应用最广的组件类型。Windows操作系统的应用程序编程接口常称为API,是一个庞大的函数型组件库。函数型组件是结构化程序设计思想的产物,代表着计算机软件发展的一个时代。
根据面象对象的程序设计思想研制的组件称为对象型组件,这是一种新型组件,代表软件技术的发展方向,每个组件是一个对象模块,在VB中称为
对象,在C++,C# 等强类型语言中称为类模块。目前来自市场的组件多为这种类型。
面相对象程序设计思想是面向过程程序设计思想的发展,新思想包含了旧思想的内容,因此面相对象的组件包含面相对象的组件,在面相对象的组件库中可以含有面相过程的组件。
2网络型与桌面型
只能在一种计算机上特定的的操作系统下使用的组件是桌面型组件,这类组件由特定类型的计算机指令组成,组件的接口调用码与特定的操作系统相适应。
能在不同类型计算机及不同操作系统下使用的组件是网络型组件,这类组件由标准中间代码组成,不是机器指令,不能直接执行,可由宿主机操作系统解释执行,也可由宿主机操作系统编译成本机机器指令后执行。
1.1.3组件的接口
1接口定义
组件接口指组件模块调用规范,依次由3部分组成:
(1) 模块入口点指令的地址;
(2) 模块输入参数的数量、顺序及其类型
(3) 模块返回值的类型。
组件接口规定了组件调用语句的的格式,反过来,从组件的调用语句可以了解组件的接口,如BASIC语言的如下语句:
strA = Left(“a test”,2)
函数名称”Left” 指定了模块入口点指令的地址,接口有两个输入参数,第一参数类型是字符串,第二参数的类型是整形。模块返回值的类型是字符串。上述说明采用的是BASIC语言的术语,注意在其它语言中术语有差异。
2接口标准
组件作为软件的预制件,应能在多中程序设计语言中使用,只有采用共同的接口标准才能满足这一要求。早期的函数型组件,由于接口的差异,语言间的互用性差。即使是在同一种程序设计语言以内,用不同厂家研制的语言工具开发的组件也难以互用,这种情况限制了组件的应用范围。面向对象的程序设计思想提出来之后,
Microsoft公司公布了自己的组件接口标准,称为组件对象模型(Component Object Model),简称COM,在这个标准中定义了单机版应用程序组件的接口标准。在此基础上扩充了分布式应用程序的接口,称为分布式组件对象模型(distributed COM),简称DCOM。DCOM定义了分布在不同计算机上协同运行的组件与框架之间、组件与组件之间的调用接口规范,是分布式组件应用程序设计的标准内容。网络技术普及之后,组件还需在网络环境中使用,以COM规范为基础,又扩充了在网络环境下的接口标准,称为ActiveX ,按ActiveX标准设计的组件称为ActiveX控件。
按
COM、DCOM标准研制的组件分别称为COM组件、 DCOM组件.
组件是应用范围很广的软部件,一些软件公司专门生产各种用途的组件,如数据库访问、数据显示、图形显示、图像处理、三维动画等等,这些组件多数是COM组件或ActiveX控件。
COM、
DCOM、AcitiveX都是Microsoft公司定义的标准,这些标准得到了广泛的应用,在中国更是如此。除了Microsoft公司定义的接口标准以外,其它标准在我国应用很少。
1.1.4组件设计工具
各种应用程序设计工具的最新版本几乎都支持组件设计技术,如:Microsoft Visual C++ 6.0 ; Microsoft Visual Basic 6.0; Borland C++ Builder 6.0 ; Sybase Power Build 6.0;Author Ware 6.0等等。特别是各种程序设计语言工具,不但支持组件的应用设计,将其它工具提供的组件装配到自己生成的应用程序中,而且支持组件的研制设计,将本身的程序模块编译连接形成组件
,供其它工具使用。
组件接口标准提出的时间不长,开发工具的老版本一般不能与其它工具互用组件。
1.1.5组件库
实际应用中,常常将功能上有联系的组件汇集在一起,打包到一个文件中,形成组件库。在Windows操作系统下,用组件库执行码文件的扩展名标识组件程序的运行特性,根据文件扩展名可以判断组件的运行特点:
(1).ocx文件 ActiveX控件文件,组件在框架程序的进程地址空间中运行,可用于桌面程序,也可用于网络程序设计。
(2).exe文件 执行程序文件,组件库是一个可独立运行的应用程序,运行时提供驻留在内存中的
程序段供其它程序调用。组件程序与调用者程序分别在自己的进程地址空间中运行。有些执行程序不提供组件,早期发行的执行程序不提供组件。
(3) .dll文件 动态连接库文件,组件在调用者进程地址空间中运行
上述三种文件中的组件的指令都没有复制到调用程序中,必须安装组件,调用程序才能正常运行。
设计程序时调用组件库中组件,称为引用,由于组件指令没有复制到调用程序中,引用时必须指定组件库文件的名称及其所在的文件目录名称,这种引用称为原名引用。在Windows操作系统下,有些组件在按装时,在操作系统的注册表中登记了组件库文件的名称及其文件所在的目录名称,还登记了一个引用名,引用名常常不同于组件库文件名,故称为别名,调用库中组件可使用别名,称为别名引用。
这三类组件库可随时修改,若组件原接口维持不变,可替换原版本,不必修改调用程序,两者就可协同运行。
(4) .lib文件
静态连接库文件,组件指令复制到了调用程序中,成了调用者本身的组成部分。
除执行码文件外,组件库还有一些辅助文件,如描述组件接口调用格式的 .tlb文件,用于在操作系统下登记的.reg文件,帮助文件.hlp及.chm等等。
上述4类组库可以是函数型,也可以是对象型,能够用于网络的只有.ocx组件库,其余3类组件只能用于桌面程序。