【思维导图】HIT软件构造Java笔记——第五章设计规约

本文探讨了编程中的规约Specification的重要性,它作为团队协作的基石,帮助明确客户端与程序之间的责任。规约包括前置条件、后置条件,确保行为等价性,促进代码的解耦和可读性。强调了规约在减少bug、帮助错误定位及隔离变化方面的作用,并提供了规约的格式和结构,如方法的输入输出、行为描述等。
摘要由CSDN通过智能技术生成

在这里插入图片描述

(在app上图片看不清的话可以复制链接到浏览器里,就可以看清了,电脑端也可以看清)
尝试根据上课的PPT整理出了一份不是很全的思维导图,省略了一些东西,如果有不对的地方或者困惑的地方请多多指正。下附xmind导出大纲,希望能对大家的学习有所帮助.

规约Specification

编程中的文字描述(假设)

Java API描述

为什么要写assumptions-设计决策

  • 帮助自己和别人理解代码

Specification and Contract

必要性

  • 没规约没办法分派任务/判断程序对错

    • linchpin of teamwork
  • 程序与client达成的一致

  • Spec给供需双方明确责任

    • 需要双方遵守

重要性

  • 帮助不同开发者产生相同的understanding

    • 减少bug的产生
  • 帮助开发者定位错误

  • 精确的规约可以帮助区分责任

  • client不需要阅读被调用函数的代码

    • 只需要理解Spec

规约的功能

  • 规约可以隔离“变化”

    • 无需通知客户端
  • like a firewall

    • 实现者不需要写代码确保输入的正确性

      • 来自调用者的责任
    • 实现了client和implementor解耦

      • 实现者不需要了解如何被使用
      • 使用者不需要了解如何实现

规约的格式

行为等价性

  • 站在客户端视角看行为等价性

    • 是否可相互替换
    • 根据规约判断行为是否等价
  • 需要根据代码的spec

编程语言中的功能和方法

方法是程序的积木

  • 可以被独立的开发/测试。复用
  • 客户端不需要了解方法内部具体如何工作

完整的方法

  • 方法的规约specification

    • @param
    • @return
  • 方法的实现体implementation

规约内容和结构

前置条件

  • 对客户端的约束

    • 使用方法时必须满足的条件

后置条件

  • 对开发者的约束

    • 方法结束时必须满足的条件

契约

  • 前置条件满足–则后置条件必须被满足

设计规约

  • 规约的分类

    • 规约的确定性
    • 规约的陈述性
    • 规约的强度
  • 规约强度比较

    • 规约S2>=S1

      • 前置条件更弱或相等
      • 后置条件更强或相等

notes

  • 能与不能

    • 参数和返回值

      • yes
    • 永远不能谈论私有函数与变量/本地or局部变量

  • 可变方法规约

    • 除非在后置条件中声明过

      • 否则方法内部不应该改变输入参数
    • 应尽量遵循次规则,尽量不设计mutating的spec

      • 否则就容易引发bugs
    • 程序员之间应达成的默契:除非必须如此

      • 否则不应修改输入参数

图表规范

note

  • 程序员可以在规约的范围内自由选择实现方式
  • client无需了解具体使用了哪个实现
  • 更强的后置条件——实现的自由度更低了
  • 更弱的前置条件——处理更多的输入

一个良好的规约

与代码好坏无关

  • 对该方法的设计

    • 便于client使用
    • 便于开发者编写

内聚的

  • 描述的功能单一简单易理解

信息丰富的

  • 不能让client产生理解的歧义

健壮性

  • 尽可能考虑各种特殊情况

适当的弱

  • 不要增加不必要的spec

    • 增加开发者的难度

使用抽象类型

  • 方法实现体和client的更大自由度

前置与后置条件

- 衡量标准
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值