第四章 设计准则1-正确性和健壮性.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
提高健壮性的参数传递技术 如 int computeArea(int aLength, int aBreadth){…} 如果可行,捕获在类中的参数约束 int computeArea(RectangleDimension a RectangleDimension) 在方法注释中说明所有的参数约束 aLength > 0 and aBreadth > 0 and aLength >= aBreadth 提高健壮性的参数传递技术 调用者遵循参数的显示要求 问题是方法的设计者没有控制调用者 在方法代码内首先检查约束 If (aLength <= 0)… 如果预计这种情况将会出现,则抛出异常 否则,如果可能就中止程序 否则,如果返回的默认值在上下文间有意义,就将其返回,并且产生警告或日志 检查参数值是否违反约束的方法 如果清楚地指定了参数约束,那么不用检查一些假设的状态,并且也没有可靠的方法来弥补原本不应出现的方法调用 错误安全的态度(fail-safe attitude),检查所有约束都得到满足。 在类中捕获参数 在类中包装参数,而不是按原始形式使用它们 Replace int computeArea( int aLength, int aBreadth ) {..} with int computeArea( Rectangle aRectangle ) {..} -- where class Rectangle { … Rectangle( int aLength, int aBreadth ) { if( aLength > 0 ) this.length = aLength; else ….. } … } 包装参数 只在一个地方——Rectangle类中进行长度和宽度的错误处理 好处:这种处理改进了设计与维护性 不足:产生了类的激增。 好的选择是让Rectangle构造方法成为私有的,并且使用静态“工厂”方法来获得Rectangle对象,如: Static Rectangle getRectangleObject(….); 强化意图 通过防止设计和实现中的错误来提高健壮性 通过引入参数必须是实例的类来捕获参数约束 小结 设计或编码的正确性 符合需求 通常,存在许多正确的设计 设计或编码的健壮性 容忍错误 -- 用户的错误 -- 开发者的错误 设计准则I 正确性和健壮性 正确性和充分性 正确性:每个项目都要满足指定的需求,然后一起满足所有应用程序的需求 问题越明确,就能提供越精确的设计来解决问题 设计的正确性通常是指充分性 实现正确性的正规方法是依靠数学逻辑 实现正确性的途径 非正式方法:判断设计是否满足所需的功能 正式方法:包含了用数学逻辑的方法来分析变量变化的方向 设计进入详细设计阶段时,经常采用正式方法来判断正确性 实现正确性的途径 非正式方法:判断设计是否满足所需的功能 正式方法:包含了用数学逻辑的方法来分析变量变化的方向 设计进入详细设计阶段时,经常采用正式方法来判断正确性 实现正确性的非正式方法 要求我们在宣布设计正确之前必须完全理解它 设计和实现必须具有可读性 由于人类大脑在处理复杂问题方面有局限性,所以要进行模块化的设计,即将设计分成独立的可理解的部分。 不断进行简化和模块化,直到设计使人信服 充分设计的术语和理论基础 一个足以实现需求的设计 一个正确的设计 有时称为 … 设计必须完全可理解 接下来 … 设计非常模块化 达到这个目标的常用方法是 … 最小目标 实现正确性的正式方法 常常基于在严密的控制下跟踪变量的变化,一般会指定一个不变式 不变式在变量值之间表示的是一种不变关系 用在类级别设计中的不变式称为类不变式 -- 包含变量 mileage, VehicleID, value, originalPrice, 和 type:? mileage > 0 mileage < 1000000 vehicleID 至少有 8 个字符 value >= -300 ($300 是一辆报废汽车的处理价格) originalPrice >= 0 ( type == “REGULAR” && value <= originalPrice ) || ( type == “VINTAGE” && value >= originalPrice ) Automobile 类的不变式 实现正确性的正式方法 Automobile类的方法要考虑这些不变式,因此将变量设为私有,并且只能通过公有的存取(accessor)方法才能改变他们的值。 可以对存取方法进

文档评论(0)

boss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档