软件的可复用性

1.什么是软件复用

软件复用就是利用已有的软件组件来实现或更新新的软件系统。

2.软件复用的两个层面

  • for reuse: 创造层面,开发可复用的软件
  • with reuse: 使用层面,利用已有的可复用软件搭建新的软件应用系统

3.软件复用的优缺点

软件复用可以大幅度的节省新软件的开发时间和开发成本。譬如,如果你想造一辆超级跑车,那么给你法拉利,迈巴赫的图纸,会不会感觉任务变得更轻松了呢。软件复用让我们的任务由从0到1简化成了从1到2,这就是一个质的飞跃。毕竟我们都知道,改进远比创造要容易的多。可复用的软件的适应性一般都比较强,在很多方面都有值得借鉴的地方。
还是给你法拉利的图纸,如果这次造的是普通的家用轿车,那我们必定不能直接照搬照抄整个图纸,毕竟家用轿车的预算和法拉利的预算天差地别,这也就体现了软件复用的缺点所在,其针对性并不是很强,如果一有类似就全盘照搬照抄,往往会无法达到我们的期待。不只体现在性能差的方面,还有预算成本,健壮性,适用群体等多方面都会有所差距。
那么既然很难找到两个大致相仿的软件系统,是否就意味着可复用软件的开发并没有什么意义呢?
答案显然是错误的。像吸收外来文化也得取其精华,弃其糟粕。软件复用也是如此,我们只需保留其可复用的部分,舍弃其难以复用的部分即可。还是利用法拉利图纸来开发家用轿车,引擎部分显然是无法复用了,但是在车的形状上是可以参考的,法拉利流线型的车身有益于速度的增加,那么家用轿车同样可以设计成流线型,既提高了速度,又可以节省燃料,最重要的,设计师们也不需要在为车身形状的设计而苦苦思索,争论不休了。

4.软件复用的四个级别

  • 源代码级别的复用
    • 白盒复用:源代码可见,可修改和扩展
    • 黑盒复用:源代码不可见,不能修改
  • 模块级别的复用:类/抽象类/接口
    • 继承
    • 委托
  • 库级别的复用:API/包
  • 系统级别的复用:框架
    • 白盒框架:通过代码层面的继承进行框架扩展
    • 黑盒框架:通过实现特定接口/delegation进行框架扩展

5.评价软件的可复用性

  • How frequently? ——复用的机会有多频繁,场合有多少
    • 开发可复用软件本身比普通开发软件需要更多的人力物力,若软件复用的机会并不频繁,则没必要去可以编写可复用的软件
  • How much? ——复用的代价有多大
    • 搜索和获取可复用代码是否方便,如果需要花很多时间和资源去找到可复用的代码,还不如去自己写
    • 是否适配,扩展性强不强,若复用代码无法扩展实现所需的某个功能,那么难以复用
    • 能否实例化
    • 与软件其他部分互连的难度

6.以外部观察者角度来看软件复用

  • 类型可变
  • 功能分组
  • 实现可变
  • 表示独立
  • 共性抽取

你可能感兴趣的:(java)