HIT软件构造学习笔记-第三章(中)

3.2注释和规约
一.规约测试
在写测试用例的时候不违反规约就可以

二.设计规约
1.规约的性质:
(1)规约的确定性
(2)规约的陈述性
(3)规约的强度*

此处考点:比较两个规约的强度(要注意有一些规约是无法比较强度的–图形交叉)

2.规约的强度:
if S2 的前置条件更弱 or S2 的后置条件更强 则:规约强度S2>S1

前置条件弱:对应着用户的输入限制变弱,也就是说,用户的可输入选项增多了
后置条件强:对应着输出的限制变强,满足条件的输出变少了

同时,规约越强,对应的图形就越大

3.如何写一个好的规约:

此处考点:分析一个规约是否为好的规约

(1)内聚的:
规约描述的功能要单一,简单,容易理解(也就是说只干一件事,太多了就很复杂)

(2)信息丰富:
让人一看就知道规约实现的功能(不能存在歧义)

(3)开发者应该尽可能考虑各种特殊情况

(4)在规约中尽量使用抽象数据类型(ADT,后面会讲到),并且可以给方法的实现和客户端更大的自由度

(5)precondition到底写不写取决于前置条件,也就是取决于用户


3.3抽象数据类型(ADT)
就是把所有的属性都变成private的–实现表示独立性

1.ADT的定义:
用户只能通过具体的操作来调用类,用户无法看到ADT的内部属性

2.mutable和immutable数据类型

3.操作类型:
(1)Creators:构造器
(2)producters:生产器
(3)Observers:观察器
(4)Mutaters:变值器

Creators:从无到有
producters:输入一个(String),产生一个新的(String)
Observers:输入一个(List),产生一个(int)
Mutaters:改变对象的属性,通常返回值为void

注意immutable类只有前三种操作类型,不存在变值器

4.ADT的设计:
要先列出来一系列供用户看的操作
(1)设计简洁,一致的操作
(2)提供足够的操作支持ADT的运作

5.表示独立性:
用户在使用ADT的时候不需要知道ADT的内部情况

6.不变性 Invariants
在程序执行的过程中,我们需要保证一些东西不变,最典型的例子就是immutable

如何判断一个类是否为immutable?
(1)看是否有Mutators操作
(2)看是否存在表示泄露(内部属性暴露给外部):
*在Represent中不能存在public类型的变量
*return语句不能返回引用值

7.AF和RI
首先要介绍R空间和A空间的概念:
R空间:表示空间(也就是内部空间)
A空间:抽象空间(也就是用户看到的外部空间)

下图是一个例子:
在这里插入图片描述
几个特点:
(1)满射:
也就是说,A空间中不存在剩余

(2)未必单射:
也就是说,可能存在两个R空间中的数据对应一个A空间数据的情况

(3)未必双射:
也就是说,R空间中的数据,用户可能看不到

(2)和(3)是我们不想看到的,所以,AF和RI出现了
AF:抽象方程(就是R与A之间的映射关系)
RI:表示不变性(就是R与boolean之间的映射关系,相当于一个判定条件)

RI可以理解为R的子集,也就是所有合法值得集合
RI的作用就是让R空间和A空间中的数据做到一一对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值