哈工大2022软件构造第5.6章学习笔记

本文是关于哈工大2022年软件构造课程的学习笔记,主要探讨设计规约的重要性和强度,包括前置、后置条件,以及ADT(抽象数据类型)的操作类型和表示独立性。重点讲解了规约如何确保代码质量,以及表示泄露的避免策略。
摘要由CSDN通过智能技术生成

1.设计规约

*1.1specification 前置、后置条件

在团队合作的程序中,规约是团队工作的关键。因为如果没有规约就没法分派任务,就没法进行编程;即使将代码写出来了,也不知道代码运行是否按照要求了。规约以一种类似于合同的方式进行工作。即方法的实现者负责满足这份合同的要求,使用这个方法的客户可以依赖这份合同。Spec给“供需双方”都确定了责任,在调用和实现的过程中双方都要遵守

规约是客户端与实现者之间签订的“契约”,客户端的输入应当满足前置条件,实现者编写的程序应当给出满足后置条件的结果。
规约描述了方法的功能以及接口(“能做什么”),
不需要依赖(也不应该透露)方法的具体实现。
在这里插入图片描述

/**
*
*@param x要加入集合的字符 (对参数的要求)
*@return操作后集合的大小
*/
public int add(char x)

前置条件(参数要求)
后置条件(返回值要求,或者throws抛出的异常)

*1.2 规约的强度

更强的规约:前置条件更弱,后置条件更强。可输入范围变大,抛出异常更少。
换句话说,规约越强程序员越痛苦。

*1.3 行为等价性

去判断行为等价性,问题的关键就在于两种实现方法能否相互替代。
两种行为等价的方法可以相互替代,主要看用户需求。

2. ADT

2.1 ADT操作的四种类型

在这里插入图片描述
举个例子
在这里插入图片描述

*2.2 AF/RI/rep

2.2.1 R/A/rep

R 表示空间 程序员看到的
A 抽象空间 用户能看到的内容
rep 内部表示属性
在这里插入图片描述

2.2.2 AF/RI

AF(抽象函数)即是描述从R到A的映射关系的函数,即如何将表示空间中的一个值解释为抽象空间中的一个值。
AF必然是一个满射,同时它不一定是单射(必须没有非法的表示值才能说是必定满射)。
表示方法:
AF(rep)=rep在类中的含义。

RI(表示不变量)告诉了我们表示空间R中的值是否能被映射到抽象空间A中,也可以认为RI构成了表示空间R的一个子集,该子集中的值能够被映射到抽象空间A中。
简单来说,表示不变量告诉了我们变量是否合法。
写RI=写rep满足的规则=“阅读理解”

2.2.3 用注释写AF/RI在这里插入图片描述

在这里插入图片描述

*2.3 表示独立性、表示泄露

表示独立性是指,客户端使用ADT时无需考虑(也不应该知道,更不应该直接访问到)其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。

如果ADT不幸地让客户端得到了自己内部表示(可变对象)的引用,那么客户端就可以不通过ADT的操作,而可以通过非法后门修改ADT的内部表示,产生表示泄露。
1.使用private和final关键词对域进行修饰。
2.使用防御性拷贝,需要注意的是,防御性拷贝可以发生在传入和传出数据时。
3.通过规约对用户的行为进行限制。
4.使用不可变类型的数据构建ADT。

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值