已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 空气动力学方程:RANS方程:湍流基本概念与特性技术教程
- 高中一年级下学期英语《Part 2 Cutural background》教学课件
- 12万吨脱酚棉籽蛋白项目可行性实施报告
- 农贸市场运营管理方案
- 2024年全国职业院校技能大赛高职组(人力资源服务赛项)考试题库(含答案)
- 2024年化工生产技术国赛备赛试题库600题(含答案)
- 如何解决“跑、冒、滴、漏”等质量常见问题
- 中班健康心理教案及反思
- 浙江省G12名校协作体2025届高三第一学期返校考试 历史试卷(含答案)
- 中班教案好玩的冰
- 2024年国家机关事务管理局机关服务中心招聘4人历年(高频重点复习提升训练)共500题附带答案详解
- 2024年部编新改版语文小学一年级上册第二单元复习课教案
- 工业机器人离线编程与应用-认识FANUC工业机器人
- 2023年职业教育行业分析报告及未来五至十年行业发展报告
- 人工智能在药品制造中的作用
- 降低消化内镜故障发生率
- 2023安徽省滁州天长市千秋街道办事处广陵街道办事处招聘社区专职工作者35人笔试历年典型考题及考点剖析附答案带详解
- 2024版房产代持协议书样本
- 林地权属证明书范本
- 马术俱乐部合作运营协议书
- 卫生监督协管试题库及答案
评论
0/150
提交评论