规约——前置条件和后置条件

规约在软件开发中定义了客户端与开发者之间的责任边界,前置条件约束客户端输入,后置条件保障输出的正确性。通过@param、@return和@throws注释来表达,开发者应避免使用全局可变变量以确保不变性。规约的强弱影响着开发者的自由度和客户端的限制,遵循LSP原则的子类规约不应弱于父类。示例比较了不同规约强度的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

规约是客户端和开发者达成的一种“协议”,双方在开发之前沟通spec,从而界定双方的责任。前置条件主要限制客户端,后置条件主要限制开发者。前置条件满足了,后置条件必须满足。若前置条件不满足,理论上开发者可以做任何事情,但由于行业道德,一般开发者会处于正确性和健壮性的考虑,程序不会直接崩溃而是对bug显示错误信息提醒客户端。

前置条件一般在程序的注释中用@param提示,表示输入的参数;后置条件一般在程序的注释中用@return和@throws表示,@return表示返回值,@throws表示方法的定义上使用 throws 表示这个方法可能抛出某种异常,需要由方法的调用者进行异常处理。在lab1中应用了这一点,如下图所示:

由于spec只是一种规约,故开发者和客户端都无法完全信任对方。由此,逐渐形成了一种行业规范,即除非后置条件声明过,不应该改变输入函数,故应该尽量避免使用mutable类型的变量,尤其是全局的可变变量。

前置条件更弱,后置条件更强时,规约变得更强。更强的规约可以代替更弱的规约。前置条件和后置条件的强弱由条件的严格程度决定,即如果条件越放松,那么这个条件越弱。反之亦然。当前置条件和后置条件向同一个方向变化程度时(更弱或更强),无法确定spec的强度变化。规约越强,证明对开发者的限制越强且自由程度更低,但客户端限制更弱。开发者可以在规约的范围内自由选择实现方式,而客户端无权管理。需要注意的是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值