一、Spec

spec全称为specification(规约)。specification不仅给我们程序确定了责任(我们需要编写怎样的程序),也同样给客户端确定了责任(他们需要遵守怎样的输入原则,输入怎么样的数据等等)。

specification需要明确输入、输出的数据类型,需要讲清楚method的功能以及它的正确性,以及它的Performance expectations(性能)。

1.Specification structure : pre-condition and post-condition(前置条件和后置条件)

前置条件通过“requires”描述,前置条件是对客户端的约束,在使用方法是必须满足的条件。

后置条件通过“effects”描述,后置条件是对开发者的约束,方法结束时必须满足的条件。

1、如果前置条件满足,则后置条件必须满足。
2、如果前置条件不满足,则方法可做任何事情
所以客户端只有在满足前置条件的情况下输入正确的数据,才能得到他们想要的结果,有了spec可以减轻开发者的负担,排出一些非法的情况。

除非在后置条件中声明过,否则内部方法不应该改变输入参数。开发者应该尽量遵循这个规则。尽量避免使用可变的数据类型。

2.Document(注释)

1、方法的目的,是用来做什么的

2、@param:输入的参数

3、@return:方法的返回值

4、@throws:这个方法中可能抛出的异常(checked and unchecked)

5、thread safety issues:线程安全的策略。
3、Specification的强弱判断

如何比较两个规约?在前置条件相同的情况,后置条件强的规约更强。在后置条件相同的情况下,前置条件更弱的规约更强。

所以spec变强:更放松的前置条件+更严格的后置条件。
规约越强说明对开发者的要求越高,对客户端的约束越小。

3.怎么写规约

我们通过例子来看。比如我们碰到以下代码让我们对他写spec

public List<String> getSomeLines(int start,int end){List<String> some = new ArrayList<>();for(int i = start; i < end ; i++){some.add(lines.get(i));return some;}
}

方法getSomeLines()返回文本的第start行到第end行,我们需要针对该方法设计spec,充分考虑健壮性。

/***@Param start  start需要大于等于0并且小于总行数*@Param end    end需要大于start并且小于等于总行数*@return       返回从start行到end行之间的行列表*@throws Nolines 没有行抛出异常*@throws BoundException start和end不符合规范*/

Java中的Spec相关推荐

  1. Java中的微信支付(2):API V3 微信平台证书的获取与刷新

    1. 前言 在Java 中的微信支付(1):API V3 版本签名详解一文中胖哥讲解了微信支付 V3 版本 API 的签名,当我方(你自己的服务器)请求微信支付服务器时需要根据我方的API 证书对参数 ...

  2. Java中native关键字

    今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记. native关键字说明其修饰的方法是一个原生态方法,方法对应的 ...

  3. Android+Java中使用Aes对称加密的工具类与使用

    场景 Android+Java中使用RSA加密实现接口调用时的校验功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11146 ...

  4. Android+Java中使用RSA加密实现接口调用时的校验功能

    场景 RSA加密 RSA算法是一种非对称加密算法,那么何为非对称加密算法呢? 一般我们理解上的加密是这样子进行的:原文经过了一把钥匙(密钥)加密后变成了密文,然后将密文传递给接收方,接收方再用这把钥匙 ...

  5. javascript 解密_Javascript中的AES加密和Java中的解密

    javascript 解密 AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本,例如密码,然后将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加 ...

  6. Javascript中的AES加密和Java中的解密

    AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台(例如Andr ...

  7. Java中3DES加密解密示例

    在java中调用sun公司提供的3DES加密解密算法时,需要使用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: jce.jar security/US_export_policy. ...

  8. sqltype java_【SQL参考】SQL数据类型与JAVA中type的对应

    标签: 一个db里面的data type和java中的一个type的mapping分为两步: 1.db里面的data type map到jdbc的一个type 2.jdbc的一个type map到ja ...

  9. java获取列族的列_在cassandra-cli中如何获取表中的所有列名以及如何在java中使用hector获取它?...

    我正在尝试获取列名,但无法获得仅列名称. 在cli我执行命令描述表节点,它返回结果: CREATE TABLE nodes ( key text PRIMARY KEY, id text, score ...

最新文章

  1. python安装选项_python设置执行选项参数
  2. 中国公有云三巨头,同时支持Rancher Kubernetes平台
  3. java线程中notify_Java多线程中关于notify和wait
  4. #65279导致页面顶部空白一行解决方法
  5. OpenCV直方图计算Histogram Calculation
  6. java入门5-asp.net关注
  7. 排版人员 快速排版_选择排版前应了解的事项
  8. Android8有深度休眠吗,IMX8MQ android休眠功耗过大
  9. 【转】MyBatis缓存机制
  10. vscode 新版eslint自动修复_程序员请收好:10 个实用的 VS Code 插件
  11. 数据库之ODPS中sql语句指南
  12. 【转】Entity Framework教程
  13. Unable to allocate bufptr memory (errval = -1)(CRLF与LF格式转换)问题的解决
  14. springboot单元测试_springboot2.x基础教程:单元测试
  15. 商品规格表设计_计算机毕业设计分享jsp企业销售管理系统
  16. 中国行政区划编码-省市县镇村
  17. web开发环节,阿里前端工资多少
  18. ACM144-小柯的烦恼zy
  19. 流畅安装、简单使用annie下载B站视频
  20. 区块链运作机制_区块链如何运作? 铂 4

热门文章

  1. Red Hat Enterprise Linux Server release 7.4 (Maipo) 安装mysql5.7.36
  2. 小孔成像总结_初中物理解题技巧+方法总结,可以说很到位了!
  3. 事件冒泡是个啥子东西
  4. java web 点着点着就死掉了_Websphere(was)故障-挂死,重启,产生core.*.dmp,javacore文件-分析和解决...
  5. (vue)vue导出excel文件打不开,或者文件内容为object object
  6. 大笨钟 (10 分)
  7. 十进制转化为二进制(栈算法)
  8. 5.4 成员变量的隐藏和方法重写
  9. gitlab+drone+harbor之CI自动化流程
  10. 低蓝光认证:TUV莱茵与TUV南德 有啥区别?