软件构造博客2

今天的博客有关于ADT和OOP的等价性

等价关系的定义以前是学过的:自反传递对称

在Immutable类型中,如果在AF中能够映射到同样的结果,那么二者就具有等价性

而站在外部观察者角度:对两个对象调用任何相同的操作,都会得到相同的结果,则认为这两个对象是等价
对于equals来说有一些需要注意的事项:
在自定义ADT时,需要重写Object的equals();
对基本数据类型,使用==判定相等
对对象类型,使用equals()
对于equals() in Object:“相等”的对象,其hashCode()的结果必须
一致,不相等的对象,也可以映射为同样的hashCode,但性能会变差
对于Mutalbe种类:
观察等价性:在不改变状态的情况下,两个mutable对象是否看起来一致
行为等价性:调用对象的任何方法都展示出一致的结果
我们往往倾向于实现观察等价性
观察等价性
StringBuilder类的equals继承自Object类 J
行为等价性
这里记录了一些要点:
对可变类型,实现行为等价性即可
只有指向同样内存空间的objects,才是相等的。
所以对可变类型来说,无需重写这两个函数,直接继承Object的两个方法即可。
如果一定要判断两个可变对象看起来是否一致,最好定义一个新的方法
posted @ 2022-05-23 10:18  fsscg  阅读(17)  评论(0编辑  收藏  举报