- 一、什么是构件?
软件构件是一个高内聚的、通过一组约定的接口完成明晰的功能、符合业界认可的模型标准(如COM/.Net,Corba,WebService等)的、可复用软件包,可在一个体系结构周境下被直接或经适当调整后组装到软件系统中而成为其组成部分。一个构件也可包含若干个子构件。一个构件也可以是Web服务方式的构件。
构件(component)是可复用的软件组成成份,可被用来构造其他软件。它可以是被封装的对象类、类树、一些功能模块、软件框架 (framwork)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(Pattern)等。构件分为构件类和构件实例,通过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件,这不仅大大提高了软件开发者的开发效率,也大大提高了软件的质量。
- 二、软件构件背景知识
软件行业发展的数十年中,程序编写的模式和风格都已发生了很大的变化。最早的程序员是通过直接编写仅仅由0和1组成的机器代码来"告知"机器运行程序的。慢慢的,较高级的用以适应各种不同需求的语言如COBOL、FORTURN不断产生,直至今日,我们见到的编程语言已有数百种之多。其间最大的变化来自 20世纪80年代末90年代初,我们所谓"真正"的高级语言的诞生和"库"及"模块化程序"的变成方法成就了这一巨大变化。这个时期我们称之为 Microsoft公司的"QuickBasic"和Borland公司的"Turbo Pascal"的时代。同时,一些适应市场需求应运而生的出售基于代码级的功能库的第三方软件提供商业在迅速成长。
1991 年,Microsof公司的"Visual Basic"(VB)的诞生对编程世界产生了翻天覆地的强烈冲击。由于VB是架构在Windows平台上的,所以编程者可以调用系统的动态连接库 (DLLs),这种动态连接库就是早期的构件雏型。同时编程者还可以使用我们称之为"VB Extention"(VBX)的预先做好的功能模块集。也正是因为有了VB,程序员才第一次真正的将自己的应用程序已最直接的方式和编程的操作环境无缝连接。
应用开发的模式也随之发生了变化。新的程序设计和编写的方式使得开发人员可以通过少量的代码编写实现对已有的功能块的重用和组合来来实现应用的需要。大家小时候一定玩过搭积木的游戏,用各种积木块可以搭出一座我们满意的城堡来。现在,编写程序也变得这么简单了。我们程序员们一行行的编写代码的时代已经延续30年,现在,变革的时候到了,我们现在只需要"组装"已有的功能模块就可以完成应用的开发工作了。这"已有的功能模块"就是我们通常所说的"构件"。
- 三、构件相关概念
- 软件构件的种类
- 黑盒和白盒构件
原代码构件是白盒构件,可读,程序员在使用时可以直接修改。而黑盒构件则是已编译或二进制格式,独立且不能直接修改。所有的程序员通过描述构件功能的文件和出版的接口了解这些构件。接口包括可视的属性或者新添的值。然后,方法允许构件作事先定义的动作。最后,事件,在构件通知程序员事件发生时引发。使用黑盒构件优于使用白盒构件。黑盒构件不能被程序员直接修改。扩充功能通过创建一个新的"包裹"构件包装和扩展已存在构件来完成。这使得构件原有功能完整无缺,以至于升级、错误修改等事务可以由原始开发者完成。如果你要是想改变白盒构件的原代码,你会得到一个新代码流,那么旧的错误在新的构件实例中就不容易修改,并不断传播。
- 商业构件(COTS)
在90年代早期,一种新的构件产生了。它们是市场上可以购买的构件,也可以称之为开放市场构件。开放市场构件是可以从货架上买走的可重用构件,例如 COM,Java,你可以购买它但不用购买支持、集成或其它类型的服务,的确是"即插即用"的构件。例如,MicroHelp公司的VBTools,基于 Microsoft Visual Basic构件模型(或VBXs),该模型后来成长为基于COM的构件(OCXs),而现在成了基于.NET的构件。现在的开放市场构件以很多了,可以让程序员工作变得简单一些,并让他们专心于完成核心任务。这里的核心任务指将完成公司定义的商业进程或功能,而不是编写所有的普通构件或程序,比如显示、制表、计算、算法,还有其它可以在市场上购买到的构件。重用因为可以重用开放市场构件而得到实现,那就是别人已经编写、测试、文档化了的代码。
- Web服务构件
在局域网成为因特网的分布式环境下,网络服务被提出作为未来的简单扩充。应用构件不再只是呆在一个局域网的一个服务器上,而是放到整个因特网上。网络服务有效地等同于一个被提供的问题解决方法。不仅是提供一个完整的应用,人们还能提供个人构件。 2000年6月以后,主要的平台买主已宣布提供的网络服务有,Microsoft的 .NET、Sun公司的Sun ONE、HP的eServices、Oracle公司的eSpeak,还有IBM的 Websphere program。技术的完全交付还要有一年的时间。
- 黑盒和白盒构件
- 软件构件的特征
软件构件具有可复用性(Reusability)、自包含性、一致性、耦合性、内聚性和适应性这几大特征。其中可复用性包括有用性(Usefulness)和可用性(Usability)。有用性是指构件完成的功能是有用的,也就是其功能可出现在很多应用软件中。易用性是指构件要有很好的包装,能很方便地使用它。
- 构件的大小
粒度已经成为许多程序员在使用构件时经常谈论的话题。粒度一词是指一个构件,或一组构件能够提供多少的功能。举一个简单的例子,Fine Grained Component提供将三个数相加的功能,这个构件小、紧密、低商业费用,没有很强的定制性,并且功能独立。而Large Grained Component将提供更多的功能。它可以是一个文件存取库、数据库构件或者是基于"近完全"功能的构架,像CRM,ERP,eCommerce或其它 系统。比如,eCommerce构件可以提供完整eCommerce系统百分之80到90的功能,包括登记,购物车,目录服务,开发票,电子邮件等。它可 以作为一个简单的构件使用,但实际上,它是一个集成构件的构架,可提供大粒度的功能。那么,好的和大的,哪个更好呢?它们各有优缺点。大型构件可以提供大量的应用功能,但它不会像把许多不同的优型构件组合起来那么可定制。这种情况非常正 常,因为优型构件为独立模块,你要编写粘合代码来使得构件可以一起工作满足你的要求。这意味着,编写代码当然会费时。在一个内部编写粘合代码的大型构件 中,你不能定制它,只能放置构架开发者允许你用来定制构架如何工作的性质/属性。
- 软件构件的种类
- 四、构件库及相关介绍
- 构件库简介
简单来说,构件库是一个对软件构件统一进行形式化包装、分类描述、存储管理、检索浏览的场所。 软件构件库是大范围内、系统化实施软件复用的必备基础设施。要复用软件构件有两个前提条件,一是所需的构件已经存在,二是复用者能方便地找到所需的构件。 由于软件构件蕴涵了大量的信息,对其准确、简洁的描述及其困难,如果没有一个统一的场所对其进行统一的描述包装,大多数企业在应用开发时将难以找到所需构 件,不得不“从零开始”,而构件的一次性开发成本比一般软件高(一般为2到3倍),因此大多数“从零开始”的开发结果又没形成构件,如此循环,将难以形成 系统化的软件复用。
- 构件库的作用与意义
使用软件构件是缩短软件的交付时间和提高软件质量的一条途径,随着复用实践的深入,组织内部将会积累大量自主开发的构件、购买的商业COTS (Commercially-Off-The-Shelf)构件和其他组织开发的NDI(Non-Developmental Item)构件。这些克服用构件构成了庞大的企业资产,而构件库作为分类和管理构件资产的基础设施就变得十分重要。实践中构件数量不断增长,构件也随技术 和领域演化而更新,要在库中众多的构件中寻找必须借助于自动检索工具的支持,另一方面,对单个构件的复用可以划分为构件的识别和检索、构件理解和适应性修 改三部分,因此对于构件的有效管理可以大大的降低复用成本。
- 构件库简介
- 五、软件复用概述
- 软件复用的概念
软件复用(或软件重用)是指充分利用过去软件开发中积累的成果、知识和经验,去开发新的软件系统,使人们在新系统的开发中着重于解决出现的新问题、满足新需求,从而避免或减少软件开发中的重复劳动。
- 软件复用的意义
软件复用使人们在软件开发中不必“重新发明轮子”或“一切从零开始”,提高了软件生产率和质量,缩短开发周期,降低开发成本。软件的重用中没有材料的消 耗,而且软件通过多次重用后其质量和可靠性越来越高。据统计,软件系统的开发中若复用程度达到50%,则其生产率提高40%,开发成本降低约40%,软件出错率降低近50%。 软件工程专家Bohem认为,近十年来软件复用已成为解决软件危机、提高软件生产率和质量的最有效、最具潜力的手段。
- 软件复用的粒度
根据软件复用的粒度可将其分为(按粒度从小到大)如下五类:代码和设计拷贝、源代码复用、设计和软件体系结构(software architecture)复用、应用程序生成器(application generator)和领域特定的软件体系结构(Domain-Specific Software Architecture,DSSA)的复用。
- 软件复用的形式
可以从不同的角度,对软件复用的形式分类。根据复用活动所跨越的领域可分为垂直式(纵向)复用和水平式(横向)复用;根据实现复用的途径可分为组装式(compositional)复用和生成式(generative)复用;根据复用的方式可分为黑盒服用和白盒复用等。
- 软件复用的概念