软件构造博客4 复习笔记——规约

从复习笔记中摘取一部分,作为近期的复习心得。

1.写假设:代码中变量的数据类型定义,且final定义该变量设计决策为不可改变。

2.归约的作用:作为防火墙,开发段不需要知道使用,客户端不需要知道实现。

3.写规约:只讲能做什么,不讲如何实现。

  @param 参数  @requires 前置条件(对客户端)  @effects 后置条件(对开发者)  @return 结果  @throws 异常

4.行为等价性:站在客户端角度分析等价性:最终行为相同即等价。若两个方法符合同一规约,则这两个方法等价。

5.规约结构:满足前置条件,则必须满足后置条件;前置条件未满足,则方法可以做任意事;当违反前置条件时,客户端存在bug。程序员可以通过快速失败使得bug更容易找到。

6.规约下的变异(mutate):避免使用mutable的对象,因为可能有多个变量指向同一可变对象。尽量不设计mutate,除非已经在@effects中声明,否则不应改变函数。

7.规约比较:规约具有确定性(描述输出是否确定),陈述性(描述输出,不描述过程),强度(优劣):若前置越弱,后置越强,则强度越高。强规约可以替代弱规约。(此处的强指的是可取范围小,自由度低)

8.规约图:点——一个具体实现,规约——一个符合规约的实现的范围。

9.规约的评价:内聚的:功能单一,简单易理解。足够强(强度高):尽可能考虑各种特殊情况。足够弱:不然开发者难以实现。使用抽象类型:例如Java中使用Map,List类似的接口类型。平衡前置/后置条件。

posted @ 2022-06-08 09:04  Asteraria  阅读(15)  评论(0编辑  收藏  举报