构件技术“应用”先行
仲萃豪
(本文转载自软件工程专家网www.21cmm.com)[url=http://www.21cmm.com/prelogin.asp?page=/bbs/index.asp?Type=F][/url]
以面向对象为基础而发展起来的软件构件技术,摆脱了面向对象的理论束缚,目前理论上还未完善,但实际应用却有较大进展。本文基于软件构件技术,从认知体系出发,提出了应用软件开发模型和方法。文中还讨论了构件的定义、分类、支持语言和环境、技术特征以及实际应用效果。
原则
软件开发是一门综合性学科,它包括哲学、基础科学、技术科学、工程管理四个知识层次。哲学决定着整个学科建立的指导思想、认识论和世界观。认识论就是人们认识客观世界的规律和方法,我们称它为认知体系。
应用软件开发时,有自己必须遵循的哲理和认知观,对基础理论、研究方向以及采用的技术措施起着指导作用,符合学科就能发展,否则就会遇到各种问题,甚至导致失败。从软件发展的几个里程碑中可看出,认知观起到了决定性的作用。
软件开发的初期阶段,我们称为程序设计时代,软件开发处于小作坊个体生产方式水平。到了60年代中期,出现了一些大型复杂的软件系统,人们认识到以个人的能力难以完成一个大系统的任务。W.E.Dijkstra 首先提出了一种解决方案,采用结构程序设计方法,就是把软件开发看作数学求解,沿用数学上的枚举、抽象、归纳、类比等思维方式,把问题简化。用工程的概念、方法、原理和技术来开发和维护软件,产生了结构化分析和设计的方法。这种开发方法长期左右着我国的软件开发,无疑起到了重要作用,然而它仍然存在着认知上的缺陷,如开发周期长、成本高、质量差,特别是所开发的软件不能适应系统的不断演化。
到70年代,人们认识到,仅从软件结构上脉络清晰是远远不够的,这只是"表",不是"里",软件在结构上还应该适应客观世界的自然结构。M.A.Jackson认为应用软件应该忠于现实、高于现实,提出JSD系统开发方法,其指导思想是"仿真客观世界",采用自底后上的设计步骤。JSD方法第一次揭示了客观世界与软件系统之间的关系,因而所开发的软件悟性好、实用性强。然而JSD方法也存在着固有的缺陷:如何仿真要确定系统的实体和活动,它没有给出准则可循;没有区分客观世界的模型和软件系统模型,不能直接映射过去,其结果是系统结构混乱、效率低,软件成份复用性差。
到了80年代,面向对象重新崛起,面向对象的认识论是将系统看成由多个对象组成,通过对象之间的通信形成了系统,为客观世界过渡到软件系统提供了途径和编程的思维方法。其主要特征是:(1) 类和封装性,实现数据抽象和信息隐蔽,给出了对象类型和参数化,通过生成实例后组装成系统,提供了实现复用的手段。(2) 继承性,提高了代码复用性。(3) 多态性。
面向对象给出了软件系统的体系结构,引入了软件复用的思维方法。近年来引起了越来越多的人关注,提出了多种对象模型、语言,设计了各种基类型库,使得面向对象程序设计逐步成为热点。
问题
面向对象技术虽然被大家接受,公认为当前的发展主流,然而在实际应用时,还存在着一系列问题。
(1) 模型和概念尚未统一,不同的人对系统和对象的理解不一致,导致了各种对象语言均有很大差异,且语言自身与纯面向对象理论有许多不一致的地方,就难以形成统一的标准和开发规范。
(2) 要求使用面向对象技术的人员素质较高,要掌握的东西很多,如要熟练掌握C++必需了解大量的MFC类库,且要了解每个类的细节。
(3) 面向对象复用仅仅是处于初级阶段,未提出任何模式和规范以及相应的管理机制。
(4) 工程上难以实施。目前面向对象能很好应用的领域有限(如VB的界面设计、多媒体软件设计),真正用纯面向对象技术来开发大型软件的并不多,其原因有:如何提炼对象类,采用OOA是不可行的;实际应用领域中的可复用领域专用构件缺乏;由于对象无统一标准,因此还停留在程序员自己复用,很难共享,更谈不上分布式情况下复用;纯面向对象要摒弃原有的许多技术等。产生上述问题的根本原因是由于认知体系上的不完整。由此基于面向对象的构件软件应运而生。
概念
构件(component)是可复用的软件组成成份,可被用来构造其他软件。它可以是被封装的对象类、类树、一些功能模块、软件框架(framwork)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(Pattern)等。构件分为构件类和构件实例,通过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件。
经过几年的发展,构件本身的模型及其规范已经提出,较有影响是OLE的COM及CORBA的SOM。目前已发展到分件式构件规范,主要有CORBA、OLE/ActiveX和JaveBeans,其发展日趋明朗,最终将会趋向统一。
分类
为了更好地了解构件的性质,我们把它按多个侧面进行分类:(1) 按开发过程构件分为分析件、设计件、程序件和数据件。(2) 按功能分,分为三层:基础层为基本数据类构件和系统支撑构件;中间层为各种通用的中间件,顶层为针对领域的专用构件或子系统构件,从粒度上看,通常底层的粒度为较小,而顶层的粒度为较大。(3) 按使用方式分为动态和静态两种。(4) 按构件的结构分为原子构件及由多个构聚集的组合构件。
语言
构件是为了复用,就必需遵循一定的规范,通过语言的功能来实现规范是一种极好手段。按照应用软件开发过程,可以提供下述语言。
(1) 构件描述语言,用来描述构件的规格说明,即描述设计件;也可用来检索已有的可复用构件,是设计构件检索语言的依据。
(2) 构件编程语言。可以采用现在流行的各种编译程序,如VC、VB、Java等。
(3) 过程控制语言和系统集成。通过过程控制来制作专用构件、子系统构件和应用软件,要提供连接和嵌入的功能,还要包括面界开发功能、构件库的管理和实例生成,要提供数据库设计和数据库连接的功能,还提供大量的基本构件、中间构件及APL。如PB、Delphi等。由于PB易于掌握,除提供上述功能外,又能用于编程和构件管理,它通过不断版本更新,能紧跟新技术的发展,因此普遍受到软件开发者的青睐。
模型
研究构件软件的两个核心是:如何提取可复用构件以及如何组装成系统并能实现互操作。目前讨论的软件体系结构、构件模型,均是为解决构件之间的接口、实现互操作。近年国际已提供了各种构件库,如MFC、PBL、VBL等等。但是这类类库绝大多数属于基本数据类库,制作界面的控件、各种中间件、支撑件及系统件等类库。但是离要集成应用软件所需要的构件还有很大距离。虽然国际上各种软件公司正在开发各种中间件产品或领域构件,但常常是不能拿来就用,如开发MIS系统时的Form操作构件、查询统计构件以及报表生存构件,特别是一些与领域有关的专用构件,必须要我国自己开发。那么如何提取领域构件,国际上还没有一种可循的办法,也就是说我们在开发应用软件的同时,难以形成相应的领域构件,以便适应系统自身演化或可复用到同领域中的不同系统的开发中。针对基于构件的应用软件开发过程,我们提出三个阶段的生命周期,即软件开发模型。
数据库设计时分为概念设计、逻辑设计和物理设计三个阶段,应用软件开发过程也分三个阶段。
第一阶段为需求获取,采用仿真办法,描述客观世界的人工系统。在八·五时期,我们试验成功了"角色法"的描述方法,设计出领域需求报告可复用构件,用HIPO图、半形式方式描述出客观系统。
第二阶段是分析客观系统,设计出逻辑系统,我们称为领域分析。由于客观系统和软件系统在概念、结构、功能,通信方式均有很大差异,虽然都是采用面向对象的概念来形成,但客观世界的对象是实体,没有类的概念;客观世界是一种功能模型,而软件系统是面向封装后的对象组成。要把从客观系统转换到软件系统,且要有利于实现复用,为此我们提出了一种过渡用的软件系统,把与领域有关的不变部分和可变部分分开,设计出领域软件的框架,提取出领域软件,设计出主题数据库,由此形成了与领域有关的逻辑系统,以上各部分结果,我们统称为设计件。
在开出构件的规格说明后,就可以编制构件类、构件类树,为实现领域的群体开发作好一切文档准备。
第三阶段为系统集成,找到合适构件类,将其生成实例,用过程控制语言描述出系统中的各子系统;配置用户喜爱的操作界面;生成各种输入输出构件实例等。最后集成系统,通过实际运行,不断修改,直到用户完全满意为止,这种方法也能适应今后系统的演化。一旦领域软件系统形成后,在开发同一领域的应用软件时仅仅是第三阶段的工作,用户自己可以来完成,维护工作也大大减轻。
上述开发过程中,软件开发人员可以分工去做。先由咨询公司或软件公司完成第一、第二阶段工作,由软件产品开发公司完成逻辑系统,提供领域分析的设计件、领域专用或通用的构件类库以及系统集成专用平台,再由集成公司或用户自己来完成第三阶段工作。
构件软件是基于面向对象发展起来的,但它却摆脱了面向对象理论的束缚。尽管在理论上还未完备,但实际应用进展很快。在国内,构件软件的理论和实际工程已被人们普遍关注。在理论上,北京大学、中科院软件所、吉林大学、南京大学、复旦大学、中山大学等单位,均发表了不少有价值的学术论文。在实际工程上,青鸟公司、中软公司、华科电脑公司、特宝科公司、天中公司等均采用基于构件技术开发应用软件,积累了不少经验,获取极好的效益。预计在一、二年之内,构件软件技术将会在全国普遍开花。构件软件技术还处于发展阶段,目前迫切需要解决以下问题:针对如何开发应用,需要有一套开发规范和质量保证体系;如何提取领域构件,仍然是处于摸索阶段。开始时,我们是采用通过功能划分来提取构件,这就影响构件的可复用性,目前可以采用领域中的模型和各种设计模式来提取构件是一条好的途径,但还未总结出可操作的规程;最后鉴于分布式系统网络系统和多媒体应用,国际上的复合文档和Java正处于迅速发展时期,在我国还缺乏实际应用的经验。最后,希望在我国出现一个有自主版权的Case工具,引导着我国构件技术的发展。