归约的定义:
规约是客户端与实现者之间签订的“契约”,客户端的输入应当满足前置条件,实现者编写的程序
应当给出满足后置条件的结果。规约描述了方法的功能以及接口(“能做什么”),不需要依赖(也不应该透露)方法的具体实现。
规约的强度:
更强的规约:前置条件更弱,后置条件更强,满足更强规约的方法一定能替代满足更弱规约的功能,客户端往往喜欢规约强度更高的方法(有更大的自由度),但这增加了实现者的压力......
个人理解为什么前置更弱能使得强度更高,因为这样的规约使得使用者对于输入参数的限制更加低,自由度更大。而更强的后置条件使得使用者角度看返回更加具体清晰。
更强的规约内容实现的模块能直接替代更弱的模块。
这里直接来看一道学校的考试题:一般而言更强的规约是一个更小的圈,因为·这意味着其实现方法减少。故而图中A B的强度相等,又因为A B和C没有包含关系,故而C的规约强度实际没法和A、B比较。其次能看到D的包含了A B C,E包含了其他所有,故D和强度弱于A B C,E的强度弱于所有。
来看四个选项:
A、A 和B的spec对客户端无区别(T)因为A和B强度一样
B、C的spec强度比D大(T)由图可见
C、若遵循D的规约,客户端可无区别使用A、C(T)因为D的强度更弱,所以更强的实现都可以满足D的要求
D、所有用D的地方可以改成E(F)强度弱的不能随意替换强的