软件构造笔记相关——ADT设计

immutabile:String,BigInteger基本类型以及其封装对象类型,包装器(包装器的不可变是在运行阶段获得的,编译阶段无法据此进行静态检查)

mutable:StringBuilder,List,Set,Map

防御式拷贝

安全的使用可变类型:局部变量;不会涉及共享;只有一个引用

final:引用不可变但是指向的值是可变的

可变的引用也可以只想不变的值

Iterator:mutable迭代器

规约,行为等价性
前置条件:对客户端的约束,在使用方法时必须满足的条件
后置条件:对开发者的约束,方法结束时必须满足的条件
前置条件满足的情况下,必须满足后置条件
静态类型声明是一种规约,可据此进行静态类型检查
方法前的注释也是一种规约,但需人工判定是否满足

内部实现的细节不能在规约中呈现,应该放在代码实现体内部注释
不限定太强的前置条件而是在后置条件中抛出异常:输入不合法

抽象数据类型:ADT

抽象类型:强调作用于数据上的操作,无需关心数据时如何存储的,只需设计和使用操作即可。
可变类型的对象:提供了可以改变其内部数据的值的操作
不可变类型的对象:其操作不改变内部值而是构造新的对象

Creators:可能实现为构造函数或者静态函数
Producers:一般是返回相同类型的对象
Observers:
Mutators:一般情况下返回值为void(改变对象属性)

表示独立性:client在使用ADT时无需考虑内部实现,ADT内部表现不应影响外部spec和客户端

保持不变性,避免表示泄露
表示不变性RI:某个具体的表示是否是合法的
不同的内部表示需要设计不同的AF和RI

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值