软件构造:3-5 Equality in ADT and OOP

博客围绕ADT和OOP中的等价性展开。介绍了ADT是数据抽象及抽象函数AF定义等价操作,阐述等价关系特性。说明了不可变类型等价判断依据,对比了==和equals(),还区分了可变类型的观察等价和行为等价,给出可变与不可变类型重写equals()和hashCode()的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ADT和OOP中的等价性

等价关系

ADT是对数据的抽象,体现为一组数据的操作。
抽象函数AF是表示空间到抽象空间的映射,定义了ADT的等价操作。
等价关系:自反、传递、对称。

不可变类型的等价

抽象函数AF映射到同样的结果则等价。

== VS equals()

==是引用等价性,而equals是对象等价性
Object中缺省equals实现方法是判断引用等价性

可变类型的等价性分为以下两种:
观察等价:在不改变对象状态的情况下(不使用mutator),两个mutable对象是否看起来一致。
行为等价:调用对象的任何方法都展示出一致的结果。

可变类型倾向于实现严格的观察等价性。但在有些时候,观察等价性可能导致bug,甚至可能破坏RI。

可变类型的equals实现行为等价性即可,即只有指向同样内存空间的objects,才是相等的。

不可变类型应该重写equals()和hashCode();
可变类型不应该重写equals()和hashCode() ,采用Object默认实现的即可。


(这一部分不懂诶)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值