一、基于状态的编程

1、状态模式

对象有一个状态属性,并且可以变化。

形式如下,context是某一个对象,它有属性state(状态),状态在一定的条件下会跳转至另一状态;用一个State接口来表示状态、定义状态间的转换:

举个例子,下图是一个有状态的ADT,他可以变换自己的状态(move):

状态类如下,每一个状态继承一个状态接口,有状态转换(move)、是否接收状态(accept)方法:

注意,这里的状态类使用单例模式:1、构造函数要是private的;2、变量是静态的。

2、备忘录模式

记录某对象的历史状态,以便于“回滚”。

形式如下,一个目标ADT(Originator),需要记录它的各个状态;一个Memento了,这个类记录状态;Caretaker负责管理各个历史状态:

举个例子,originator类如下,它可以保存状态(创建一个Memento)、恢复到过去的某个状态(restore):

memento类如下,记录某一时刻的状态:

caretaker类如下,管理一系列的历史状态:

客户端代码如下:

二、基于语法的构造

使用语法判断字符串是否合法。

1、语法的构成

由非终止节点和终止节点构成,非终止节点可以派生出新的字符串,例如下图的hostname就是非终止节点,’mit.edu’等就是终止节点:

2、语法操作符

最基础的仨:

高级一点的:“?”代表0个或1个;“+”代表一个或多个;“[…]”代表这个范围的字符,例如[a-c]代表a、b、c,[ae]代表a、e;“[^…]”代表不在这里的字符,例如[^a-c]代表除了abc之外的字符。

3、语法中的递归、语法解析树

语法可以为递归的形式,如下图的hostname即是递归的:

其语法树形式如下:

以MarkDown语言和HTML语言为例,MarkDown语言中,被两个“_”夹在中间的字符串会被解析成斜体;HTML语言中,被<i>和</i>夹在中间的是斜体,其语法规则、语法树如下:

4、正则语法

如果一个语法规则可以被表示为一个产生式并且不包含任何非终止节点,这就是正则语法。例子如下,下图的url可以被一句不含非终止节点的表达式表示,故是正则的:

正则表达式就是去掉了普通表达式的空格和引号,变得更简洁、难懂,举个例子,如果想要去掉下图中所有被含有<>的字符串:

可以这样构造regex:

正则表达式中有一些特殊意义的字符,例如”.”,可以代表任意一个字符。当想要在正则表达式中匹配“.”这个字符的话,需要在前面加上“\”。

正则表达式中一些简写:

5-3 面向可维护性的构造技术相关推荐

  1. Domain Specific Compiling: 领域编译器发展的前世今生 • 面向AI的编译技术

    from: 领域编译器发展的前世今生 • 面向AI的编译技术 作者简介: 张朔铭,博士研究生,正在中国科学院计算技术研究所崔慧敏研究员指导下攻读计算机系统结构博士学位,目前主要的研究方向是AI编译. ...

  2. 面向全栈的技术管理(多图)

    3月25日周六,在中生代和飞马网的技术嘉年华上,斗胆披上吹牛的嫌疑,分享了面向全栈的技术管理,现赘述如下. 研发管理有着广义和狭义的定义,总的来说,研发管理就是在研发体系基础之上,借助信息平台进行的团 ...

  3. 软件构造学习笔记(九)面向复用的软件构造技术

    目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...

  4. 软件构造(九) 面向复用的软件构造技术

    1.什么是软件复用 软件重用是使用现有软件组件实现或更新软件系统的过程. 软件复用有两方面: 面向复用编程:开发出可复用的软件 基于复用编程:利用已有的可复用软件搭建应用系统 为什么复用: 降低成本和 ...

  5. 4-2 面向复用的软件构造技术

    1.设计可复用的类 1.1 行为子类型和LSP 子类型: ​相比于父类型,要有相同或更强的ADT(前置条件变弱或后置条件变强.更强的不变量): ​在java中表现为:子类型可以增加方法:子类型中重写的 ...

  6. 面向复用的软件构造技术知识点总结与思考

    一.复用 1.复用种类: 白盒复用:源代码可见,复制已有代码到正在开发的系统,进行修改和扩展 黑盒复用:源代码不可见,不能修改,只能通过API接口来使用 1)源码级别复用 2)模块级别复用:类,接口 ...

  7. 每个前端都需要知道这些面向未来的CSS技术

    写在前面 前端技术日新月异,我们需要不断学习来更新自己的前端知识并运用到自己的项目中.这次笔者整理一些未来普及或者现在同学们可能已经用到的CSS特性,包括SVG图标.滚动特性.CSS自定义属性.CSS ...

  8. 华为开发者联盟申请鸿蒙开发者Beta版,华为面向开发者发布鸿蒙技术测试版

    中国青年报客户端讯(中青报·中青网记者 张均斌)12月16日,华为在北京举办华为开发者日暨HarmonyOS 2.0(鸿蒙系统2.0版)手机开发者Beta版发布活动.开发者可访问华为开发者联盟官网,申 ...

  9. MACOM面向CWDM4推出L-PIC™技术方案,助力云数据中心和5G光学连接发展

    MACOM近期宣布推出 MAOT-025402 CWDM4发射器光学组件,这款组件是MACOM面向100Gbps CWDM4的L-PIC™(集成有激光器的硅光子集成电路)解决方案的一部分,凭借获得专利 ...

最新文章

  1. etcd 笔记(08)— 基于 etcd 实现分布式锁
  2. java try-with-resource语句使用
  3. C# 枚举在项目中的应用总结
  4. postgres 支持的线程数_为什么 Java 坚持多线程不选择协程?
  5. asp.net mvc 用Redis实现分布式集群共享Session。
  6. NYOJ题目 263 精挑细选
  7. 由c语言转向c++,我们需要做什么?
  8. Android SQLite (二) 基本用法
  9. 中英文对照 —— 计算机编程
  10. ELK温度监控--lmsensorsbeat
  11. DSP技术:基于TMS320F28027芯片的温度测量系统
  12. 华为主题引擎怎么下载_华为主题动态引擎
  13. erfc怎么用计算机计算,erfc(erfc函数如何计算)
  14. win10系统怎么查看密钥?
  15. Android手机定位案例代码
  16. 百度Uditor富文本编辑器使用以及图片不显示问题
  17. hexo添加文章更新时间
  18. 判断字符串子序列【python】
  19. 浅析供应链金融业务发展态势及提升路径
  20. 三大框架分别是Spring+SpringMVC+Mybatis ,这些东西必须融汇贯通

热门文章

  1. HDU1024 Max Sum Plus Plus
  2. Suse发生了错误Access denied for user #39;#39;@#39;localhost#39; toamp;
  3. C# 反射机制(转)
  4. 我的博客园开张了,记录每天学习,工作。
  5. 设计模式全解析 23种
  6. 解决ubuntu下修改环境变量profile后报错,很多常用命令都用不了
  7. Quartz定时任务调度机制解析(CronTirgger、SimpleTrigger )
  8. 融云开发案例核心代码分享
  9. 送专利啦~~ .Net高阶异常处理之TopLevelEH
  10. JavaScript:利用StringBuffer类提升+=拼接字符串效率