软件构造期末复习2

软件构造期末复习2

复习ADT与OOP题目时的一点整理,记录下我个人角度的易错点与反思

  • 行为等价性

    可以是针对方法的、也可以是针对对象的,别死板。

  • 错误说法:若在方法的 post-condition中声明"client端不能修改该方法所返回的变量",可以减少该方法的潜在bug

​ 本来觉得读起来问题不大,但是答案认定为错。我估计依据是原来ppt的表述是也可能产生许多潜在bug。(如果不是为了做题没必要抠太细)

  • immutable的ADT的rep

关于rep的严格定义没有找到,但是根据实验指导书大概可以理解为成员属性类型及其数值吧(常见说法:不要改变原有rep)

正确说法:一个 immutable的ADT其rep可以是 mutable的

理解为成员属性类型可以是可变类型的,比如Lab3的VoteItem类

正确说法:除了初始化, Immutable的类中一定不能存在其他任何改变rep的方法

​ eg: 一个表示分数的类,rep里有两个int,表示分子分母,创建时被初始化为了2和4,但是在调用Observer观察时被化简成了1和2,在外界看来它所 表达的都是1/2,没有区别。但是不要改原来的数据域,即便表达的抽象含义没改。

思考:rep 与 R 区别

  • R空间A空间解释函数AF

R空间是ADT的内部表示的空间,

A空间是ADT能够表示的存在于实际当中的

ADT的开发者关注的是R空间,client关注的是A空间。

注意:spec不能暴露实现细节,不应该暴露局部变量,也不应该暴露私有的数据域(R的数值),A的数值当然可以暴露给客户。

  • 表示泄露

​ 我原本以为表示泄露就是client拿到数据域并修改的已然结果,但是做题后发现表示泄露指的是潜在危险。

​ 表示泄露的定义:client可以拿到数据域的本身或别名。一旦表示泄露,client就有可能无意间改动数据,

eg:如果在设计中,要求一个ADT是Immutable的,而如果它出现了表示泄露,就有可能违反Immutable的原则。

正确说法:只要有 public的field,就定有表示泄露

解释:client可以拿到数据域的本身

错误说法:只要有非final的field,就定产生表示泄露

解释:与client拿到数据域的本身或别名无关

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值