软构复习总结3

ADT和OOP中的“等价性”

ADT是对数据的抽象, 体现为一组对数据的操作

对于抽象数据类型,抽象函数 (AF)解释了如何将具体表⽰值解释为抽 象类型的值,并且我们看到了抽象函数的选择如何决定如何编写实 现 ADT 的每个操作的代码.

基于抽象函数AF定义ADT的等价操作

如果用AF定义相等的话,AF映射到同样的结果,就等价。

用观察器定义等价:

站在外部观察者⻆度:对两个对象调⽤相同的操作,都会得到相同的结果,则认为两个对象是等价的。反之亦然。

而这里最重要的是==和.equals()的区分

==为引用等价性,而equal()对象等价性

==对基本数据类型,使用==判定相等,对对象类型,使用equal(),

==是在判断两个对象身份标识ID是否相等,默认的Object.equals使用==实现,但应该重写equals()判断是否相等。

哈希表实现了键-值映射,键值对中的key被映射为hashcode,对应到数组的index,hash

code决定了数据被存储到数组的哪个位置。

Hashtable 的RI中基本要求就是key在slot中的位置由hashcode确定。

程序中多次调用同一对象的 hashCode方法,都要返回相同值,同时等价的对象必须有相同的hashCode,但不相等的对象,也可以映射为同样的hashCode,但性能会变差

重写hashCode()

 观察等价性与行为等价性:

观察等价性:在不改变状态的情况下,两个mutable对象是否看起来一致。

行为等价性:调用对象的任何方法都展示出一致的结果。

对可变类型往往倾向用严格的观察等待性,但有可能会导致bug破坏RI

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值