哈工大2022软件构造课程总结5

这篇文章是对哈工大2022春软件构造课程第五讲“设计规约”的思考和总结

目录

前言

一、编程语言中的函数和方法

二、规约:通信编程

三、设计规约


前言

在这一讲中会说明方法的规约、前置和后置条件、非确定规约、陈述式规约、规约的强度和比较、如何写出好的规约。

一、编程语言中的函数和方法

对于同一个类中的 static和非static类型的方法和函数,static方法和属性指的是类被编译时就会自动生成,它们归属于这个类,并不单属于这个类的某个对象,即每个对象都能访问和修改,一旦有一个对象修改了static的属性,那么所有对象都能且只能读取这个修改后的属性。

非static的方法和属性是归属于某个对象的,在new每个对象时都会创建一份这些非static方法和属性。在这个类中,非static的方法可以直接调用本类中任意一个方法和属性,因为在外界调用这个非static方法时必然已经创建了一个对象,所以可以支持这个方法调用非static方法、属性,而static方法和属性在这个类编译时就已经存在,一定可以调用。

二、规约:通信编程

①这些规约可以直接反应程序员对这个方法的设计决策,便于自己和他人阅读。

规约可以明确规定方法的实现方法,便于程序员编程,同时也可以做到程序与客户端独立,还可以便于客户与程序员之间划清责任。

规约中只讲能什么,不讲怎么实现。主要说明输入、输出的数据类型,功能,程序性能。

②两个方法之间是有行为等价性的,行为等价性是从客户端的视角来看的,如果两个方法具有行为等价性,那么这两个方法是可以完全进行替换的。具体判断两个方法是否具有行为等价性的方法如下图所示:

 ③规约中的前置条件和后置条件

前置条件(requires)是对客户端(输入)的要求,指客户端给的输入必须要满足规约中前置条件的要求。

后置条件(effects)是程序结束后返回值(输出)的要求,指程序的输出必须要满足规约中后置条件的要求。

根据规约,如果输入满足了前置条件,则输出必须要满足后置条件。如果输入不满足前置条件,那么输出可以任意,因为是客户端违约在前。

三、设计规约

比较哪个规约更好可以从下面三个方面进行:

①规约的确定性:描述的输出是否确定

②规约的陈述性:只是描述了输出,还是描述了如何输出

③规约的强度:强的规约为弱的前置条件+强的后置条件

对于规约的强度,前置条件越弱意味着客户端的输入范围越广,后置条件越强意味着输出的范围越窄,所以要使随便的输入都统一成为差不多的输出,体现出规约强度很强,同时也说明实现的可能类型很少。

比较前置条件的强度直接比较即可,比较后置条件的强度可以选取较强的前置条件作为前提,然后基于这个前提进行后置条件强度的比较。并不是所有的规约都能比较强度的,有一些规约前置条件更弱,后置条件也弱,这样就无法比较强度。还有些是前置条件和后置条件之间根本没有交集。

还可以用图形来表示规约,使用圈表示在规约范围内实现的可能种类,对于强度更强的规约,实现的可能种类更少,圈更小,体现为圈在强度低的规约内,表示强度高的规约可以替代强度低的规约,因为能够满足强度高的规约的实现方法也能满足强度低的规约。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值