Binormal

The genuine programmers use C++

 

软件复用级别之我见

      软件复用程度的级别可以按以下准则来衡量(级别从低到高):
(1)函数:将那些重复或者类似的程序集中起来放在函数里,对外提供参数以利复用,是功能型的重用;
(2)实在类:将若干经常使用的函数集中起来,将函数的参数转化为类的成员变量,自定义构造和销毁函数,是资源型的重用;
(3)抽象类:使用纯虚函数对外提供接口,这些接口仅仅声明了基类的功能,而将实现拖延到子类中去,是强调可变性的资源型重用;
(4)包:将若干耦合度较大的类集中起来,统一地对外提供接口,是一种有机的资源型重用;
(5)模板:将变量的类型通用化,它是一种强调通用性的资源型重用,可以应用在上面四个层次上;
(6)组件:封装了数据和方法的可执行代码,上面五种都属于代码级的复用,而组件属于软件级的重用。

posted on 2006-09-19 14:28 Binormal 阅读(906) 评论(2)  编辑 收藏 引用

评论

# 通用软部件 2007-08-11 10:41 yuxianm

推荐一篇文章:
摘自《通用软部件应用范围与边界》
原文引用地址:http://www.sciencenet.cn/blog/user_content.aspx?id=4643
原作者:程学先等
对通用软部件(简称部件)作清晰的界定将有利于部件技术的发展。1、部件是粗粒度的可通用于各个系统的代码封装体。部件是应用系统的顶级模块,是包括模块级人机交互界面、数据控制(包括数据完整性约束、安全性控制)、数据变换、通信、代码变换、简单数据处理操作等代码的封装体,它的每一次复用将建立系统的一个程序模块。相比较而言,对象,是类的复用(不为通用于不同程序的复用而设计的类,例如JAVA中大量类,不在本文中讨论),是类的实例。类是单个数据级(数据项、域、单表)的人机交互界面、数据域完整性控制、简单操作控制(消息驱动)等代码的封装体,它的每一次复用将建立程序模块中一个控件。为了使类能通用于任何程序,调用时需要给出接口参数,例如名称、所代表的数据、其原始模板(生成该控件的类的名称及相关特性)、位置与形状等几何与图形特征、域完整性约束条件、控件的操作特性等等,这些内容用“属性”来表示。为让它能被用到不同程序中去并实现不同的功能,利用许多方法来实现。这些方法在复用到其他地方时,代码常要由程序员填写,这些手工填写的内容一般不能复用。尽管从类派生生成对象的过程需要人工操作,存在大量无法复用的部分,但是该技术对于提高程序设计效率与质量发挥了大家都公认的作用。而部件将一个模块中所有控件都封装了进去,处理好了控件间数据相互联系的问题;它包括了数据变换与通信接口等内容,也就处理好了模块对外的联系,有些还封装了全部数据操作代码。这些内容对于程序员与用户都是一个黑盒,在设计时无须考虑其内部的实现,使设计简化,统一设计的接口参数变量不到20个,(如果有数据完整性控制等特殊要求再另外通过常规接口参数表、数据变换接口参数表(字典表)、通信接口参数表等传递控制信息)。这些将使利用部件技术构建的系统具有更高的代码复用率。但是,一个系统要求完全复用是十分困难的,一般在后台进行业务逻辑和数据处理的部分,例如复杂的查询、特殊的导出、复杂统计与报表、数据分析、编制计划或其他决策支持程序,还需要人工设计补充。 2、软件复用无止境,软件发展与软件复用研究始终紧密联系在一起。部件技术也会遇到面向对象技术同样的问题:部件的代码冗余会更大,处理速度会进一步受到影响,适用范围会更小。但是也一定会促进计算机理论与技术的发展,会将计算机应用的范围与应用的深度再向前推进,将要求部件技术自身不断向前发展,软件复用实现的难度会越来越大,但发展不会停止。在自适应工资管理系统一文中看到该设计不仅可以复用到其他行业的工资管理上,还可以用到各种单一主数据表、所有处理都以字段为基本单位的其他系统或子系统中,可以看成是系统级或子系统级的复用产品,但它是不能被称为部件的,也不要求封装。关于部件的研究还仅仅是开始,需要我们更多地去投入与研究。 3、在设计部件时要尽可能地将非复用部分独立出来。关于数据处理的部分变化很多,要想所有处理代码都来自复用是不现实的,只能逐步积累,慢慢提高这一部分的复用率。这一部分的设计往往还需要以往的设计方法。但是,为了取得较强的适应性与可扩展性,提高程序设计效率,应当尽可能地将这一部分代码从部件封装体中剥离出来、形成相对独立的部分。在复杂查询程序与复杂报表设计时我们考虑了这一问题。可以设计这样的部件:该部件封装了界面等等内容,只将处理代码放到数据库中,这一部分内容允许程序员与用户自己维护,在复用时从数据库中直接按程序号(记录号)取出存放的代码并执行。这样,程序员操心的将只是若干面向过程代码,工作量与设计难度将都下降。也具有很大意义。
  回复  更多评论   

# re: 软件复用级别之我见[未登录] 2007-08-13 13:07 shilei230

软件复用无止境,存在着一个粒度的问题。一个基本的原则就是:封装变化,依赖抽象。所以通过面向对象而不是面向机器的方式来解决问题,就能够在问题域把变化隔离出来,从而获得一个稳定的框架。这篇文章讲的就是这个意思。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(2)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜