软件构造复习——面向可维护性的构造技术(PPT10)


一、软件的可维护性

在这里插入图片描述
软件维护的类型
纠错性、适应性、完善性、预防性

二、维修性的度量标准

可维护性的许多名称
在这里插入图片描述
在这里插入图片描述

一些常用的可维护性指标
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、模块化设计和模块化原则

在这里插入图片描述

设计的目标是将系统划分为模块,并通过以下方式在组件之间分配职责:
– 模块内高内聚 高内聚
– 模块间松耦合低回馈
§ 模块化降低了程序员在任何时候必须处理的总复杂性,假设:
– 功能被分配给将相似功能组合在一起的模块(关注点分离)
– 模块之间有小的、简单的、定义良好的接口(信息隐藏)信息隐藏
§ 内聚和耦合的原则可能是评估设计可维护性的最重要的设计原则

最好的设计在模块内具有高内聚(也称为强内聚)和模块之间的低耦合(也称为弱耦合)

耦合和内聚需要权衡
在这里插入图片描述

四、面向对象设计原则 :SOLID

五类设计原则
在这里插入图片描述

4.1 SRP(单一责任原则)

在这里插入图片描述
在这里插入图片描述
单一责任原则(一篇博客,讲的更好理解)

4.2 (面向变化的)开放/封闭原则(OCP)

在这里插入图片描述
关键的解决方案:抽象技术

软件实体(类、模块、函数等)应该对扩展开放,但对修改关闭“,即使用继承和组合/委托来改变类的行为

在这里插入图片描述
在这里插入图片描述

4.3 Liskov替换原则

在这里插入图片描述

“使用指向基类的指针或引用的函数必须能够在不知情的情况下使用派生类的对象”,即子类在代替其基类使用时应该表现良好

4.4 接口隔离原则(ISP)

在这里插入图片描述

不要强迫类来实现它们不能实现的方法(Swing/Java)
§ 不要用很多方法污染接口
§ 避免“胖”接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有多个方法的接口可以拆开,分成多个小的接口,需要的类实现自己想要的接口就可以了。一个类可以实现多个接口。

4.5 依赖转置原则

在这里插入图片描述

高级模块不应依赖于低级模块。
两者都应该依赖于抽象。
– 抽象不应该依赖于细节(抽象的不依赖于具体的模块)
– 细节应取决于抽象(具体应依赖于抽象)
应该使用大量的接口和抽象!

在这里插入图片描述

在这里插入图片描述
换句话说:
delegation的时候,要通过interface建立联系,而非具体子类

五、语法驱动的构造(正则表达式)

§ 一些程序模块以字节序列或字符序列的形式接受输入或产生输出,简单地存储在内存中时称为字符串,或流入或流出模块时称为流。

具体来说,一个字节或字符序列可能是如下的东西
在这里插入图片描述
在这里插入图片描述

5.1 语法成分

在这里插入图片描述
终端:语法中的字面字符串
§ 为了描述一串符号,无论它们是字节、字符还是从固定集合中提取的某种其他类型的符号,我们使用称为语法的紧凑表示。
§ 文法定义了一组字符串。 用语法定义一个“字符串”
– 例如,URL 的语法将指定作为 HTTP 协议中合法 URL 的字符串集。
§ 文法中的文字串称为终端终止节点、叶节点
– 它们被称为终端,因为它们是表示字符串结构的解析树的叶子。 语法解析树的叶子节点
——他们没有孩子,也不能再扩大。 无法再往下扩展
– 我们通常用引号来写终端,比如‘http’或‘:’。 通常表示为字符串

语法中的非终结符和产生式
§ 文法由一组产生式描述,其中每个产生式定义一个非终结符
– 非终结符就像一个变量,它代表一组字符串,而产生式是该变量在其他变量(非终结符)、运算符和常量(终结符)方面的定义。
– 非终结符是表示字符串的树的内部节点。
§ 文法中的产生式具有以下形式
– 非终结符 ::= 终结符、非终结符和运算符的表达式
§ 文法的非终结符之一被指定为根。
– 语法识别的字符串集是匹配根非终结符的字符串。
– 这个非终结符通常称为 root 或 start。

5.2 语法中的运算符

在这里插入图片描述

在这里插入图片描述
较高优先级
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【】是从里面任意选择一个

5.3语法中的递归

递归就是左边和右边出现同样字母的情况
A -> SAS
在这里插入图片描述
在这里插入图片描述

留意这里的’a‘+,+不是连接的意思了,这是出现大于或等一个!!!

在这里插入图片描述

将语法与字符串匹配可以生成一个分析树,该树显示字符串的各个部分如何对应于语法的各个部分。
– 解析树的叶子用终结符标记,代表字符串中已解析的部分。
——他们没有孩子,也不能再扩大。
– 如果我们将叶子连接在一起,我们会得到原始字符串。

在这里插入图片描述
在这里插入图片描述
总结:
这里的::=相当于等号 A::= BCD
这里字符或者字符串 都用单引号包住’ ‘
这里的变量直接用其名字写即可
变量和字符之间的连接什么也不用加 。 +只代表产生大于或等于一个的字符串。

5.4 Markdown和HTML

在这里插入图片描述

5.4正则语法和正则表达式

在这里插入图片描述
终结符和运算符的简化表达式可以写成更紧凑的形式,称为正则表达式

在这里插入图片描述

正则表达式去掉了终端周围的引号以及终端和运算符之间的空格,因此它只包含终端字符、分组括号和运算符字符。

正则表达式也简称为正则表达式。
– 正则表达式的可读性远不如原始语法,因为它缺少记录每个子表达式含义的非终结符名称。
– 但是正则表达式实现起来很快,而且很多编程语言中的库都支持正则表达式

正则表达式中的一些特殊算子

在这里插入图片描述
在这里插入图片描述
.匹配任意字符
.匹配.

5.5在Java中使用正则表达式

正则表达式广泛用于编程。
§ 在 Java 中,您可以使用正则表达式来操作字符串(参见 String.split、String.matches、java.util.regex.Pattern)。
§ 它们作为 Python、Ruby 和 JavaScript 等现代脚本语言的一流功能内置,您可以在许多文本编辑器中使用它们进行查找和替换。
§ 正则表达式是你的朋友!
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_50906780/article/details/118446709