ADT和OOP中的等价性
等价关系
ADT是对数据的抽象,体现为一组数据的操作。
抽象函数AF是表示空间到抽象空间的映射,定义了ADT的等价操作。
等价关系:自反、传递、对称。
不可变类型的等价
抽象函数AF映射到同样的结果则等价。
== VS equals()
==是引用等价性,而equals是对象等价性
Object中缺省equals实现方法是判断引用等价性
可变类型的等价性分为以下两种:
观察等价:在不改变对象状态的情况下(不使用mutator),两个mutable对象是否看起来一致。
行为等价:调用对象的任何方法都展示出一致的结果。
可变类型倾向于实现严格的观察等价性。但在有些时候,观察等价性可能导致bug,甚至可能破坏RI。
可变类型的equals实现行为等价性即可,即只有指向同样内存空间的objects,才是相等的。
不可变类型应该重写equals()和hashCode();
可变类型不应该重写equals()和hashCode() ,采用Object默认实现的即可。

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

被折叠的 条评论
为什么被折叠?



