软件构造 第六章第三节 面向可维护的构造技术

第六章第三节
面向可维护的构造技术

基于状态的构造技术

状态模式(State Pattern)

备忘录模式(Memento Pattern)

Grammar-based construction

  • 使用grammar判断字符串是否合法,并解析成程序里使用的数据结构
  • 正则表达式
  • 通常是递归的数据结构

terminals 终止节点、叶节点

nonterminal 非终止节点(遵循特定规则,利用操作符、终止节点和其他非终止节点,构造新的字符串)

三个基本语法的操作符:

连接,不是通过一个符号,而是一个空间:

x ::= y z //x等价于y后跟一个z

重复,以*表示:  

x ::= y* // x等价于0个或更多个y

联合,也称为交替,如图所示 | :  

x ::= y | z //x等价于一个y或者一个z

三个基本操作符的组合:

可选(0或1次出现),由?表示:

x ::= y? //x等价于一个y或者一个空串

出现1次或多次:以+表示:

x ::= y+ //x等价于一个或者更多个y, 等价于 x ::= y y*

字符类[…],表示长度的字符类,包含方括号中列出的任何字符的1个字符串:

x ::= [abc] //等价于 x ::= ‘a‘ | ‘b‘ | ‘c‘

否定的字符类[^…],表示长度,包含未在括号中列出的任何字符的1个字符串:

x ::= [^abc] //等价于 x ::= ‘d‘ | ‘e‘ | ‘f‘ | ... (all other characters in Unicode)

以URL为例构造语法树:

还可以有递归定义:

正则语法与正则表达式

举例子:

原文地址:https://www.cnblogs.com/masteryellow/p/9215527.html

时间: 2024-10-23 14:23:19

软件构造 第六章第三节 面向可维护的构造技术的相关文章

【软件构造】第六章第一节 可维护性的度量与构造原则

第六章第一节 可维护性的度量与构造原则 本章面向另一个质量指标:可维护性--软件发生变化时,是否可以以很小的代价适应变化? 本节是宏观介绍:(1)什么是软件维护:(2)可维护性如何度量:(3)实现高可维护性的设计原则--很抽象. Outline 软件的维护和演化 可维护性的常见度量指标 聚合度与耦合度 面向对象五大原则SOLID 单一职责原则SRP(Single Responsibility Principle) 开放封闭原则OCP(Open-Close Principle) 里式替换原则LSP

软件构造 第三章第三节 抽象数据型(ADT)

软件构造 第三章第三节 抽象数据型(ADT) Creators(构造器): 创建某个类型的新对象,?个创建者可能会接受?个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型.可能实现为构造函数或静态函数.(通常称为工厂方法) t* ->  T 例子:Integer.valueOf( ) Producers(生产器): 通过接受同类型的对象创建新的对象. T+ , t* -> T 例子:String.concat( ) Observers(观察器): 获取抽象类型的对象然后返回一个不同类

软件构造 第七章第三节 断言和防御性编程

第七章第三节 断言和防御性编程 断言:在开发阶段的代码中嵌入,检验某些"假设"是否成立.若成立,表明程序运行正常,否则表明存在错误. 可用于检查: 内部不变量: 表示不变量: 控制流不变量 方法的前置条件 方法的后置条件 断言主要用于开发阶段,避免引入和帮助发现bug 实际运行阶段, 不再使用断言 软件发布阶段,禁用断言避免影响性能. 断言?Correctness 错误/异常处理?Robustness Defensive Programming 对来自外部的数据源要仔细检查,例如:文件

【软件构造】第三章第三节 抽象数据型(ADT)

第三章第三节 抽象数据型(ADT) 3-1节研究了"数据类型"及其特性 ; 3-2节研究了方法和操作的"规约"及其特性:在本节中,我们将数据和操作复合起来,构成ADT,学习ADT的核心特征,以及如何设计"好的"ADT. Outline ADT及其四种类型 ADT的基本概念 ADT的四种类型 设计一个好的ADT 表示独立性 ADT的特性 不变量 表示泄露 抽象函数AF 表示不变量RI 以注释的形式撰写AF.RI Notes ## ADT及其四种类型

【软件构造】第六章第二节 可维护的设计模式

第六章第二节 可维护的设计模式 Outline 创造性模式:Creational patterns 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 结构化模式:Structural patterns 桥接模式(Bridge Pattern) 代理模式(Proxy Pattern) 组合模式(Composite Pattern) 行为化模式:Behavioral patterns 中介者模式

【软件构造】第七章第三节 断言和防御性编程

第七章第三节 断言和防御性编程 本节:第2种技术--断言.防御式编程 Outline 断言 什么是断言 断言的应用场景 防御式编程(不是考点,不加叙述) Notes: ## 断言 [什么是断言] 作用:允许程序在运行时检查自己,测试有关程序逻辑的假设,如前置条件.后置条件.内部不变量.表示不变量.控制流不变量等 目的: 为了在开发阶段调试程序.尽快避免错误 使用阶段: 断言主要用于开发阶段,避免引入和帮助发现bug 实际运行阶段, 不再使用断言 软件发布阶段,禁用断言避免影响性能. [应用场景]

第六章--爆破软件

爆破其实很简单,最起码比你能一下把你家的牙膏给全挤出来要容易多了.你只要先到大街上买几根雷管,然后放到你的显示器上再点着就OK了(不难吧,记的点着后跑远点儿) 爆破的原理我也说过了,相信你很容易就能理解了.我们今天就具体讲一下如何找到那个关键跳转以及如何才能买到即便宜又好用的雷管... 爆 破一个软件一般只需要很少的几个步骤,首先先看一下其有无加壳,有的话是用何工具加的壳,知道了以后用相应的工具将其脱掉或进行手工脱壳,参考以有教程. 接着我们就可以对脱过壳之后的软件来开刀了.你有两种选择,用W3

【软件project】之第五、六章总结

软件project的前几章各自是软件计划.需求分析.软件设计.整体的都规划好了以后,就该着手去实践了. 所谓的理论体系足够强大了以后,实践就显得尤为轻松.我们设计软件,实践当然就是用我已经计划好的语言去编写我们须要做的软件,那么,这个过程就叫做"程序编写".. [概括]在程序编写这一章,视频中主要环绕程序编写的一些基础.编写方法.还有编写完毕后检測的过程. 总结下来就是首先我们编敲代码之前要有一些主要的东西.比方说,我们所使用的语言,它就相当于我们的工具,它表明了"用什么做&

【软件构造】第二章第二节 软件构造的过程、系统和工具

第二章第二节 软件构造的过程.系统和工具 Outline 广义的软件构造过程 编程 静态代码分析 动态代码分析 调试与测试 重构 狭义的软件构造过程 构造系统:经典BUILD场景 构造系统的组件 构造过程和构造描述 Java编译工具 子目标和结构变体 构造工具 Notes ## 广义的软件构造过程 [编程(Coding)] 开发语言:如Java.C.Python 使用IDE(集成开发工具)的优势(组成) 方便编写代码和管理文件(有代码编辑器,代码重构工具.文件和库(Library)管理工具) 能