软件构造复习

1.包装器得到的结果是不可变的,但不可变在运行阶段获得,编译阶段无法据此进行静态检查。
Collections.unmodifiableList
Collections.unmodifiableSet
Collections.unmodifiableMap
示例
如图,当要改变listCopy时,静态检测无法检测,而是在运行时抛出异常。

2.除非规约要求或在后置条件声明,否则方法内部不应改变输入参数。
对于mutating ,应尽量不设计规约,以免引发bug。
Diagramming specifications:更强的规约,表达为更小的区域。更强的后置条件意味实现自由度更低;更弱的前置条件意味需要处理更多的可能输入,实现自由度变低,因此面积更小。

例子
如上图所示,规约越弱,面积越大,最弱的ExactlyOne最大,而OneMore,AnyIndex强于ExactlyOne,因此在在后者的圈里。而无法比较规约强弱的两个则不能互相包含。
前置条件:
是否使用前置条件取决于
(1) check的代价;(2) 方法的使用范围
– 如果只在类的内部使用该方法(private),那么可以不使用前置条件,在使用该方法的各个位置进行check——责任交给内部client;
– 如果在其他地方使用该方法(public),那么必须要使用前置条件,若client端不满足则方法抛出异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值