【腾讯TMQ】【浅谈Chromium中的设计模式(二)】——pre/post和Delegate模式_pre post-程序员宅基地

技术标签: 测试分析  

Pre/post

请注意pre/post不能算是典型意义上的设计模式,Pre/post是契约式编程思想的概念。但是在从chromium代码中确实能看到不少他们的身影。

契约式编程中的PRE/POST

契约式编程(英语:Design by Contract,缩写为DBC)在Wiki上的解释:契约式编程是一种设计计算机软件的方法。这种方法要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。这种方法的名字里用到的“契约”或者说“契约”是一种比喻,因为它和商业契约的情况有点类似。

在《程序员修炼之道:从小工到专家》中专门有一条讲的就是契约式编程(按合约设计)。

DesignbyContract的核心是断言(assertion)。所谓“断言”,是指永远为真的布尔型语句,如果不为真,则程序必然存在错误。通常情况下,检查断言的时机,应该局限于调试(debug)阶段,而不是代码的实际执行阶段。实际上,完成的程序永远不应期望断言会被检查。

DesignbyContract使用了三类断言:后继条件(post-conditions),前提条件(pre-conditions),以及不变量(invariants)。其中前驱条件与后继条件都是针对操作(operation)而言的。

前提条件preconditions:acondition that must hold up on invocation of a function在方法被调用之前

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TMQ1225/article/details/79882152

智能推荐

经济_couldn't acquire block of ids-程序员宅基地

文章浏览阅读620次。开网店是众多创业的首选,凡是懂一点电脑的人都可以再网上开店,同时网店的门槛也很低,但是我们都知道要想真正把网店经营好就不是一件简单的额事情了,而且现在网店的竟争压力还在不断加大,如果你没有优势,是很难再众多商家中脱颖而出的。  第一技:找准平台   网络上经常会有人问淘宝和天猫有什么区别,因此在解释如何选择适合自己的电商平台之前,首先要明确两个概念。   一是B2C。所_couldn't acquire block of ids

HTML DOM中setInterval()和clearInterval()、setTimeout()和clearTimeout()_clearinterval用法html-程序员宅基地

文章浏览阅读2.4k次。HTML DOM setInterval()和clearInterval() 方法setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。clearInterval(_clearinterval用法html

一道做起来很舒服的题-程序员宅基地

文章浏览阅读524次。GroupingTime Limit: 2 Seconds Memory Limit: 65536 KB Suppose there are N people in ZJU, whose ages are unknown. We have some messages about them. Thei-th message shows that the age of

OCR文字检测框的合并_ocr 文本分割行合并-程序员宅基地

文章浏览阅读4.8k次,点赞16次,收藏34次。OCR文字检测框的合并在我们使用文字检测模型的对文本进行检测的时候,可能效果不能如愿以偿,如:某行文本会存在着多个检测框,这对于我们后续做OCR识别过程中语义连贯带来一系列的困扰,本文主要是解决针对文字检测得到的文字框,进行合并。1.如下是一张原始图片:2.使用常见的文字检测模型(craft,DBNet,PSENet)对该图片进行文字检测得到的效果如下:3. 使用如下代码对文字框进行x轴上的合并,得到的效果如下:![在这里插入图片描述](https://img-blog.csdnimg.cn/_ocr 文本分割行合并

2017/09/03 简单搭建SSM框架_myeclipse2017 搭建ssm框架-程序员宅基地

文章浏览阅读489次。简单搭建SSM框架1.由于熟悉了使用Maven,导包太麻烦了,所以还是使用Maven+Spring+Spring MVC+Mybatis的方式简单搭建一个SSM框架。2.数据库使用的是Mysql,想要使用Oracle或者其它数据库的,可以在POM.xml中修改相关的依赖包,还有修改jdbc.properties的相关配置即可。3.现在开始简单介绍一下搭建的相关过程。a.安装mave_myeclipse2017 搭建ssm框架

CPPUNIT 单元测试的一个源代码-程序员宅基地

文章浏览阅读91次。都在附件中了。参考:http://blog.csdn.net/bizleoyang/archive/2009/03/05/3958853.aspx_cppunit单元测试代码

随便推点

FLUENT-UDF日记-2-DEFINE_DELTAT_fluent 时间步长可以编程控制吗-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏7次。day 22.2.2 DEFINE_DELTATexample2.2.2 DEFINE_DELTATDEFINE_DELTAT,可用于在解决瞬态问题期间控制时间步长的大小。仅当从ANSYS FLUENT的Run Calculation 任务页面的Time Stepping Method下拉列表中选择了Adaptive时,才能使用此宏example#include "udf.h" DEFI..._fluent 时间步长可以编程控制吗

Flink standone HA模式部署文档_log4j-core-2.12.1.jar kafka-clients-程序员宅基地

文章浏览阅读182次。Flink standone HA模式部署文档一、准备工作1、机器10.0.3.192(master)10.0.3.194(slave1)基本环境准备:JDK1.8 以上的版本,同时需要配置环境变量 JAVA_HOME。ssh 服务安装并启动2.安装包和依赖包flink的安装包:flflink-1.11.2-bin-scala_2.11.tgzhttps://www.apache.org/dyn/closer.lua/flflink/flflink-1.11.2/flflink-1.1_log4j-core-2.12.1.jar kafka-clients

【13位CEO访谈实录】疫情对科技企业带来的影响及应对-程序员宅基地

文章浏览阅读7.2k次。13位CEO访谈实录:疫情对科技企业带来的影响及应对本文为“苏宁零售技术研究院”原创,内容来源于苏宁零售技术研究院&江苏省互联网协会联合调研。致谢江苏省互联网协会及13家成员企业..._关于疫情对公司发展运行的影响的访谈大纲

Duilib学习笔记《02》—界面布局_duilib 自绘控件-程序员宅基地

文章浏览阅读1.1k次。界面描述XML文件Duilib主要是通过XML来进行界面的布局配置,程序通过读取并解析XML文件来创建对应的窗体。DuiLib的页面布局分为三类:窗体(Window)、容器(Contain)和控件(Control)。顾名思义窗体就是要创建的窗口,容器则相当于是窗体内的一个子窗体,可以在容器内添加容器或者控件,当然定义的位置也都是相对与容器内的左上顶点;控件就是一些常用的Button、Edit、_duilib 自绘控件

win10家庭版找不到组策略gpedit.msc的解决方法_win10家庭版gpedit.msc找不到-程序员宅基地

文章浏览阅读853次,点赞2次,收藏2次。win10家庭版本不提供本地组策略编辑器的,但是系统有此功能,并对此功能进行了限制,接下来我就来介绍一下如何开启。_win10家庭版gpedit.msc找不到

管道通信(使用使用popen和pclose函数可以简洁的控制管道)_pclose函数怎么用-程序员宅基地

文章浏览阅读1.9k次。函数原型:FILE *popen(const char * command ,const char *mode)int pclose(FILE * stream)注意点:使用popen和pclose函数可以简洁的控制管道,不需要更多的代码,但是降低了程序员对管道的控制能力参数commend是shell命令参数mode是一个字符指针,r或W,分别表示popen函数的返回值_pclose函数怎么用