第十章 面向可维护性的软件构造技术

本文探讨了软件维护的关键要素,包括修复错误提升性能、软件维护的四个特性,模块化设计原则如单一责任、开放封闭等SOLID准则,以及正则表达式的应用实例。通过实例阐述如何通过高内聚低耦合和接口隔离来增强软件可维护性。
摘要由CSDN通过智能技术生成

一.软件维护
1.修复错误,改善性能
2.纠错性,适应性,完善性,预防性
3.除了修复问题,修改中不能引入新的故障;最大的问题:修改后没有足够的文档记录和测试
4.软件演化:对软件进行持续的更新
二.可维护性的度量
在这里插入图片描述
度量复杂度:圈复杂度、代码行数
区域个数:流程图环的个数+1个开放区(指其他)/判断语句个数+1/边-点+2
->区域个数等于测试用例个数
有多少个独立算符(+…)和算子(a,b…)
三.模块化设计与模块化原理
1.做到模块化:模块内部高内聚(关系大的放一起,关系小的分开),模块之间低耦合;分离关注点:模块之间通过规约制订规范,通过接口进行交互;信息隐藏
(1)可分解性:将问题分解为各个子问题->使模块之间依赖关系最小
(2)可组合性:将模块组合起来形成新的系统->使模块在不同环境下复用
(3)可理解性
(4)可持续性:变化最小,模块提供的所有服务由统一模块提供
(5)异常后的保护:将异常限制在小范围内
2.模块设计
(1)直接映射:模块的结构与现实世界中问题领域的结构保持一致
(2)接口少:模块应尽可能少的与其他模块通讯
(3)接口小:如果两个模块通讯,那么它们应交换尽可能少的信息
(4)外部接口:当A与B通讯时,应明显的发生在A与B的接口之间
(5)信息隐藏:经常可能发生变化的设计决策应尽可能隐藏在抽象接口后面
在这里插入图片描述
右边的属于高内聚低耦合,符合题意
四.SOLID准则
在这里插入图片描述
1.单一责任原则
(1)ADT中不应该有多于1个原因让其发生变化,否则就拆分开->一个类,一个责任(不要过于考虑SRP)
2.开放-封闭原则(不要过于考虑)
(1)对扩展性的开放:模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化
(2)对修改的封闭:模块自身的代码是不应被修改的,扩展模块行为的一般途径是修改模块的内部实现,如果一个模块不能被修改,那么它通常被认为是具有固定的行为->针对抽象(继承、组合/委托)
例:
在这里插入图片描述
若Server是个具体类的话,一旦要改变Server,客户会受到影响->改成调用抽象d的Server,抽象的部分在Server改时不需要变,通过构造一个抽象的Server类:AbstractServer,该抽象类中包含针对所有类型的Server都通用的代码,从而实现了对修改的封闭;当出现新的Server类型时,只需从该抽象类中派生出具体的子类ConcreteServer即可,从而支持了对扩展的开放
例子便于理解:
在这里插入图片描述
在这里插入图片描述
4.接口隔离原则
(1)不能强迫客户端依赖于它们不需要的接口:只提供必需的接口(接口污染)
在这里插入图片描述
5.依赖倒置原则
(1)高层模块不应该依赖于低层模块,二者都应该依赖于抽象
(2)抽象不应该依赖于实现细节,实现细节应该依赖于抽象
在这里插入图片描述
左面的图越下层价值越低,不能让高价值的东西依赖于低价值的东西,因此应该构建一个接口,每一层变化都不对其他层产生影响
delegation的时候,要通过interface建立联系,而非具体子类
例子:
在这里插入图片描述
在这里插入图片描述
这里Reader,Writer两个接口可以随意换成其他类,用接口类来建立联系
在这里插入图片描述
五.语法驱动的构造
1.终止结点,叶子结点,终止符->无法再扩展
2.产生式结点,非终止结点
3.操作符
基本操作:
(1)连接操作:x :: =y z->x和yz匹配,连接y和z
(2)重复:x :: =y*
(3)选择(或):x :; =y|z->x=y或z
其他操作:
(1)可选:x :: =y?->y可有可无
(2)至少1个y: x ::= y+
(3)x ::= [a-c] is equivalent to x ::= ‘a’ | ‘b’ | ‘c’
(4)x ::= [aeiou] is equivalent to x ::= ‘a’ | ‘e’ | ‘i’ | ‘o’ | ‘u’
(5)取反:x ::= 【^a-c】 is equivalent to x ::= ‘d’ | ‘e’ | ‘f’ | …
优先级:* ? +优先级最高,连接次之,| 最低
4.语法递归形式
5.语法树
六.正则语法和正则表达式
在这里插入图片描述
\代表转义字符
七.正则表达式在java中的使用
1.Pattern对象是对regex正则表达式进行编译之后得到的结果
2.Matcher对象:利用Pattern对输入字符串进行解析
例子:

在这里插入图片描述
第n个括号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值