软构笔记-8-ADT和OOP中的“等价性”

发布时间 2023-05-20 11:55:58作者: No3eTB

软构8

本章大纲:

  • 理解特性之间的等价关系
  • 站在观察者角度,利用AF,定义不可变对象之间的等价关系
  • 引用等价性和对象等价性
  • 可变数据类型的观察等价性和行为等价性
  • 理解 Object 的契约,正确实现等价关系判定

ADT 的等价操作

  • ADT 是对数据的抽象

  • 抽象函数 AF :内部表示抽象表示

  • 基于抽象函数 AF 定义 ADT 的等价操作

不可变数据类型的等价性

  • 使用AF来判断
    AF映射到同样的结果,则等价
  • 通过观察来判断
    站在外部观察者角度:对两个对象调用任何相同的操作,都会得到相同的结果,则认为这两个对象是等价的。反之亦然!

== vs. equals()

  • == :引用等价性
  • equals() :对象等价性

在自定义 ADT 时,需要重写Object的equals()

对基本数据类型,使用 == 判定相等
对对象类型,使用 equals()

public class Object {
	...
	public boolean equals(Object that) {
		return this == that;
	}
}

在Object中实现的缺省equals()是在判断引用等价性。

可变数据类型的等价性

两种方法:

  • 观察等价性: 在不改变状态的情况下,两个mutable对象是否看起来一致
  • 行为等价性: 调用对象的任何方法都展示出一致的结果