· 软件 ·
软件重用的实现
. . 。 ! 弋P 31\· (复旦太学计算机科学系上海200433)’’
摘薹 软件重川是指使 l_f』已有 软件成分构造新帕软件系统的盘上程.乖文分 3个层狄讨论软件_皿用的方珐:实现
层,设讣层,怍系结构层们软件煎川.同时指日j,抽象是实现戟件重州技术的基础.而『耐对象技术挺供了多种点
持软件巫川的机制.通过建立一个可重州软件剐象库.和构造州 管理可煎州x十象帕软件开发环境,形成一种新
们基于软件重州帕软件开发范型,必将对被件开发产生深远的
关键词 被件煎川 抽象 软件体系时构 面出 :【墼技术
。。。’。。。一 The Realization of S eUSe
[Al~ ract'l Softwarc rcusc is thc proccss ofcrcating softwnrc systems using cx[sting softwarc componcnts.In this
papcr WC cxam lnc scvcra]kinds ofsoftware rcusc approachos.W c di.scuss thcm in~hrcc Icvcls: implcmcntation Icy-
d, design Icvcl, and architccturc lcvc!.W c also point out that abstraction is thc basis of thc softarc rcusc tcchnol-
ogy.Objcct-oricntcd tcchnology have scvcra!mcchanlsms to support soRwarc rcu~c.n is thc bcst i~usc approach in
some mcaning.W ith a largc rcusablc components library。 and a software dcvclopmcnt cnvironmcnt to managc
rcusablc componcnts. wc ca[i establish ncw rcusc—bascd so[twarc dcvclopmcnt paradigms.
[Key words] softwarc rcusc/abstraction/softwarc architecture/objcct—oricntcd tcchnology
软件重用是软件工程研究帕重要 S题.它是 功n勺硬件集成I 路(【c),软件研究人员也提出了
指在构造新的软件系统的过程中利用已有的软件 相应的软件 Ic的概念.软件 Ic是可重用的槲
成分。这里所说的已有的软件成j’包括十分广泛 对独立的软件{{=ff件.但是轼件有其不同于硬件的
n勺内容 ,如数据,文档,模式,休系结构,蜘 特点,软件 而I晰『内问题领域干变万化,完全的
识,方法和环境等多方if=l『的内容.从广义上说 , 软件 Ic库的建立十分嗣难.尽管如此,实践表
软件重用包括 3个层次:(1)产 品重用 ,如代 明,软件重用仍是提高软件生产效率,保证软件
码 数据 软件模式 体系结构等的重用;【2) 质量的关键手段之一。日前软件重用的思想已渗
钓『识重用,如方法、标准 经验、领域 r 、软 透到讷:多新的软件开发 韶 中。 向l 象,程序
件过程等的重用i(3)环境重用,如系统程序. 变换和快迷朦型化技术中均包含了软件重用的思
软件:[具 升发环境等的重用. .随着软件重用技术 f究的深人,必将主fj软件
术文儿对沧狱义的软件重甩,即软件产 或 技术带来一场新的革命。
软件成分的重用。 传统的观点认为,软件重用帕对象仅为已有
近 米,十H对于讣莽机硬件生产的低成术和 系统n勺程序代码.但是仅仅重用源程序代码等信
高生产率,计算 L软件生产帕高成本和低生产率
已严重地制约了软件的迅述发展.软件工作者从
箨个角度研究提高软件生产卑的办法,软件重用
技术就是其中之一⋯ ,对应于已获得巨大成
·半也戈 复旦太学汁算机系在谈硕J_-0[究生,主攻
方m软件过 『昀理论和应州
1 稿 II妇】:l994一O7—13 修 ll_I坶I:I 994—10—24
— — 37——
维普资讯
息并不能有效地降低软件开发n々成本.Frccman
指出 .软件重用的对象应为整个软件开发过
程,包括分析、设计、实现等各阶段中的所有信
息.由此他提出了 可重用软件工程 的概念,即
在软件开发的每一阶段进行软件重用.本文将讨
论软件开发各阶段中可重用的软件成分.
面向对象技术的出现给软件重用注入了新的
活力.与传统的过程性程序开发范型相比,面向
对象技术更支持软件对象『内重用 .面向对象
中数据抽象和信息隐蔽机制使得对象的内部实现
和外界相隔离。使之成为较理想的可重用的软件
成分.使用面向对象的设计方法时,新『内对象可
通过继承已存在的对象的性质(数姑结构和操作)
而产生。提高了信息『内可重用性.因此。1斫向对
象的程序设计技术是 目前实用、最理想『内软件重
用技术.
为了能有效地利用软件重用技术开发软件系
统,疋好的可重用部件n勺分类、存储.检索、理
解 修改和管理等机制以及支持软件重用fl々软件
开发环境是必不可少『内.通过这些支持手段.新
的基于软件重用的程序开发范型将对今后的软件
开发起重用作用。
l抽象概念在软件重用中的地位
抽象概念和软件重用是密不可分的.抽象就
是通过概括宴体『内公共属性。忽略枝节问题米描
述一类实体.每一类抽象决定相关『内可重用属
性,每一可重用属性也可以决定一类抽象。即具
有这些属性『内所有实体.因此可以说,。抽象和可
重用属性是同一事物『内正反两面_l“.抽象可以
}为两个层次:高层称为抽象规格说明,说明这
一 抽象是 做什么的(what)’:低层称为抽象实
现。解决抽象是 怎么做的mow) 的问题.倒如
一 个栈结构的抽象,其抽象规格说明是栈曲 先
进后出 语义及其界而:其抽象实现包括有关栈
『内实现的所有细节。如栈fl々深度.栈中元豢类型
和栈元索操作函数的程序体等.在 Ada语言
中,抽象规格说州和抽象的实现可以清晰地分
离.明确的抽象规格说明是抽象的基础.
一 38一
软件人员经常应用抽象概念米管理软件开发
的复杂性问题.通过抽象,软件人员可以在不下司
阶段以不同层次的抽象考虑问题,他们只考虑某
一 层次中最本质的东西,而不考虑其他细节问
题.当软件重用应用于较高层次的抽象时。开发
人员所处理的信息更接近于原始『内应用需求,可
以较方便地通过重用已有的软件成分从待开发的
系统的原始应用需求转化为实际『内软件系统。因
此.一种重用技术成功与否在某种意义上说就是
能否尽可能地据高抽象的层次.
2软件重用的对象
2.1实现层的软件重用
实现层『内软件重用是指已有的程序代码fl々重
用.它包括以下 3个方面:
(1)代码提取 软件开发人员对已有的程序
代码,经理解、选择后,把适合于重用的代码据
取出米,并进行必要的修改.使其适用于当前的
上下文.这种可重用对象是最低程度『内抽象,软
件开发人员不但必须知道有关的规格说明。还必
须清楚它的实现部分。一般米说,因为在理解
修改及测试方面帕代价。使用这种重用对象并不
能有效地提高软件开发效率,提高软件的质量。
(2)诹代码部件 源代码部件是专门编写经
过严格i昊l试后。专用于重用目f『勺代码段.高级程
序语言程序n勺一些程序单元,如过程,函数,
包.类等。通常用于完成一个完整『内功能,有良
好『内输入/输出界而,可以作为可重用的源代码
部件.源代码部件帕抽象程度比代码提取高,软
件开发人员只需知道源代码部件n勺抽歙规格说明
部分即可。不必考虑它的实现部分.因为源代码
部件是为重用 日『内专门编写『内,其界面清晰。抽
象规格说明明确,故使用方便而且质量高。目前
使用得十分广泛.例如,在数伍计算领域中的数
学函数库。作为软件可重用对象,使用得十分成
功.许多商品化『内软件开发环境均有以重用为目
的 源代码部件库(函数阼)'用标准函数的形式
向用户提供大量可重用的源代码部件.但是。这
种方法的不足之外在于源代码部件仍然是基于代
维普资讯
码这一较低层次的抽象上,与实际问题领域有较
大的距离.
(3)软件逻辑结构 也称为软件模式,是可
重用源代码部件的形式化扩充.这一层次的可重
用对象着重于对数据结构、逻辑结构和过程的抽
象.软件逻辑结构主要描述软件的各个成分(包
括模块,数据结构等)以及它们之问的关系(如调
用与被调用,参数传递关系等),它们可以作为
一 个整体被重用.对于基于形式化规格说明的软
件逻辑结构,其可重用对象的选择、理解.特化
均较为容易,也便于使用 自动工具支持重用过
程.由于软件人员工作于较高层次的抽象,能明
显地提高软件生产率.但是,目前还缺乏描述软
件逻辑结构的较好的形式化规格说明方法.
2.2设计层的软件重用
与编码阶段肃I比,软件设计阶段在软件生命
周期中占有更重要的地位.重用已有的软件系统
的设计信息,可以更好地降低软件开发成本,提
高软件生产卑.设计层的软件重用包括以下向个
方面:
(1)甚高级语言 甚高缴语言(VHLL]也称为
可执行的规格说明语言.它允许开发者使用比高
级语言更高层次抽象的规格说明描述用户{i}}求。
产生可执行系统.作为一种语言,甚高级语言与
高级语官一样,具有独自的语法 语义,可通过
编译,从需求规格说明自动影射到可执行的代
码.甚商级语言通常以集合论,谓词逻辑等高层
次的数学抽象作为基础.
利用越高级语言,系统的设计信息作为可重
用软件成分重用,而且甚高级语言比高级语言更
接近于用户语言,表达 自然.筒结。因此能有效
地减少开发人员的设计乃至编码阶段的工作量,
提高软件的开发效率.但其耿点是,现有的甚高
级语言执行效率低,达不到实用『内程度。但是,
在硬件效率大幅度提高的基础上,甚高级语言的
效率可以逐渐达到可以被接受的程度.另外,使
用广谱怕让高级语言(即混合高级语亩和甚高缎
语言的一种语言)的优化功能,还可以用高级语
吉成份对盐高级语亩成份进行优化,提高甚高缎
语言的运行效率.因此,从长远观点来看,甚高
级语言是实现高层次软件重用的重要途径.
(2)应用生成 器 应用生成器类似于程序语
言的编洋器,它将输入的程序规格说 明自动转换
成可执行的程序.应用生成器已广泛用来生成数
据库 统计、分析等多种用途的程序.由于应用
生成器直接来源于特定应用领域中的非常高层的
抽象,因此十分接近原始的系统需求.
使用应用生成器进行重用,实质上重用了整
个系统的设计过程.实现的算法和数据结构都是
自动选择的.如果要在某一应用领域编写出多个
类似的软件系统,或者在软件件生命期中系统要
修改甚至重写多次,则使用应用生成} 是十分有
效的.因为一个应用生成器往往针对特定的应用
领域,因此它的实现效率也比较高.YACC是
生成器中最著名、最成功的实例之一,它是一个
语法分析器生成器,根据开发人员给出的语法表
示,自动生成对应fI勺语法分析器的源代码.
应用生成器是较为广泛应用和成功软件的可
重用对象.不足的是,应用生成器只针对特定应
用领域,开以出通用的生成器十分困难,从而限
制了它的使用范围.
(3)变换 系统 利用变换系统开发软件的过
程是:首先用高层规格说明语言描述软件系统的
需求,然后根据变换规则,将规格说明转化为可
运行系统.在变换过程中,可以有人的干预.因
此变换过程一般可以看作是一种交互的编译过
程.变换系统根据变换规则把一个程序变换成另
一 程序,后者在语义上与前者相同,但在性能上
要优于前者.利用变换系统,可以逐步得到运行
行为越来越好的程序.
利用变换系统可以实现以下重用:(1)原型
重用.在变换系统中,原型可作为系统的韧贻规
格说明,通过不断变换和完善,成为实用的可执
行系统.(2)开发经历重用.使用变换系统,开
发人员的修改可以只在需求层次上进行,对于某
些局部改动,原先的开发经历,即变换序列『内大
部分可被重用,i『『i不须重新设计 ..(3)变换规
则.变换规月 由匹配模式,应用条件和替换模式
一 39—
维普资讯
构成,大部分变换规则可被重用于多种不同的情
况。
变换系统是一种较为成功的可重用对象。
2.3体系结构层的软件重用
最有效的软件重用是在软件体系±卉构层n々重
用.
软件体系统结构重用是指将软件的框架组
织、全局结构等作为一个整体扣l以巫用.与软件
逻辑结构柏比,软件体系结构更着重于系统与各
子系统,各子系统之问的十H互关系而非数据±卉构
和算法。与应用生成器相比,均是重用系统设
计,但应用生成器一般只适用于特定应用领域,
隐含重用体系结掬的信息,而可重用软件体系结
构则通常是显式重用软件体系结构,并可以通过
集成其它体系结构.建立新n々更高层次的体系结
构。软件体系结构的抽象直接来源于应用领域,
可以用领域语言描述。从 领域语胄描述到实现可
以仝诩I通过I=j动映射来实现,开发者可通过选择
特定的体系结构米适应不同应用的需求。
软件体系结构帕重用吸取了其它软件可重用
刘絮n匀优点,是丹前最理想的可重用软件对象.
建立一个完备 的软件体系结构库,以及用于支
持 管理体系结构构件的软件开发环境,形成一
种新帕基于软件重用的软件开发范班,将对今后
的软件开发产生重要的影响。
3而 刘。象技术中的软件重用
而 向对象技术是一种崭新的软件开发拖 .
它同时 i 为软件重用技术的发展做m了重大贡
献。而『 刘象程序是 可重用帕软件成分一一对
象构造起米的.在in[向对象技术中,对象和类是
构件块,方法、消息和继承体现构件块之 帕信
息传递关系。 于对象封装了数据和数据怕操作
方浊,周而是盥好的可重用成分. 继永关系组
织起来的类的层次关系,使子类可以 方便地重
用父类的信息.因此 阳对象他型是一种基于重
用的软件_扦发范型.
向对象技术支持的 多基木机制和慨念在
{ 大程瘘 i-均支持软件重用l1々思魁.
一 40一
类是而向 象中的基水概念。它是对象类型
的定义,表示所有相同属性的对象。娄描述了对
象的数据和数据的操作方法.类是有层次性的,
这是通过继承米实现的。一个类可以派生多个子
类,子类继承父类的数据和方法。因此,父类原
有的数据和方法可被子类多次重用。一个类同样
也可以有多个父类,即多重继承,这样,子类就
重用了多个父类的数据和方法.通过父类和子类
的继承关系,设计信息的重用和代码的重用均能
诎方便地实现。
而向对象支持封装的概念。对象数据类型是
一 个包含数据和操作的抽象结构,对象数据的实
现细节被 隐藏 了起米,数据不能被外部随意改
变,而只能通过对象之问的消息传递来互相影
响,这使得对象成为一个很好的抽象,是 良好的
可重用成分.封装机制是iiI『向对象重用技术成功
的重要原 因.
多态性是而向对象中叉一重要的慨念。多态
性指消息可根据所发送的对象类而改变其执行的
行为.同样的消息,发送到不同的对象类,可以
完成完全不同fl勺操作行为.多态性方便了软件成
分的重用,许多操作可以不 修改地应用于不同
对象,而被有效地重用.
传统帕软件重用需要可重用的软件成分完全
符台当前应用怕上下文,否则就很难被有效地重
用。而在T『『『向 象技术中,并不需要原封不动地
重用已有的对象,软件人员可以通过建立派生
类,继承父类绝大部分的可重用信息:对于不可
重用的部分,可以通过定义凸身的数据和办法+
或重用父类『内 些方法来完成。而阿对象技术支
持这种 增鲢式 岫 基于重用的软件开发方法.
我们认为,『『『『向对象软件开发技术的成功之
处在于它捉供了大扭的可重用软件一基乖类库,
以及支持软件重用的基本机制,因而是日前最成
功的软件重用技术之一.
4小结
木文从抽象和软件重用的关系^ 手,指Ⅱ』要
(下转第 70页1
维普资讯
}
7汉字处理
在处理汉字信息时.我们采取直接从汉字库
中读取汉字字模序号后写汉字点阵信息的方法来
显示汉字 .
8结束语
本文介绍的联机帮助系统的设计易于为一般
Windows应用软件开发者接受.较之 Windows
Hclp系统,它具有以下优点:
(1)它避免了使用 HC编译程序和 WinHclp
函数,解决了在西文 Windows应用软件中建立
汉字帮助系统的问题:
)建立帮助信息源文件不需要 Windows
专门的字处理程序,而可用任何一个中文文术编
辑器进行编辑;
(3)为帮助主题文件配制了一索引文件.提
高了搜索速度:
(4)帮助主题文件结构设计简单灵活,不象
Windows Hclp主题文件那样有很多上下文关联
标志、跳转和定义的控制代码等让应用软件开发
者感到繁杂的东西,便于帮助系统的更新与维
护.
当然.由于设计简单,相应地在功能上就不
如 Windows Hclp系统那么丰富.如本系统不具
备 Windows Hclp系统的回退和顺序搜索主题的
功能.但由于它对 Windows的依赖性小.因此
可以较方便地应用其设计思想在 OpcnWindow
或 Motif应用软件上建立类似的联机帮助系统.
参考文献
l 吴振亚.科研程序和商业软件 j’算 机世界报 .
I 994(27)
2 求明华.MS--Windows3.0程序设计指南和工具一£
京:lU子工业日;版社,I 99I
3 袁 征,杨仁树.严她新.C语盲编程技巧程序集.
北麝:lU子工业 日:版扯, 1993
≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈
(上接第40页)
有效地进行软件重用.必须尽可能地提高软件可
重用对象的抽象层次.然后分 9讲述了实现层,
设计层、体系结构层的现有的各种戟件可重用对
象.揖出了它们的优点和不足.
而向对象技术 好地体现了软件重用的思
想.类,继承 封裟,数据抽象和多态性等if【『向
对象的机制有效地支持了软件对象n勺重用.
在软件重用技术中,除了要开发更多的有较
高抽象层次的软件可重用对象以外.同时还要建
立一套生产,存储 管理 查询、选择和装配可
重用软件成分的机制,管理软件重用的整个过
程,有效地发挥软件重用的作用.建立丰高的软
件可重用对象库,构造用于管理可重用对象的软
一 70一
件开发环境,形成新的基于软件重用的软件开发
范型.是我们今后进一步工作的重点.
参考文献
I Kr 量cr C W .Sohwarc Rcusc.ACM Computing
Survcys, J992.24(2):l32-I 83
2 Horowitz E, M un$on J B.An Expanaivc Vicw of
Rcusablc Software.IEEE Tf~tn$ on SE, I984.
VoI.SB—I o(5):477---487
3 Joncs T C.Rcusability in Programming:A Survcy
of the Statc of thc Art.1EEE Trflns o[1 SB. J984
Vo1.SE-I叫5):488—494
4 Che ng I.Improving the Software Rcusabi|ity jn
Ob~ct__Oticntcd Programming.ACM sIGS0FT.
Sohwa~No£cs,I993.1B(4):7O一74
维普资讯