1.可复用
面向复用编程:开发出复用的软件。
基于复用编程:利用已有的可复用软件搭建应用。
复用的原因:降低成本和开发时间;经过充分测试,可靠、稳定;标准化,在不同应用中保持一致。
开发可复用的软件成本高于一般软件的成本,因为需要足够高的适应性;性能也会差一些,因为针对更普遍的场景,缺少足够的针对性。使用可复用软件库可以对其进行有效的管理。
衡量可复用性
高可复用性应该满足:小、简单;与标准兼容;灵活可变;可扩展;泛型、参数化;模块化;变化的局部性;稳定;丰富的文档和帮助;
2.可重用组件的级别和形态
1)源代码的复用:将部分代码/全部复制/粘贴到程序中。存在维护问题;需要在多个地方更正代码;使用太多的代码(很多版本)。在处理过程中出现高度错误风险,要知道如何使用的软件工作,需要访问源代码。
2)模块级别的复用:类和接口,类是代码重用的原子单元,不需要源代码,类文件或jar / zip,只需要包含在类路径中。文档非常重要(Java API);封装有助于重复使用;管理的代码较少;版本控制,向后兼容仍然存在问题;需要将相关类组合在一起 - 静态链接。
委托(delegation):委托就是当一个对象依赖另一个对象来实现其功能的某个子集时(一个实体将某个事物传递给另一个实体)。
显式委托:将发送对象传递给接收对象
隐式委派:通过语言的成员查找规则
委托可以被描述为在实体之间共享代码和数据的低级机制。
3)库级别的复用:API/package。库是一组提供可重用功能的类和方法(API)。
4)系统级别的复用:框架是一组具体类、抽象类、极其之间的连接关系。可以定制到应用程序中的可重复使用的框架代码。开发者根据框架的规约,填充自己的代码进去,形成完整的系统。
白盒复用:源代码可见,可修改和扩展。复制已有的代码当正在开发的系统并进行修改,可定制化程度高,对其修改增加了软件的复杂性,且需要对其内部有充分的了解。
黑盒复用:源代码不可见,不能修改。只能通过API接口来使用,无法修改代码,简单、清晰但是适应性差一些。