zoukankan      html  css  js  c++  java
  • 软件构造 第三章第五节 ADT和OOP中的等价性

    第三章第五节 ADTOOP中的等价性

    1.==与equals

    ==是引用等价性 ;而equals()是对象等价性。 

    == 比较的是索引。更准确的说,它测试的是指向相等(referential equality)。如果两个索引指向同一块存储区域,那它们就是==的。对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象。

    equals()操作比较的是对象的内容,换句话说,它测试的是对象值相等(object equality)。在每一个ADT中,equals操作必须合理定义

     

    2.等价性判断方法

    • 抽象函数:回忆一下抽象函数(AF: R A ),它将具体的表示数据映射到了抽象的值。如果AF(a)=AF(b),我们就说ab相等。
    • 等价关系:等价是指对于关系E T x T ,它满足:
      • 自反性: x.equals(x)必须返回true
      • 对称性: x.equals(y)y.equals(x)的返回值必须相等。
      • 传递性: x.equals(y)truey.equals(z)也为true,那么x.equals(z)必须为true

    以上两种角度/定义实际上是一样的,通过等价关系我们可以构建一个抽象函数(译者注:就是一个封闭的二元关系运算);而抽象函数也能推出一个等价关系。

    • 从使用者/外部的角度去观察:我们说两个对象相等,当且仅当使用者无法观察到它们之间有不同,即每一个观察总会都会得到相同的结果。例如对于两个集合对象 {1,2} {2,1},我们就无法观察到不同:
      • |{1,2}| = 2, |{2,1}| = 2
      • 1 {1,2} is true, 1 {2,1} is true
      • 2 {1,2} is true, 2 {2,1} is true
      • 3 {1,2} is false, 3 {2,1} is false

     

    3.

    Mutble类型应比较索引,immutable应比较值

    观察等价性:在不改变状态的情况下,两个mutable对象是否看起来一致

    行为等价性:调用对象的任何方法都展示出一致的结果

     

    在不可变对象中,由于没有mutator,因此行为等价性和观察等价性一样。

    在java中,大部分实现的mutable类型实现的是观察等价性,但是可能有bug

    在自己写的程序,mutable对象最好实现行为等价类。

  • 相关阅读:
    论文阅读:Extracting COVID-19 diagnoses and symptoms from clinical text: A new annotated corpus and neural event extraction framework
    深度学习入门(二)
    深度学习入门(一)介绍神经网络、logistic回归和梯度下降
    收藏
    Self-Host
    跨域在嵌入页面iframe中设置cookie
    Access-Control-Allow-Origin与跨域
    【git】git add 添加错文件 撤销
    【git】关联本地仓库与远程仓库
    开通测试
  • 原文地址:https://www.cnblogs.com/masteryellow/p/9214301.html
Copyright © 2011-2022 走看看