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