软件构造4.1可复用性的度量

可复用性:提高效率,并且经过充分测试,可靠稳定。

定义

软件复用是使用已经存在的软件组成成分来完成软件系统的过程,包括两个方面:面向复用编程(开发出可复用的软件)和基于复用的编程(利用已有的可复用软件搭建应用系统)。

其中,在开发可复用软件时,其开发成本高于一般软件的成本,因为要有足够的适应性。并且因为需要针对更普适的场景,缺少足够的针对性。在使用已有软件进行开发时,往往无法拿来就用,需要适配。

可复用软件的成本:若软件产品的规模较小,则可复用开发模式的成本会高于不复用的开发模式。因为有各种辅助类、接口的开发。当软件的规模增大到一定程度后,可复用软件的成本会小于不复用的开发模式。

度量

复用的频度,复用的代价
在这里插入图片描述

分类(级别)

软件构造过程中的任何实体都可能被复用:在这里插入图片描述
但是最主要的复用是在代码层面,代码复用的类型:

  1. 白盒复用:源代码可见,可修改和扩展,但对其修改增加了软件的复杂度,且需要对其内部充分的了解。实现方式:继承。
  2. 黑盒复用:源代码不可见,不能修改,只能通过API接口来使用,无法修改代码。实现方式:调用(一个函数一个函数地调用)。

代码层级的复用

  1. 源代码层级的复用(最低级)
    即把你需要的代码复制粘贴到你的工程中,这样会导致你的工程显得过于庞大,不易维护,且很容易造成运行时错误。
  2. 模块层级的复用(类,接口等)
    类是代码复用中最小的单元,不需要源代码,只需要class file 或者 jar/zip,并把这个类加入到classpath中。把类打包并把功能通过API暴露给用户。复用方式:
    a. 继承(白盒复用)
    b. 委托delegation(黑盒复用):当一个类用另一个类的某些功能时,直接调用某个类的功能。显示委托:直接使用一个对象调用其某个方法。隐式委托:只调用功能,发布命令,并不指明执行者。
  3. 库文件层级的复用(API/package)
    直接调用库文件中的类和方法。主动端是开发者构造的软件实体。
  4. 系统层级的复用–框架framework
    框架是一组具体类、抽象类、及其之间的连接关系,只有骨架,没有血肉。
    由framework调用用户的代码。主动端是framework构成的主程序,执行过程中调用开发者缩写的程序。复用方式:
    a.白盒框架(继承):重写框架中的某些方法。
    b.黑盒框架:通过实现特定接口/delegation 进行框架扩展。

可复用性的外部观察

  1. 类型可变
    子类型赋值给父类型的变量,则父类型的类型可变。泛型也可以适应不同的类型。
  2. 功能分组
    将功能细分,提供完备的细粒度操作,保证功能的完整性,不同场景下复用不同的操作( 及其组合)。
  3. 实现可变
    各子类型中可以提供不同的representations 和abstract function ,但具有同样的specification (pre-condition, post-condition, invariants) ,从而可以适应不同的应用场景。
  4. 表示独立
    内部实现可能会经常变化,但客户端不应受到影响。表示独立性可以提高软件的可复用性。
  5. 共性抽取
    将共同的行为(共性)抽象出来,形成可复用实体:父类、抽象类。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值