可复用性的度量、形态与外部表现
1.软件复用
两个方面:
(1).programming for reuse 面向复用编程:开发出可复用的软件
(2).programming with reuse 基于复用编程:利用已有的可复用软件搭建应用系统
优势:
(1).降低成本和开发时间
(2).经过充分测试,可靠、稳定
(3).标准化,在不同应用中保持一致
开发可复用的软件(for reuse)
开发成本高于一般软件的成本:要有足够高的适应性
性能差些: 针对更普适场景,缺少足够的针对性
使用已有软件进行开发(with reuse)
可复用软件库,对其进行有效的管理
适配
2.如何度量可复用性
(1).复用的频繁程度
(2).复用的代价:获取、适配,扩展、实例化、与其他部分互联的难度
具有高复用性的软件:
小、简单;与标准兼容;灵活可变;可扩展 ;泛型、参数化;模块化;变化的局部性;稳定;丰富的文档和帮助
3.可复用组件的级别
代码复用的种类:
白盒复用:源代码可见,可修改和扩展
黑盒复用:源代码不可见,不能修改 通过API接口来使用
a.源代码层面的复用????Copy
https://github.com/search
https://searchcode.com/
b.模块层面的复用:类或接口
复用方式:继承和委托
c.类库层面的复用:API/Package
d.系统层面的复用:Framework
框架:一组具体类、抽象类、及其之间的连接关系
开发者根据 framework的规约,填充自己的代码进去,形成完整系统
Library与Framework的区别:
4.可复用性的外部观测
(1).类型可变:适应不同的类型,且满足LSP。
(2).功能分组
(3).实现可变:ADT有多种不同的实现,提供不同的representations和abstract funtion,但具有同样的specification (pre-condition, post-condition, invariants),从而可以适应不同的应用场景
(4).表示独立:内部实现可能会经常变化,但客户端不应受到影响。
(5).共性抽取:将共同的行为(共性)抽象出来,形成可复用实体 。