software construction复习知识点随笔(3)

代码的可理解性/可读性

度量标准:

  1. 名字的长度:标识符(类名,变量名,方法名等)的长度
  2. 度量方法:所有标识符的平均长度
  3. Name Uniqueness Ratio(UNIQ)命名独特比例
  4. 代码复杂度
  5. Line of Code(LoC)
  6. 注释的密度(百分比):MCOMM%。度量方式:MCOMM%=MCOMM/LOC

解决可读性:(对应上方问题)

  1. 命名规范
  2. 代码行的最大长度
  3. 注释
  4. 代码的布局:缩进、空行、对齐、分块等
  5. 避免多层嵌套——增加复杂度
  6. 文件和包组织
  7. IDE和打印时使用等宽字体

命名规范(Java):

  • Package:小写
  • 类和接口:大写首字母
  • 方法:小写首字母,大写其余单词的首字母
  • 变量:camel case:小写开头
  • 常量:全部大写,下划线分开
  • 不能用关键词命名

复用性:

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

复用的类型:
1.白盒复用:源代码课件,可修改和拓展,可定制化程度高,对其修改增加了软件的复杂度,且需要对其内部充分的了解。
2.黑盒复用:源代码不可见,不可修改。特点是简单,清晰,但复用性差。

Delegation委派
委派是常见的复用形式,指一个对象请求另一个对象的功能
图片截图自他人笔记
可用委派来取代继承:若子类只需要用父类中的一小部分方法,可不继承而委派来实现。
委派的类型:

  1. Decpendency:临时性的委派,作为某方法的参数放到List里。
  2. Association:永久性的委派:作为类的一个属性|变量。
  3. Composition:更强的委派:作为某一部分(如器官->人)
  4. Arregation:将委派的类放到了构造函数中

CPR原则(Composite Reuse Principle):

  • 使用接口定义不同侧面的行为
  • 接口间使用extends实现行为的扩展
  • 类实现(implement)接口
白盒测试的原理和实现

白盒测试使用subclassing和overriding方法来实现扩展,且允许多对所有非private方法进行扩展,但一次只能有一个拓展,编译时会一起被编译。
在这里插入图片描述
重写蓝色部分:
在这里插入图片描述
截自课件

黑盒框架的原理和实现

通过实现插件的接口来扩展,进行delegation。
特点:

  • 允许扩展接口中展示的功能
  • 支持多个扩展
  • 更加模块化
  • “平台” “end-user” framework

设计模式

分类:

  • 创建型模式
  • 结构型模式
  • 行为类模式

结构性模式:Adapter适配器模式
将某个类/接口转换为client期望的其他形式。
通过增加一个接口,将已经存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
通过修改接口,让本来无法合作的类进行合作。
在这里插入图片描述

装饰器模式:为对象增加了不同侧面的特性,为每个特性构造子类,通过委派机制增加到对象上。
外观模式客户端需要通过一个简化的接口来访问复杂系统内的功能,它提供一个同一的接口来取代一系列小接口的调用,相当于对复杂的系统做了一个封装,简化客户端的使用,便于客户端的学习
行为类模式:其一是策略模式
指对同一问题有不同的解答,客户端希望在不同的策略间切换。
例子:lab6猴子过河对策略的选择。
模板模式:做事情的步骤一样,但具体方法不同
solution:共性的步骤放到抽象类里去实现,差异化步骤在各子类中实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值