5.1可维护性的度量与构造原则
一.可维护性的度量标准
(1).圈/环复杂度,即独立路径的数量——计算方法:分支点+1
(2).代码行数——最直观
(3).可维护性指数(MI):越高越好
二.模块化设计与模块化准则
1.五个评价模块化的标准
可分解性,可组合性。可理解性,可持续性,出现异常之后的保护
2.五个进行模块化设计的方法
直接映射,尽可能少的接口,尽可能小的接口,显式接口,信息隐藏
3.高内聚与低耦合
一般情况下,内聚度与耦合度的变化方向是相反的
三.面向对象的编程原则:SOLID
S->SRP(单一责任原则):ADT中不应有多于一个的原因使得一个类发生变化
O->OCP(开放-封闭原则):对扩展性的开放,对修改的封闭
L->LSP(李氏替换原则):参考第四章
I->ISP(接口聚合原则):一个接口尽可能多的覆盖相同的方法
D->DIP(依赖转置原则):不能强迫客户端依赖于他们不需要的接口,只提供必需的接口
5.2面向可维护性的设计模式
一.创建者模式
1.工厂方法模式
基本思想:当client不知道要创建哪个具体类的实例,或者不想在client代码中指明具体要创建的实例类型时,采用工厂方法。
以这个为例,在TraceFactory接口下有两种创建方法,我们定义两个不同的类去继承这个接口,然后根据实际用户的实际需要返回所需要的实例(在这个例子下,如果传入参数是file类型的,就返回FileTrace的对象,否则就返回SystemTrace的对象)
2.抽象工厂模式
基本思想:提供接口来创建一组相关/相互依赖的对象,但不需要指明其具体类
本质上是将多个产品的工厂方法组合在一起
二.结构模式
1.代理模式
基本思想:不希望某个对象被client直接访问,就访问代理对象(假对象)
在这个例子中,由于从磁盘中下载图片需要占用内存和时间,所以我们采用代理模式,先假装展示这个对象,当所需要的对象真的需要被展示时,再从磁盘中下载。
三.行为模式
1.观察者模式
具体的思路在图片中已经体现,不再重复说明
5.3面向可维护性的构造技术
一.基于状态的构造编程
1.基于自动机的编程
基本思想:将程序看成一个自动机来运行,设定状态并对步骤进行分解
2.状态模式
每一次实现都要判断是否达到最终状态,如果没有则进入下一个状态
如这里的
public boolean accept(){return state.accept();}//结束
public State getState(){return this.state;}//进入下一个状态
3.备忘录模式
基本思想:记住对象的历史状态,便于回滚
我们建立一个备忘录,在到达每一个状态的同时,我们将这个状态存到备忘录中,当我们需要进行状态回溯时,我们调用备忘录就可以得到保存的内容
二.基于语法的构造编程–正则表达式
一些基本操作如下:
补充:
(1).*代表可能有0个或多个
(2).?代表可能有0个或1个
(3).+代表可能有1个或多个