软件构造心得(5)spec、RI、AF、A的概念辨析之spec

1.1spec基本概念:
spec,全称为specification,即规约,其规约的是使用者(client)和实现者(implementor)之间的妥协与契约,即是一种在使用时必须要遵循的要求的说明,也是一种在在实现时需要遵循的原则。

1.2spec一般被书写在:
(1)每一个类前面,(2)每一个方法前面

1.3spec组成与分类
spec从annotation上由@parameter、@throws、@return组成。完整的spec其需要涵盖若干对于前置条件和后置条件的说明,包括基本使用方法、immutable/mutable、类型限制、实用可能出现问题的情况的描述。

书写规范举例

/**
* Get the target vertices with directed edges from a source vertex and the
* weights of those edges.
*
* @param source a label
* @return a map where the key set is the set of labels of vertices such
* that this graph includes an edge from source to that vertex, and
* the value for each key is the (nonzero) weight of the edge from
* source to the key
*/
1
2
3
4
5
6
7
8
9
10
约定俗成的规矩是使用者需要在满足前置条件的情况下,才能得到正确的结果,
所以要求使用时需要认真阅读spec。当然出于程序员的良心,可能会帮client多考虑一些事情,或者是额外处理一些情况,或者是抛出相应的异常使其fall fast。

分类有确定的规约和欠定的规约。

1.4.1行为等价性
行为等价(Behavioral equivalence)意思是,
不同的代码实现,对于用户来讲,是否是等价的,即相对于提供的同一个spec,是不是都被满足了,如果都满足那么就算做等价。
所以重点就是要站在用户端看待问题,只要同一个spec被满足,则说明实现了相同的功能,即同一个spec所有实现是等价的。
不能单看代码的结果不一样就说两个实现是不等价的。

1.4.2spec的强弱的判断和比较方法
前置条件越弱,一方面,对于用户更加的友好,其不用考虑太多的情况即可放心使用。另一方面,对于程序员的要求就越高,因为这意味着他需要考虑到更多的情况,使得程序员不能随便实现了。使得规约变强。

后置条件越强,对于用户来讲得到的信息越具体,这样就需要程序员使用更加具体的实现方式,限制了实现的手段,使得程序员不能随便实现了。使得规约变强。

这里面值得注意的是,因为前置条件必须被满足,所以后置条件的比较是在前置假设成立的条件下进行的,在很多情况下,前置条件的限制使得后置条件从不同变为相同

规约越强,实现的手段就越少。所以我们在实现了一个规约之后,代码可以直接适用于比这个规约弱的规约,但是不再能适用于比这个强的规约了。

to be continued…

不要慌张,软件构造的概念有时候就是这么让人头秃…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值