软构学习-5、6-设计规约、抽象数据类型(ADT)
目录
5 设计规约
本章大纲:
- 方法的规约
- 前置/后置条件
- 欠定规约、非确定规约
- 陈述式、操作式规约
- 规约强度及其比较
- 如何写出好的规约
规约只说明“能做什么”,
而不讲“怎么实现”
行为等价性
站在客户端的角度看待行为等价性
Spec 结构
- 前置条件:
对客户端的约束,在使用方法时必须满足的条件 - 后置条件
对开发者的约束,方法结束时必须满足的条件 - 例外
除非条件中要求,否则尽量避免修改可变数据类型
Spec 强度比较
Spec强度变大的依据:
- 前置条件更弱
- 后置条件更强
可以使用强度更大的Spec替代强度更小的Spec
Diagramming specifications
- 点:代表方法的具体实现
- 圈:代表Spec
若方法满足规约$\rightarrow$则落在Spec的范围内。
更强的规约表达为更小的圈
6 抽象数据类型(ADT)
本章大纲:
ADT的特性:
- 表示泄露
- 抽象函数AF
- 表示不变量RI
操作的抽象类型分类:
- Creators 构造器
create new objects of the type,
A creator may take an object as an argument,but not an object of the type
being constructed. - Producers 生产器
create new objects from old objects of the type. - Observers 观察器
take objects of the abstract type and return objects of a different type. - Mutators 变值器,改变对象属性的方法
change objects.
各个特征:
- Creator 可能实现为构造函数或静态函数。
- Creator 实例比如:工厂方法。
- Mutator 通常返回值为 void,但也可能返回非空类型。
Representation Independence
表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。
除非 ADT 的操作指明了具体的pre-和post-condition,否则不能改变ADT的内部表示——spec规定了client和implementer之间的契约。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~