软件构造部分笔记暨期末复习(三)

Programing for/with reuse:

面向复用编程:开发出可复用的软件

基于复用编程:利用已有的可复用软件搭建应用系统

白盒复用:源代码可见,可修改和扩展

黑盒复用:源代码不可见,不能修改

源代码复用:searchcode等网站

复用一个类的方法:继承 inheritance、委托 delegation

Library复用:开发者构造可运行的软件实体,其中涉及到对可复用库的调用

框架复用:一组具体类、抽象类、及其之间的连接关系,开发者根据 framework的规约,填充自己的代码进去,形成完整系统

白盒框架,通过代码层面的继承进行框架扩展

黑盒框架,通过实现特定接口/delegation,进行框架扩展

LSP: 子类必须能替换它们的父类

子类型多态:客户端可用统一的方式处理不同类型的对象

协变:父类型到子类型,更具体的规约,不变或更具体的返回值类型和异常类型

逆变:父类型到子类型,更具体的规约,不变或更抽象的参数类型

泛型的协变与逆变

List<Number> is a subtype of List<? extends Object>

 List<Object> is a subtype of List<? super String>

委派/委托:一个对象请求另一个对象的功能

委派是复用的一种常见形式

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:依赖转置原则

抽象的模块不应依赖于具体的模块 具体应依赖于抽象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值