软件构造复习第六章
1 ADT
1 抽象类型
数据包括基本类型和对象类型
我们还可以自己定义抽象类型
一个抽象类是由规约和内部的操作刻画的,对数据的操作是它的本质特征
2 可变与不可变类型
2.1可变与不可变:可变对象提供了改变内部值的操作,比如Date可以setmonth,String 不可变只能创建新的对象,但是stringbuilder是不可变类型的可变形式
2.2对抽象类型的操作进行分类
Creators
The concat() method of String , for example, is a producer: it takes two
strings and produces a new one representing their concatenation.

总结:不同类型转化的产生叫构造,同一个类型产生叫生产,比如1和2.
观察器:类中的内部属性查看也是,比如map的keyset
最后一个:指针可变,指向新的行
4 设计ADT
4.1原则:要么通用,要么具体分别对应抽象和具体
5 表示独立性:RI
5.1 不管内部如何实现,只要完成操作即可
RI的例子???没有明白目的是什么
目的:是举例子实现MyString 用两种不同 的ADT实现
例子2:ADT设计原则:保持独立性,主函数不应该依赖具体的方法(已知数据类型进行操作),只需要调用子类方法,和实现方式无关
规约:/**和方法的签名都是规约
Representation:Rep,叫做表示,指用到的R空间
实现:具体实现
6 测试ADT
7 不变量
7.1保持不变量:每次使用到之后都要检查用户是否恶意修改
保持不变量的方法:
private和final
缩放三角形的例子?
有很多问题:
1 public改成final
2
7.2 避免表示泄露的方法:
返回一个新的实例内容一样
返回一个当前变量的不可变版本
8 RI表示不变量和AF抽象函数
8.1 AF就是从R->A的映射,一定满射
8.2 RI的定义:
8.3:
rep不变量和抽象函数都应该记录在代码中,就在代表声明旁边自身:

理解:R就是自己定义的String s可以随意取值,
RI是真正合法的s,一些符合特殊条件的s就是RI,说明范围。
AF是具体如何映射的


就像:R是一个广阔的空间,我们只是用了一点点的RI约束的空间也就是面积,建造的栅栏就是AF,因为我们用到的数据是有限的只要说明每一个映射关系(R的一小部分对应到A中,是如何对应的,用到的一定对应,圈外面就不对应)就ok
8.3.2举例子的problems?????rep的题目
RI:偶数,按照从小到大
AF:两个一组,前一个字母到后一个字母的所有字母集合的和
如 acgg ,a-c为abc ,g-g为g,映射的A空间为a,b,c,g
map to就是映射的意思
ADT的一些题和例子
必须写到文档中
questions:
1
第一个需要知道,要使用,第二个和第五个第六个不需要知道,客户只需要使用得到值就可以,构造和查看需要,使用的值需要知道。
2 哪个是可能的RI?
画圈的可能是,因为RI一定是逻辑值
选择合适的RI:包括两方面要求:
1 适合方法的功能,保证满足条件的串一定实现想要的功能:
在删除c的功能中,第四个RI不能保证重复出现的c被删除,不可以
而在1 和 3 中保证了不会有重复的,可以实现
2 在满足条件的RI下操作后的结果也是符合RI的
第一个添加功能之后不能保证字符的顺序,
两个一块查找的只有第二个能保证功能确保串是偶数长度
检查不变性:Checkrep()检查是否RI发生了改变,破坏了不变性
在所有return 前都要检查

一个写好的例子:
RI,AF,保持不变性
细节:名字规定了string 形式,保持不变性:还有string本身就是不可变类型。再加所有的都防御式拷贝再返回
注意:规约时写的值只能时A空间的

ADT不变量替换前提条件
自己多写一个sortedSet的ADT,保证输入的正确性,简化规约了
具体的条件在sortedset里面
不用对两个一样参数都进行判断
总结:1 ADT主要由操作决定性质
2 4种操作方法
3 规约
4 好的ADT的原则
5 用4种方法测试ADT
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现