本篇blog的内容来源于对MIT课程中的readings 6 - Specifitions阅读后的一些总结和我的的理解java
网址:http://web.mit.edu/6.031/www/fa18/classes/06-specifications/程序员
这篇reading详细介绍了java程序编写中的specifications的相关,通篇读下来以为酣畅淋漓,写的十分精彩。web
Specification是一个至关严谨的概念。若是上课没有仔细听课,或者看书的时候没有认真,很容易把specification直接理解成“就是给每一个方法写一个大体的描述”。实际上,specification比这要复杂得多。编程
如下是我在阅读过程当中,对重点内容的一些总结。工具
简单来讲,Specification就是在程序中方法的层层调用之间添加一层约定,已达到解耦和的目的。post
稍微详细一点讲:咱们在编程的时候会写不少方法,不少类,这些方法与类层层调用,互相影响。程序越大,这个调用关系就越复杂,代码就愈加臃肿和难以理解,程序的维护就变得至关困难,更是给全部尝试理解代码的人灵魂上的折磨。而Specification用来在不一样方法之间划清界限,写下约定条件,对敲代码的人来讲是一种目标与约束,对阅读代码的人来讲则是提示。测试
粗略的了解specification,大概须要掌握四个方面的内容:设计
若是说没有specification的代码是一大堆便便,那么加入了specification,用pre和post condition限制了以后的代码就是用许多塑料袋把便便按功能封装起来,这样,Client,也就是调用者,只可以看到塑料袋,条理天然要清晰明确不少。blog
两者区别何在:
方法要有输入与输出,Precondition用于限制输入,Postcondition用于限制输出。ci
更进一步
Precondition规定了这个方法所接受的合法输入,也就是在client调用这个方法时,要想使方法可以产生正确的结果,client所须要知足的条件(其实就是输入的变量的条件)
Postcondition只会在Precondition被知足时才有意义。Postcondition规定了在Precondition被知足的状况下,调用当前方法所产生的影响。
分工明确,方法的调用者以知足precondition为目标,方法的编写者则默认precondition已经被知足,以知足postcondition为目标。
specification只给出了知足precondition条件下,postcondition必须被知足。若是precondition没有被知足,那么方法就能够随心所欲。
举个例子,某个方法要求输入一个大于0的整数。若是输入的整数小于0,咱们的方法能够:
除非spec里提到了输入值小于0时方法应该怎么作,不然方法能够随心所欲
null为何要存在?
为了给程序员找麻烦
readings里面只介绍了如何避免null带来的麻烦,却没有说明null存在的合理性,无需多言,你们都懂。
妙的是,readings说“null values are implicitly disallowed in parameters and retur values ... Avoid null”
在编程中应该时刻注意null的处理
如何保证给出的pre 和post condition是正确的?针对两者设计测试用例
测试用例能够分为两类:
两者都必须遵循specification
black box很好理解,就是针对preconditon与postcondition,充分考虑各类边界条件来设计测试用例便可。
可是glass box存在的理由是什么?咱们设计测试用例是绝对不能踏出specificatioin一步的,虽然specification隐藏了方法的内部实现,可是并非说对方法内部设计测试用例就会跨越这条界限。
方法之间也许存在相互依赖。?留一个疑问在这里,我仍然不能很好的理解glass box的意义
两者的区别在于,checked Exception必需要被try catch语句包围,或者要在外围方法中添加throws语句即意味着:这个exception必须显式地被处理掉。
checked exception通常用于处理意料之中的特殊状况,好比说错误的输入,这是彻底有可能的。那么在这里exception其实就是一个很方便的 fail fast的工具,是用来马上对特殊状况产生响应的。
unchecked exception则不须要被try catch 包围,也就是说,不用去管。
unchecked exception用于处理错误状况,通常会有两种可能
specification的做用说来讲去,仍是解耦和。把功能包装起来,把问题产生的范围缩小,不一样的人能够专心于不一样的工做,不须要为各类不肯定的条件所烦恼。