第四章 设计准则1-正确性与健壮性_第1页
第四章 设计准则1-正确性与健壮性_第2页
第四章 设计准则1-正确性与健壮性_第3页
第四章 设计准则1-正确性与健壮性_第4页
第四章 设计准则1-正确性与健壮性_第5页
已阅读5页,还剩33页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计准则设计准则I正确性和健壮性正确性和健壮性正确性和充分性正确性和充分性 正确性:每个项目都要满足指定的需求,正确性:每个项目都要满足指定的需求,然后一起满足所有应用程序的需求然后一起满足所有应用程序的需求 问题越明确,就能提供越精确的设计来问题越明确,就能提供越精确的设计来解决问题解决问题 设计的正确性通常是指充分性设计的正确性通常是指充分性 实现正确性的正规方法是依靠数学逻辑实现正确性的正规方法是依靠数学逻辑实现正确性的途径实现正确性的途径 非正式方法:判断设计是否满足所需的非正式方法:判断设计是否满足所需的功能功能 正式方法:包含了用数学逻辑的方法来正式方法:包含了用数学逻辑的方法来分

2、析变量变化的方向分析变量变化的方向 设计进入详细设计阶段时,经常采用正设计进入详细设计阶段时,经常采用正式方法来判断正确性式方法来判断正确性实现正确性的途径实现正确性的途径 非正式方法:判断设计是否满足所需的非正式方法:判断设计是否满足所需的功能功能 正式方法:包含了用数学逻辑的方法来正式方法:包含了用数学逻辑的方法来分析变量变化的方向分析变量变化的方向 设计进入详细设计阶段时,经常采用正设计进入详细设计阶段时,经常采用正式方法来判断正确性式方法来判断正确性实现正确性的非正式方法实现正确性的非正式方法 要求我们在宣布设计正确之前必须完全要求我们在宣布设计正确之前必须完全理解它理解它 设计和实现

3、必须具有可读性设计和实现必须具有可读性 由于人类大脑在处理复杂问题方面有局由于人类大脑在处理复杂问题方面有局限性,所以要进行模块化的设计,即将限性,所以要进行模块化的设计,即将设计分成独立的可理解的部分。设计分成独立的可理解的部分。 不断进行简化和模块化,直到设计使人不断进行简化和模块化,直到设计使人信服信服充分设计的术语和理论基础充分设计的术语和理论基础一个一个足以足以实现需实现需求的设计求的设计一个一个正确正确的设计的设计有时称为有时称为 设计必须完全设计必须完全可理解可理解接下来接下来 设计非常设计非常模块化模块化达到这个目标的常用达到这个目标的常用方法是方法是 最小目标最小目标实现正确

4、性的正式方法实现正确性的正式方法 常常基于在严密的控制下跟踪变量的变常常基于在严密的控制下跟踪变量的变化,一般会指定一个不变式化,一般会指定一个不变式 不变式在变量值之间表示的是一种不变不变式在变量值之间表示的是一种不变关系关系 用在类级别设计中的不变式称为类不变用在类级别设计中的不变式称为类不变式式- 包含变量包含变量 mileage, VehicleID, value, originalPrice, 和和 type:mileage 0 mileage = -300 ($300 是一辆报废汽车的处理价格是一辆报废汽车的处理价格)originalPrice = 0( type = “REGUL

5、AR” & value = originalPrice )Automobile 类类的不变式的不变式实现正确性的正式方法实现正确性的正式方法 Automobile类的方法要考虑这些不变式,类的方法要考虑这些不变式,因此将变量设为私有,并且只能通过公因此将变量设为私有,并且只能通过公有的存取(有的存取(accessor)方法才能改变他)方法才能改变他们的值。们的值。 可以对存取方法进行编码来保持不变式。可以对存取方法进行编码来保持不变式。 在在Automobile类中使用类中使用“setter”方法来方法来设置类不变式设置类不变式AutomobileAutomobile的一个客户的的一个客户的m

6、ain()main()方法方法模块接口模块接口 由于模块化是获得设计正确性的方法,由于模块化是获得设计正确性的方法,所以我们首先要理解客户代码是如何使所以我们首先要理解客户代码是如何使用模块的。用模块的。 模块可以是模块可以是类或类的包类或类的包 接口是函数形式(或原型)的集合,让接口是函数形式(或原型)的集合,让设计更易于理解设计更易于理解 模块的接口定义了它的用途模块的接口定义了它的用途类的接口类的接口 当一个类支持的方法有很多种时,将这当一个类支持的方法有很多种时,将这些方法成组放置到几个接口中是很有好些方法成组放置到几个接口中是很有好处的,可以重用接口。处的,可以重用接口。例例 在一个

7、运输业的应用程序中的类在一个运输业的应用程序中的类Shipment。ShipmentsetVehicle()perishable()getWidth()printRoute()describeType()getLength()getDuration()setType()ShipmentsetVehicle()perishable()getWidth()printRoute()describeType()getLength()getDuration()setType()ShipmentDimensionsgetWidth()getLength()getWeight()Transportation

8、MeansgetDuration()setVehicle()printRoute()GoodsTypedescribeType()setType()perishable()ShipmentDimensionsTransportationMeansGoodsType原始原始形式形式使用接口使用接口的形式的形式包的接口包的接口 包的接口与类的接口不同,包不能被实包的接口与类的接口不同,包不能被实例化例化 通过包来使用接口的一种方法是利用包通过包来使用接口的一种方法是利用包中类的指定对象来提供相应的接口。中类的指定对象来提供相应的接口。包的接口包的接口PricingpurchasesFurnitur

9、eClothingApplianceSelectionClothingTryoutsingletonPurchasesIFParticipant-servicesConversation-services包的接口的示例包的接口的示例ConversationchatServerchatClientDisplayConversationManagerClientCommServerCommbillingAccountingBillFinancialMessage-Reception模块化模块化 为了模块化特定的应用程序,在高层需为了模块化特定的应用程序,在高层需要创建包,在底层需要创建类要创建包,

10、在底层需要创建类选择类选择类 设计中用到两种类:设计中用到两种类: 领域类领域类:属于设计中的特有类,如一个模拟:属于设计中的特有类,如一个模拟银行的应用程序的领域类可能包括银行的应用程序的领域类可能包括BankCustomer类、类、BankTransation类和类和Teller类,但不包括类,但不包括File类和类和Database类。类。 非领域类非领域类:不是程序特有的,如:不是程序特有的,如Customer类和类和Transaction类。类。 通常从领域类开始类的选择,然后增加通常从领域类开始类的选择,然后增加非领域类来满足设计目标非领域类来满足设计目标 非领域类通常用于概括领域

11、类非领域类通常用于概括领域类领域类领域类VS非领域类非领域类 领域类领域类: 应用程序特有的类应用程序特有的类 例如例如: BankCustomer, BankTransaction, Teller 通常是非通常是非GUI类类 足以分类所有的需求足以分类所有的需求 非领域类非领域类: 一般类一般类 例如例如: 抽象类抽象类, , 实用类实用类 源于设计和实现的考虑源于设计和实现的考虑选择包选择包 选择包是选定应用程序体系结构时必须进行的选择包是选定应用程序体系结构时必须进行的一步,任务是将应用程序分组,通常为一步,任务是将应用程序分组,通常为310个个包,然后这些包能用同样方法进一步分解。包,

12、然后这些包能用同样方法进一步分解。可供选择的模块化方式可供选择的模块化方式mechanicspositionground controlonBoardNavigationcontroltrajectoryweather跟踪运送卫星进入预定轨道跟踪运送卫星进入预定轨道的运载火箭轨迹的应用程序的运载火箭轨迹的应用程序选择选择 1选择选择 2Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.为正确性和充分性而重整为正确性和充分性而

13、重整 极限编程(极限编程(extreme programming)是首先)是首先为给定的需求进行设计,然后在额外的需求变为给定的需求进行设计,然后在额外的需求变得透明时对设计和实现进行修改,这个过程称得透明时对设计和实现进行修改,这个过程称为重整(为重整(refactoring)。)。重整:为类提升一个原始属性重整:为类提升一个原始属性 为了适应范围的增长,常常需要引入一个新类为了适应范围的增长,常常需要引入一个新类来进行重整。来进行重整。 如,假设已经有一个包含整形变量如,假设已经有一个包含整形变量mileage的的类类Automobile: class Automobile Mileage

14、 mileage; .重整:为类提升一个原始属性重整:为类提升一个原始属性 对于一个使用过的汽车,提出的额外要求也许对于一个使用过的汽车,提出的额外要求也许说明了已使用的汽车上的说明了已使用的汽车上的“mileage”根本不是根本不是一个简单的变量。一个简单的变量。 如,引擎也许有另一种表示方式,那么底盘的如,引擎也许有另一种表示方式,那么底盘的英里数和引擎的就不同。假设应用程序要考虑英里数和引擎的就不同。假设应用程序要考虑被欺骗的可能性,那么报告的被欺骗的可能性,那么报告的“mileage”就要就要根据汽车是否曾被偷过这样的其他属性来修改。根据汽车是否曾被偷过这样的其他属性来修改。因此,要考

15、虑因此,要考虑“将将mileage提升为一个类提升为一个类”这这样的重整。样的重整。重整:为类提升一个原始属性重整:为类提升一个原始属性Class Mileage int nominalMileageValue = 0; int chassisMileageValue = 0; int engineMileageValue = 0; public int computeEffectiveMileage()Class Automobile Mileage mileage; 重整:引入抽象基类或接口重整:引入抽象基类或接口 当应用程序包含几个具有广泛通用性的类时。当应用程序包含几个具有广泛通用性的

16、类时。 如如Gymnast(体操运动员)、(体操运动员)、Runner、FootballPlayer类:抽象类就是类:抽象类就是Athlete(运动(运动员)员) Java抽象类几乎可以包含类的所有特性,只有抽象类几乎可以包含类的所有特性,只有不能创建类的对象不能创建类的对象重整:引入抽象基类或接口重整:引入抽象基类或接口Abstract class MyAbstractClassClass AnotherClass MyAbstractClass m = new MyAbstractClass();不能编译,因为试图建立一个抽象类的对象不能编译,因为试图建立一个抽象类的对象重整:引入抽象基类

17、或接口重整:引入抽象基类或接口Abstract class MyAbstractClassClass AnotherClass MyAbstractClass m; m = getObjectOfMyAbstractClass(); / returns obj. of non-abstract subclass m = new ConcreteSubclassOfMyAbstractClass();通常使用通常使用“concrete”(具体)来强调不是抽象类(具体)来强调不是抽象类可以编译可以编译健壮性健壮性 错误的原因错误的原因 防止错误输入防止错误输入 用户输入用户输入 不是用户的输入不是

18、用户的输入 数据通信数据通信 其他应用程序的方法调用其他应用程序的方法调用 防止开发错误防止开发错误 错误的设计错误的设计 错误的实现错误的实现检查输入(保证环境健壮性)检查输入(保证环境健壮性) 在继续进行处理之前,可以检查应用程序的所在继续进行处理之前,可以检查应用程序的所有输入的方法。有输入的方法。 检查类型检查类型 检查与前置条件和不变式不符的输入检查与前置条件和不变式不符的输入为提高健壮性而初始化为提高健壮性而初始化 初始化变量是很好的练习:初始化变量是很好的练习:int I = 0; 因为带着未初始化的变量执行一个程序所受的因为带着未初始化的变量执行一个程序所受的损失比先初始化变量要大得多。损失比先初始化变量要大得多。 当应用程序的不良性能变得明显时,初始化版当应用程序的不良性能变得明显时,初始化版本的程序可能产生更多有价值的信息。本的程序可能产生更多有价值的信息。提高健壮性的参数传递技术提高健壮性的参数传递技术 如如 int computeArea(int aLength, int aBreadth) 如果可行,捕获在类中的参数约束如果可行,捕获在类中的参数约束 int computeArea(RectangleDimension a RectangleDimension) 在方法注释中说明所有的参数约束在方法注释中说明所有的参数约束 aLength 0 an

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论