可复用性的度量、形态与外部表现


同应用中重复使用的软件模块/API?)

软件复用/重用

软件复用是使用现有的软件组件补全或者升级软件系统的方法。

软件复用的两种维度

1.面向复用编程,开发可复用的软件
2.基于复用编程:利用已有的可复用软件搭建应用系统。

软件复用的优越性和缺点

优点
很大的适应性
降低成本和开发时间
充分的测试→高可靠
标准化、一致化
缺点
针对性不强→性能差

为什么进行软件复用

1.降低成本和开发时间
2.经过充分测试,可靠、稳定
3.标准化,在不同应用中保持一致

软件复用的代价

1.软件复用应该使用一种被定义的,开放的和精准的接口规约,可以理解的文件和对于未来使用的洞察,而要做到上述这些,需要付出代价
2.软件复用包含了组织上的,技巧上的,和进程上的改变和支持这些改变的工具的代价以及培训人员适应这些新的工具和改变的费用。
3.可复用组件:被复用到的产品规模越大,数量越多,开发可复用组件的成本越低。

开发可复用的软件

1.开发成本高于一般软件的成本:要有足够高的适应性。
2. 性能差些:针对更普适场景,缺少足够的针对性。
在这里插入图片描述

使用已有软件进行开发

1.可复用软件库,对其进行有效的管理。
2.往往无法拿来就用,需要适配
JDK中的可复用的Libraries和APIsJDK中的可复用的Libraries和APIs

如何测度可复用性

思考方向:
1.复用的机会有多频繁?复用的场合有多少?
2. 复用的代价有多大?
[1]Cost to buy the asset and other mandatory libraries 搜索、获取
[2]Cost for adapting and extending it 适配、扩展
[3]Cost for instantiating it 实例化
[4]Cost for changing other parts of the system that interact with it 与软件其他部分的互连的难度

具有高可复用性的的软件应该是这样的

– Brief (small size) and Simple (low complexity) 小、简单
– Portable and Standard Compliance 与标准兼容
– Adaptable and Flexible 灵活可变
– Extensibility 可扩展
– Generic and Parameterization 泛型、参数化
– Modularity 模块化
– Localization of volatile (changeable) design assumptions 变化的局部性
– Stability under changing requirements 稳定
– Rich documentation 丰富的文档和帮助

可复用组件的三种层面和形态

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

最主要的复用是在代码层面

1.最主要的复用是在代码层面
2.但软件构造过程中的任何实体都可能被复用

代码复用的类型

白盒复用:源代码可见,可修改和扩展
1.复制已有代码到正在开发的系统,进行修改
2.可定制化程度高
3.对其修改增加了软件的复杂度,且需要对其内部充分的了解

黑盒复用:源代码不可见,不能修改
1.只能通过API接口来使用,无法修改代码
2.简单,清晰
3.适应性差些

(1)源代码复用

如何从互联网上快速找到需要的代码片段?
如何从源代码中检测出克隆代码(clone code)?

(2)模式层面的复用:类/接口

继承

Java provides a way of code reuse named Inheritance
Java提供了一种代码复用的方式:这种方式被称为继承
Classes extend the properties/behavior of existing classes
新的类可以继承现有的类
In addition, they might override existing behavior
而且,新的类可能会重写已经存在的行为(方法)

委托

Delegation is simply when one object relies on another object for some subset of its functionality (one entity passing something to another entity) 一个对象依赖于另一个对象的部分功能

(3) Library-level reuse: API/Package

什么是Libarary:提供可复用功能的一系列类和方法。
在这里插入图片描述

Framework

Framework: Reusable skeleton code that can be customized into an application
框架:可以被写成一个应用的可复用代码框架

在这里插入图片描述

(4) System-level reuse: Framework

Frameworks are sub-system design containing a collection of abstract and concrete classes along with interfaces between each class 框架:一组具体类、抽象类、及其之间的连接关系
A framework is an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software. 开发者根据framework的规约,填充自己的代码进去,形成完整系统
Reusability leverages of the application domain knowledge and prior effort of experienced developers 领域知识的复用
将framework看作是更大规模的API复用,除了提供可复用的API,还将这些模块之间的关系都确定下来,形成了整体应用的领域复用。

白盒框架VS黑盒框架

白盒框架,通过代码层面的继承进行框架扩展。
黑盒框架,通过实现特定接口/delegation进行
框架扩展。

4 External observations of reusability

▪ Type Variation 类型可变
▪ Routine Grouping 功能分组
▪ Implementation Variation 实现可变
▪ Representation Independence 表示独立
▪ Factoring Out Common Behaviors 共性抽取
类型可变(泛型):适应不同的类型,且满足LSP

Implementation Variation

实现可变:ADT有多种不同的实现,提供不同的representations和abstract function,但具有同样的specification (pre-condition, post-condition, invariants),从而可以适应不同的应用场景

Routine Grouping

提供完备的细粒度操作,保证功能的完整性,不同场景下复用不同的操作(及其组合)

Representation Independence

内部实现可能会经常变化,但客户端不应受到影
响。
表示独立性、信息隐藏

Factoring Out Common Behaviors

将共同的行为(共性)抽象出来,形成可复用实体:父类、抽象类
只要看到自己写了重复的或相似的代码,想办法抽取出来形成可复用方法/类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值