已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DesignbyContractPractice,郭东伟,LanguageSupportinC/C+,和其他语言相比,C/C+特别注重效率,因此不受任何程序员控制的运行期内部检查机制如:指针检查、数组下标检查、运行期类型检查等断言的使用(非关键字)assertASSERT,assert()用法,assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行一般在Debug版有效,在Release版不起作用用法:在函数开始处检验传入参数的合法性每个assert最好只检验一个条件不要使用有副作用的语句assert和后面的语句应空一行,以形成逻辑和视觉上的一致感有的地方,assert不能代替条件过滤,例子,doublesqrt(doublex)assert(x=0);/pre-condition/././.assert(fabs(y*y-x)0./Settherefreshinterval,如:,Postconditions,Postconditionsarebestimplementedasasserts,whetherornottheyarespecifiedinpublicmethods.,/ReturnsaBigIntegerofvalue(this-1modm)publicBigIntegermodInverse(BigIntegerm)if(m.signum0andprecisionRequired10e-9,ensureabs(answer*answer-x)10e-15,keywordsrequireelseareusedforpreconditions,andortheoriginalandthenewpreconditions,keywordsensurethenareusedforpostconditions,andandtheoriginalandthenewpostconditions.,Eiffel的例子,componentCUSTOMER_MANAGERcount:INTEGERid_active(an_id:CUSTOMER_ID):BOOLEANadd(a_customer:BASIC_CUSTOMER_DETAILS)requireid_not_already_activenotid_active(a_customer.id)ensurecount_increasedcount=oldcount+1customer_id_now_activeid_active(a_customer.id)name_for(an_id:CUSTOMER_ID):STRINGrequireid_active:id_active(anid)set_name(an_id:CUSTOMER_ID;a_name:STRING)requireid_active:id_active(anid)ensurename_set:name_for(an_id).is_equal(a_name)invariantcount_never_negative:count=0end,Effiel运行时检查,Stoppedinobject0 xE96978Class:CUSTOMER_MANAGERFeature:addProblem:PreconditionviolatedTag:id_not_already_activeArguments:a_customer:BASIC_CUSTOMER_DETAILS0 xE9697CCallStack:CUSTOMER_MANAGER:addWascalledbyCUSTOMER_MANAGER_UIFchange_customer,提前崩溃原则,尽早在错误点崩溃便于发现错误便于定位错误不回避错误,避免鸵鸟态度前置条件和后置条件处进行检查断言与单元测试,错误和异常,错误Error应该预料到,一般能在调用的上一级解决函数调用返回值检查系统调用状态检查异常Exception不能预料原因如无法打开必须的文件网络传输错误通常无法在本地解决,以至于不能预计会在调用层次的哪一级(直到用户交互)解决严重失效Fault不能预料出现,而且可能在任何地点出现内存溢出外部硬件错误通常无法在程序内解决,异常处理,非结构化异常处理Ifthen就地处理结构化异常处理throwtrycatch可以以类的方式定义异常的类别和层次,重新审视DbC,调用者(应用程序等)和被调用者(库函数、组件库等)是平等的,都有权利和义务的说明。检查前置条件是一种权利;而传统上模块中检查错误被认为是一种义务If(pointer=NULL)assert(pointer!=NULL)当出现错误,也就是契约(特别是前置条件)遭到破坏时,通常需要先检查调用者,重新审视DbC,明确错误和异常的关系契约遭到破坏,是一种错误满足前置条件下,无法正常得到结果,是一种异常,需要抛出设计接口必须设计契
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖北武汉汉口学院高层次人才招聘考试参考题库及答案解析
- 2026湖北武汉硚口区公立初中招聘初中教师7人笔试备考题库及答案解析
- 2026江苏南京大学化学学院助理招聘考试备考题库及答案解析
- 2026中国西域研究中心面向社会招聘5人笔试备考试题及答案解析
- 2026年言语治疗干预方法培训
- 2026四川安和精密电子电器股份有限公司招聘综合维修电工1人笔试参考题库及答案解析
- 2026秋季福建泉州市晋江市平山中学教师招聘意向摸底考试备考题库及答案解析
- 2026四川能投综合能源有限责任公司员工招聘19人笔试备考题库及答案解析
- 2026上海交通大学医学院招聘85人笔试参考题库及答案解析
- 2026新疆第一师阿拉尔市大学生乡村医生专项计划招聘13人笔试备考题库及答案解析
- 柴油维修技术培训课件
- 安全附件管理制度规范
- 2026院感知识考试题及答案
- 《红楼梦》导读 (教学课件) -高中语文人教统编版必修下册
- 室外供热管道安装监理实施细则
- 腰背部推拿课件
- 工程转接合同协议
- 通信管道施工质量管理流程解析
- 商场经理2025年终工作总结(二篇)
- 2026年神木职业技术学院单招职业技能测试题库含答案
- 化肥产品生产许可证实施细则(二)(磷肥产品部分)2025
评论
0/150
提交评论