software construction复习知识点随笔(3)
代码的可理解性/可读性
度量标准:
- 名字的长度:标识符(类名,变量名,方法名等)的长度
- 度量方法:所有标识符的平均长度
- Name Uniqueness Ratio(UNIQ)命名独特比例
- 代码复杂度
- Line of Code(LoC)
- 注释的密度(百分比):MCOMM%。度量方式:MCOMM%=MCOMM/LOC
解决可读性:(对应上方问题)
- 命名规范
- 代码行的最大长度
- 注释
- 代码的布局:缩进、空行、对齐、分块等
- 避免多层嵌套——增加复杂度
- 文件和包组织
- IDE和打印时使用等宽字体
命名规范(Java):
- Package:小写
- 类和接口:大写首字母
- 方法:小写首字母,大写其余单词的首字母
- 变量:camel case:小写开头
- 常量:全部大写,下划线分开
- 不能用关键词命名
复用性:
面向复用编程:开发出可复用的软件。
基于复用的编程:利用已有的可复用软件搭建应用系统。
复用的类型:
1.白盒复用:源代码课件,可修改和拓展,可定制化程度高,对其修改增加了软件的复杂度,且需要对其内部充分的了解。
2.黑盒复用:源代码不可见,不可修改。特点是简单,清晰,但复用性差。
Delegation委派
委派是常见的复用形式,指一个对象请求另一个对象的功能
可用委派来取代继承:若子类只需要用父类中的一小部分方法,可不继承而委派来实现。
委派的类型:
- Decpendency:临时性的委派,作为某方法的参数放到List里。
- Association:永久性的委派:作为类的一个属性|变量。
- Composition:更强的委派:作为某一部分(如器官->人)
- Arregation:将委派的类放到了构造函数中
CPR原则(Composite Reuse Principle):
- 使用接口定义不同侧面的行为
- 接口间使用extends实现行为的扩展
- 类实现(implement)接口
白盒测试的原理和实现
白盒测试使用subclassing和overriding方法来实现扩展,且允许多对所有非private方法进行扩展,但一次只能有一个拓展,编译时会一起被编译。
重写蓝色部分:
黑盒框架的原理和实现
通过实现插件的接口来扩展,进行delegation。
特点:
- 允许扩展接口中展示的功能
- 支持多个扩展
- 更加模块化
- “平台” “end-user” framework
设计模式
分类:
- 创建型模式
- 结构型模式
- 行为类模式
结构性模式:Adapter适配器模式
将某个类/接口转换为client期望的其他形式。
通过增加一个接口,将已经存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
通过修改接口,让本来无法合作的类进行合作。
装饰器模式:为对象增加了不同侧面的特性,为每个特性构造子类,通过委派机制增加到对象上。
外观模式客户端需要通过一个简化的接口来访问复杂系统内的功能,它提供一个同一的接口来取代一系列小接口的调用,相当于对复杂的系统做了一个封装,简化客户端的使用,便于客户端的学习
行为类模式:其一是策略模式
指对同一问题有不同的解答,客户端希望在不同的策略间切换。
例子:lab6猴子过河对策略的选择。
模板模式:做事情的步骤一样,但具体方法不同
solution:共性的步骤放到抽象类里去实现,差异化步骤在各子类中实现。