ADT和OOP中的等价性

equal和==

hashcode()和equals()方法总是一起被重写

“==”:引用等价性,指向相同的内存地址,

equals():对象等价性,在自己定义的ADT时,需要重写Object的equals()/

"=="是对基本数据类型,而对于对象类型,使用equals()。

equal的自反、传递、对称

等价的三种定义

1)若AF映射到同样的结果,则等价

2)若两个对象之间满足自反,传递、对称的关系,那么为等价关系

3)站在外部观察者角度发现二者没有区别(对于ADT来说,观察就表示调用该类的运算符)
除非对象被修改了,否则多次调用该对象得到的结果应该时一样的

相等的对象,其hashcode()的结果必须一致

非空:a.equals(null)返回false

hashcode()

重写equal必须重写hashcode,相同的对象一定要有相同的hashcode

可变对象的观察等价性、行为等价性

Object中缺省使用“==”来判断两个对象是否相同

instanceof()操作应该只在equals方法之内使用(不好的操作)

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

1)调用:observer、producer、creater

2)不改变状态

行为等价性:调用对象的任意方法、都展现除一致的结果。

对于可变的对象来说、往往倾向于实现严格的观察等价性,但有些时候,观察等价性可能导致bug,甚至破坏RI

比如:

如果某个mutable的对象包含在Set集合类中,当其发生改变后,集合类的行为不确定性需要小心。

对可变类型,实 现行为等价性即可 。也就是说,只有指 向同样内存空间的objects,才是相等的。 所以对可变类型来说,无需重写这两个函数,直接继承 Object的两个方法即可。 如果一定要判断两个可变 对象看起来是否一致,最好定义一个新的方法。

转载于:https://www.cnblogs.com/boston-o/p/11074608.html

软件构造第三章 第五部分相关推荐

  1. 哈工大软件构造第三章总结

    本章主要介绍了软件开发的生命周期和软件配置的相关知识,更偏向于开发方式与开发工具的介绍章节. (一)软件生命周期 从无到有,软件的生命周期如图所示 (二)传统软件开发模型 基本的为线性过程和迭代过程, ...

  2. 【软件构造】第二章 软件构建的过程和工具(2)

    二.软件构造的编程.系统.工具 [广义软件构造的过程] 1. 编程 (1)开发语言:Java.C.C++.Python等 ·IDE:集成开发环境 - 方便编写代码和管理文件 - 能够编译.构建 - 结 ...

  3. 软件项目管理第三章笔记---项目范围管理

    以下图片及内容整理自西安交通大学软件学院宋永红老师的ppt(课堂回放)中,仅供学习使用,请勿转载或他用 笔记汇总:软件项目管理笔记汇总_Qlz的博客-CSDN博客 第三章 项目范围管理 项目范围与项目 ...

  4. 【软件构造】第一章 软件构造基础(1)

    一.软件构建多维视图 1. 什么是软件 (1)构成 ·程序Program:UI, Algorithms, Utilities, APIs, test cases, etc ·数据Data:files, ...

  5. 软件项目管理-第三章生存期模型

    生存模型 项目生存选择: 1.预测生存期模型:提前进行大量计划工作,然后一次性执行:执行是一个连续的过程. 瀑布模型:只能从上往下,不能返回.编码阶段不能修改需求和设计. 优点:管理方便,只需要严格控 ...

  6. HIT软件构造第六章一二节知识点总结

    文章目录 一.健壮性与正确性 1.健壮性与正确性的定义 2.健壮性与正确性的测量 二.错误与异常处理 1.java中的错误与异常处理 2.异常处理 (1).异常的类型 (2).异常的抛出 (3).创建 ...

  7. 【软件构造】第二章知识整理

    软件配置管理SCM 追踪和控制软件的变化 包含修订控制 + 基线的建立 1.SCI:软件配置项--软件中发生变化的基本变化 2.基线:软件持续变化过程中的稳定时刻 3.CMDB:配置管理数据库,用于存 ...

  8. 2020软件构造实验三

    3实验过程 请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程.阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!). 3.1待开发 ...

  9. 《统计建模与R软件》第三章课后习题3.5-3.11解题答案

    自学R语言,学习完了之后做一做习题,是对知识的一些巩固,也希望可以帮到正在学习的童鞋们. dev.new() par(mfrow=c(1,2)) s<-data.frame(d=c(2,4,3, ...

最新文章

  1. 卡尔曼滤波对gps轨迹数据清洗_卡尔曼滤波:从入门到精通
  2. C++运算符重载(10)
  3. 使用xshell 登陆aws的ec2
  4. python浅蓝色对应的代码_浅蓝色Python模块不在m上工作
  5. vba ado返回集合_利用VBA代码导出工作表中的图片
  6. FloatingActionButton FAB 悬浮按钮
  7. VS2008启动调试,出现“ 已经找到网站 正在等待回应”
  8. 蓝牙---AVRCP协议
  9. 【笔记】Loop曲面细分算法c++实现
  10. Hive sum over partition preceding following 累计求和
  11. java rd th 小票机_英语日期rd、th有什么区别,怎么运用?
  12. 自注意力中的不同的掩码介绍以及他们是如何工作的?
  13. Linux中的各种栈:进程栈 线程栈 内核栈 中断栈
  14. windows 搜索文件内容 txt 、excel 、word、c、java 、压缩文件 等文件内容
  15. 读书笔记 | 自动驾驶中的雷达信号处理(第9章 汽车雷达的应用概述)
  16. AStar2006百度之星程序设计大赛试题
  17. 【线上直播】人机多轮对话的方法综述
  18. QT使用QMovie播放Gif动画
  19. 成都建博会:家居行业数字营销金点子 句句戳心坎,先收藏
  20. 量化投资学习——最优成交剩撤卖

热门文章

  1. Java Review - Queue和Stack 源码解读
  2. Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
  3. python学习笔记(一)——操作符和运算变量
  4. 浙江大学计算机与机械工程,中国26所“机械工程”大学经调整、合并,浙大、西交、同济升级...
  5. 体验使用node.js创建vue+Element-UI项目
  6. 中级软件测试笔试题100精讲_数字IC设计职位经典笔试面试100题(71~80)
  7. java内部错误2755_内部错误2755.(安装软件出问题啦)
  8. mysql带c的命令_mysql命令整理
  9. java医疗框架,java毕业设计_springboot框架的城市智慧医疗服务系统
  10. sqlsourcesafe mysql_mysql权限问题,看不到其它的库!