软件构造课程笔记5——第5章-设计规约

本文探讨了方法规约的撰写,强调规约应描述方法的功能而不涉及实现细节。规约的强度决定了其可替换性,强度更高的规约具有更弱的前置条件和更强的后置条件。设计好的规约应具备内聚性、适当强度和使用抽象类型。同时,不应在规约中指定数据类型和实现方法,且对于mutating方法,需明确其可能对参数的改动。

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

·①规约怎么去写②怎么通过规约去比较方法的强弱

·规约存在于方法中(类中有属性和方法,用户只能看到方法,看不到属性),但不只给方法写,也会给属性写规约,不过这一章讲的都是给方法写的。

·方法分为方法名和方法体两部分,参数类型和返回值类型是否匹配,在静态类型检查阶段完成。

·规约包含注释和具体的方法名(函数声明)两部分。不包含方法体。

·规约中包含了方法的声明,是可以被编译器检测的(不过注释部分是编译器不能检测的)。

·规约只讲“能做什么”,不讲“怎么实现”

·行为等价性:这两个函数是否可相互替换。(站在客户端视角看行为等价性)

·规约的规范描述:

/**(注意是双星号开头)

@param:前置条件/输入

@return:后置条件/输入

规约中不应该给出数据类型、函数内部实现方法等

·mutating方法使用mutable类型的对象可能会对输入参数进行改变,此时一定要在规约中写明。

 

·除非后置条件里声明过,否则不要修改输入参数。

·【本章重点】设计规约,分析哪一个规约更好——规约的确定性、陈述性、强度

规约的强度:

比较两个规约,判断是否可以用一个规约替换另一个。

归约的强度S2≥S1,当且仅当:S2的前置条件比S1更弱,且S2的后置条件比S1更强。此时,就可以用S2替代S1。

如果S1的前置条件和后置条件都比S2的要强,那么这两个规约的强度是不可比较的,不可用一个去替换另一个。

越强的规约意味着:更少的实现就能满足它,更多的用户可以使用它,对程序员的要求变多,对用户的要求变少

·设计更好的规约:

规约应是内聚的——描述的功能应单一、简单、易理解

规约应该足够强——太弱的规约,客户不敢用,开发者应尽可能考虑各种情况,在pos-condition给出处理措施

规约应该足够弱——太强的规约,开发者难以实现

规约应该使用抽象类型——不要带具体的类型和参数,可以给方法的实现与客户端更大的自由度

规约应该根据代码内部check的代价大小判断是否要写前置条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值