Programing for/with reuse:
面向复用编程:开发出可复用的软件
基于复用编程:利用已有的可复用软件搭建应用系统
白盒复用:源代码可见,可修改和扩展
黑盒复用:源代码不可见,不能修改
源代码复用:searchcode等 站
复用一个类的方法:继承 inheritance、委托 delegation
Library复用:开发者构造可运行的软件实体,其中涉及到对可复用库的调用
框架复用:一组具体类、抽象类、及其之间的连接关系,开发者根据 framework的规约,填充自己的代码进去,形成完整系统
白盒框架,通过代码层面的继承进行框架扩展
黑盒框架,通过实现特定接口/delegation,进行框架扩展
LSP: 子类必须能替换它们的父类
子类型多态:客户端可用统一的方式处理不同类型的对象
协变:父类型到子类型,更具体的规约,不变或更具体的返回值类型和异常类型
逆变:父类型到子类型,更具体的规约,不变或更抽象的参数类型
泛型的协变与逆变
List
List
委派/委托:一个对象请求另一个对象的功能
委派是复用的一种常见形式
CRP 原则: Composite over inheritance principle “委托”发生在 object 层面,而“继承”发生在 class 层面
建议:遵循CRP原则,尽量避免通过继承机制进行面向复用的设计,尽 量通过CRP设计两棵继承树,通过delegation实现“事物”和“行为”的 动态绑定,支撑灵活可变的复用
建立delegation关系的方式:
Dependency:临时的委派 Association:永久性的委派 Composition:更强的 association,但难以变化 Aggregation:更弱的 association,可动态变化
接口的组合: 使用接口定义系统必须对外展示的不同侧面的行为 接口之间通过 extends 实现行为的扩展(接口组合) 类 implements 组合接口从而规避了复杂的继承关系
白盒框架,通过代码层面的继承进行框架扩展
黑盒框架,通过实现特定接口/delegation 进行框架扩展
白盒框架的原理与实现:继承
黑盒框架的原理与实现:委派
Construction for change:
可维护性的常见度量指标: 圈复杂度、代码行数、可维护性指数、继承的层次数、类之间的耦 合度、单元测试的覆盖度
聚合度与耦合度: 模块化编程:高内聚、低耦合(子程序之间的相关联性)、分离关注 点、信息隐藏 评估:可分解性、可组合性、可理解性、可持续性(发生变化时受 影响范围最小)、出现异常后的保护(出现异常后受影响范围最 小) 规则:直接映射、尽可能少的接口、尽可能小的接口、显式接口、 信息隐藏
OO设计原则的五大准则(SOLID)
SRP 单一责任原则:不应该有多于 1 个原因让你的 ADT 发生变化, 否则就拆分开
OCP:面向变化的开放/封闭原则:
对扩展性的开放:模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化
对修改的封闭性:模块自身的代码是不应被修改的,扩展模块行为的一般途径是修改模块的内部实现
关键的解决方案:抽象技术
LSP:Liskov 替换原则
ISP:接口隔离原则
不能强迫客户端依赖于它们不需要的接口:只提供必需的接口
DIP:依赖转置原则
抽象的模块不应依赖于具体的模块 具体应依赖于抽象
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92690 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!