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

ADT和OOP中的等价性

等价关系

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

不可变类型的等价

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

== VS equals()

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

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

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

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

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


(这一部分不懂诶)

你可能感兴趣的:(软件构造)