【腾讯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

智能推荐

SQL | 窗口函数 row number + partition by 排序_rownumber+partition+by-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏6次。目录1 背景2 SQL牛逼函数走起来2.1 Step12.2 SQL实现12.3 Step22.4 SQL实现22.5 补充-collect函数2.5.1 SQL语句3 头条面试SQL题3.1&nbs..._rownumber+partition+by

apollo芯片_ADAS/AD主控芯片研究:集成趋势下的短板与变革-程序员宅基地

文章浏览阅读1.4k次。佐思汽研发布《2020年ADAS/AD主控芯片产业研究报告》。随着L2渗透率越过15%之后,L2将走向普及阶段。L2.5车型将进入密集发布期,L3和限定场景的L4量产也已经不远。当汽车配置迈向高阶自动驾驶时,环境感知传感器开始大量安装,对主控芯片的算力和算法要求越来越高。资料来源:英飞凌单一类型的汽车处理器,无论是FPGA、CPU、GPU还是ASIC,都无法满足高阶自动驾驶车辆的需要..._apollo5芯片

EPSON RX8010SJ RTC 调试笔记之四, 报警中断功能 (Alarm Interrupt Function)_rx8010sj 调试-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏6次。硬件: EPSON RX8010 SJ功能描述:报警中断功能 (Alarm Interrupt Function) 基于日期, 星期中第几天,小时和分钟数据设定,产生中断事件。当报警中断事件产生时,AF 标志位会被置 "1", 引脚 IRQ1 电平被置低为 "0" . 当报警中断触发后的 1.46mS (最大时间), AF 标志位和 IRQ1 输出状态会被改变.IRQ1="L" 会保持,除非给予强制中止指令涉及相关寄存器..._rx8010sj 调试

谈谈java的并发容器、Queue_java并发queue作用-程序员宅基地

文章浏览阅读6.2k次。目录同步类容器并发类容器ConcurrentMap:支持高并发下线程安全。Copy-On-Write容器:最好在读多写少的情况下使用。并发Queue同步类容器同步类容器是线程安全的。//HashMap不是线程安全的,但是这样做之后就是线程安全的。Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>());Vector类 是在 java_java并发queue作用

VB6 加密解密字符串-程序员宅基地

文章浏览阅读1.7k次。Public Function EnCodeStr(ByVal password As String) As String Dim il_bit, il_x, il_y, il_z, il_len, i As Long Dim is_out As String il_len = Len(password) il_x =..._vb6 加密解密

轻量级网络论文:Searching for MobileNetV3及其PyTorch实现-程序员宅基地

文章浏览阅读7.8k次,点赞2次,收藏42次。Searching for MobileNetV3https://arxiv.org/abs/1905.02244[Pytorch] https://github.com/shanglianlm0525/MobileNetV3-Pytorch[Pytorch] https://github.com/shanglianlm0525/MobileNetV3-pytorch-1[Pytorch]...

随便推点

JSP-程序员宅基地

文章浏览阅读296次。1JSP概述1.1 什么是JSPJSP(Java Server Pages)是JavaWeb服务器端的动态资源。它与html页面的作用是相同的,显示数据和获取数据。 1.2JSP的组成  JSP = html + Java脚本(代码片段) + JSP动态标签 l :Java语句;l :Java表达式;l :Java定义类成员;

MessagePack 序列化格式-程序员宅基地

文章浏览阅读56次。2019独角兽企业重金招聘Python工程师标准>>> ..._messagepack解码粘包 c#

springboot2.0开发框架搭建_springboot2.0 hdfs-程序员宅基地

文章浏览阅读1.7k次。生成项目整合Mybatis+Druid1. pom.xml文件中添加( druid请使用最新版,老版本在springboot下测试有问题)2. application.yml文件中添加3. 配置自动扫描dao接口 (springboot启动文件**Application.java)4.自动生成CRUD代码整合Redis1. pom.xml文件中添加一下依赖2. appli..._springboot2.0 hdfs

蓝湖同步网盘:自动获取团队切图文件-程序员宅基地

文章浏览阅读556次。Hey,大佬们,安装蓝湖同步网盘,不用下载,即可自动获取团队切图文件,团队成员还能共享设计资源,避免文件丢失,了解一下?工程师和设计师等团队成员工作紧密,需要经常通过微信、QQ 接收团队项目相关的切图文件。文件一旦有修改,繁琐的沟通、反复地接收下载切图文件,会占用许多工作时间,不能高效集中地编程,甚至会因此导致加班。“蓝湖网盘”的出现,完美地绕开了这些弊端,直通罗马,让工程师摆脱繁..._蓝湖团队文件整体下载

SpringCloud微服务学习_fail-fast: true-程序员宅基地

文章浏览阅读217次。SpringCloud微服务pdf学习:https://download.csdn.net/download/chen_jia_hao/11263144SpringCloud微服务中文官方文档:https://springcloud.cc/SpringCloud微服务英文官方文档:https://spring.io/projects/spring-cloud/这里主要讲SpringCl..._fail-fast: true

让Source Insight的头文件和实现文件快捷键打开的方式_source insight打开头文件-程序员宅基地

文章浏览阅读5.7k次。source insight并没有提供这样的快捷键,有时候用着比较烦人。终于找到了方法:使用宏命令,并设置快捷键与之绑定。1、打开source insight,Project -> Open Project,打开Base项目,注:Base项目是source insight默认已经创建的。2、打开Utils.em文件,在该文件的末尾加入如下内容:/* cpp和hpp_source insight打开头文件

推荐文章

热门文章

相关标签