ADT and OOP(2) 设计规范(Designing Specification)

目录

1.程序设计语言中的函数/方法(Function / method in programming language)

2.通信程序设计规范(Specification: Programming for communication)

*为什么需要规范

*行为等价

*规范结构:前提条件与后置条件

3.设计规范(Designing specifications)

*分类规格

*图解说明

*规格的质量

本讲目的

1.了解先决条件和后置条件在方法中规格,并能写出正确的规范

2.先决条件和后置条件是什么?他们对于实现者和客户端的方法有什么意义

3.理解不确定的规格,并能够识别和评估不确定性

4.理解声明性与操作规范能写声明性规格

5.能比较规格的强度

6.能够写出连贯、有用的规范力量

1.程序设计语言中的函数/方法

(Function / method in programming language)

变量作用域

 

main x = 5
printSquare x = 5
printSquare x = 25    //x的值未传回main函数
main x = 5

Methods: Building Blocks(积木)

1.大程序是用小方法建造的。

2.方法可以单独开发、测试和重复使用。

3.方法的用户不需要知道它是如何工作的---这是被称为“抽象化“

例:计算冰雹序列方法

2.规范:通信程序设计

(Specification: Programming for communication)

1.编程文档化

Hacking vs. Engineering(黑客派vs工程派)

黑客派:大胆,乐观主义者

缺点:测试前不论对错编写大量代码(有自信233)

缺点:所有细节记在脑中,不做注释。。。

缺点:自以为bug都是好找且容易解决的

工程派:谨慎,悲观主义者

优点:写一点测试一点

优点:好好做注释

优点:静态检查有助于避免愚蠢错误

2.规范与契约(Specification and Contract)

规格(或称为合同)Specifications (or called Contract)

1.规范是团队合作的关键。不可能分配任务给实现没有规范的方法。

2.规范是合同:实施者负责。为了满足合同,使用该方法的客户可以信赖合同。

2.1状态方法与呼叫者的责任

2.2定义对实现意味着什么是正确的

3.像真实的法律合同一样,规范要求双方都有。各方:当规范具有先决条件时,客户端具有责任也是如此。

为什么订立规范

现实要求:

很多程序bug是因为有不同习惯的程序猿合作时没商量好造成的,因此订立一个统一的规范是必要的

优点:

1.准确的规格说明利于确定错误的责任和位置

2.规范对客户有利,因为他们节省了阅读代码的任务。

规范(合同)

1.规范对实施者有好处一种方法因为他们给予实施者自由改变实施不告诉客户。

2.规格可以更快地编写代码(通过对输入的限制说明,省略掉一些耗时的检查工作,提升效率)

3.合同是客户和实现者之间的防火墙

 

3.1它从工作单位中屏蔽客户端的细节

3.2它从工作单位中屏蔽了实现者的细节

3.3允许单位代码和客户端代码独立改变只要改变尊重规范

4.对象与其用户之间的协议

4.1方法签名(类型规范)

4.2功能性和正确性预期

4.3绩效期望

5.方法是怎么做的,而不是怎么做的

接口(API),而不是实现

3.行为等价(Behavioral equivalence)确定行为等价问题是我们是否可以为一个实现方法替换一个实现方法。

这些方法不仅有不同的代码,它们实际上也有不同的行为。但是这两种方法的行为相同。

4.前提条件与后置条件(pre-condition and post-condition)

规范结构

一个方法的规范由几个子句组成:

先决条件,由关键字指示要求

后置条件,由关键字指示影响

例外行为,如果前提违反了会怎样

先决条件是对客户的义务。这是一种状态,在该状态下,该方法是调用。

后置条件是对执行者的义务。方法. 如果调用状态的前提保持,则该方法有义务服从后条件,通过适当的返还值、抛出指定异常、修改或不修改对象,等等。

public class test1 {
public static void printSquare(int x){
System.out.println("printSquare x = " + x);
x = x * x;
System.out.println("printSquare x = " + x);
}
public static void main(String[] arguments){
int x = 5;
System.out.println("main x = " + x);
printSquare(x);
System.out.println("main x = " + x);
}
}

猜你喜欢

转载自www.cnblogs.com/yinghuoshouxin/p/9205422.html
ADT