1.编程语言中的函数和方法:方法是程序的积木,可悲独立开发、测试、复用
2.Specification:
(1)编程过程中的documentation:
以Java的API为例,需要记录类的继承关系,具体的子类,类的描述,构造器的总结描述,对所有类的总结描述
我们需要在编程过程中记录自己的设计决策,便于与其他程序员交流
(2)程序中方法的规约:
这是程序与客户端之间达成的一致,为双方明确了责任
规约可以隔离“变化”,无需通知客户端
首先解耦,因为客户端不需了解具体的实现
(3)行为等价性:一个重要原则,根据规约来判断而不是程序表示
(4)Rep的结构:pre-condition和post-condition
前置条件是针对客户端的,而后置条件针对程序实现者
程序中的静态类型声明是一种规约,可通过编译器自动检查;方法前的注释也是一种规约,需要人工判断是否满足
尽量避免使用mutable的数据类型
除非后置条件里声明,否则方法内部不应该修改输入的参数
无法强迫类的实现体和客户端不保存可变变量的“别名”
避免使用可变的全局变量
(5)*测试(后续会有说明)
3.设计规约
(1)明确规约所需要的内容
这里引入如何对规约的强度进行判断和比较:前置规约越弱,后置规约越强,则规约越强
越强的规约,对实现者的责任越重,而对客户端的责任越轻
(2)用图形表示规约
(3)设计好的规约:简单、单一、易理解、不能产生歧义、强度合理、规约中尽量使用抽象数据类(给客户端更多自由)
(4)对于是否使用前置条件取决于:a.check的代价 b.方法的使用范围——如果是private和protected的方法,则不需要