软件构造第三章 第五部分
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
软件构造第三章 第五部分相关推荐
- 哈工大软件构造第三章总结
本章主要介绍了软件开发的生命周期和软件配置的相关知识,更偏向于开发方式与开发工具的介绍章节. (一)软件生命周期 从无到有,软件的生命周期如图所示 (二)传统软件开发模型 基本的为线性过程和迭代过程, ...
- 【软件构造】第二章 软件构建的过程和工具(2)
二.软件构造的编程.系统.工具 [广义软件构造的过程] 1. 编程 (1)开发语言:Java.C.C++.Python等 ·IDE:集成开发环境 - 方便编写代码和管理文件 - 能够编译.构建 - 结 ...
- 软件项目管理第三章笔记---项目范围管理
以下图片及内容整理自西安交通大学软件学院宋永红老师的ppt(课堂回放)中,仅供学习使用,请勿转载或他用 笔记汇总:软件项目管理笔记汇总_Qlz的博客-CSDN博客 第三章 项目范围管理 项目范围与项目 ...
- 【软件构造】第一章 软件构造基础(1)
一.软件构建多维视图 1. 什么是软件 (1)构成 ·程序Program:UI, Algorithms, Utilities, APIs, test cases, etc ·数据Data:files, ...
- 软件项目管理-第三章生存期模型
生存模型 项目生存选择: 1.预测生存期模型:提前进行大量计划工作,然后一次性执行:执行是一个连续的过程. 瀑布模型:只能从上往下,不能返回.编码阶段不能修改需求和设计. 优点:管理方便,只需要严格控 ...
- HIT软件构造第六章一二节知识点总结
文章目录 一.健壮性与正确性 1.健壮性与正确性的定义 2.健壮性与正确性的测量 二.错误与异常处理 1.java中的错误与异常处理 2.异常处理 (1).异常的类型 (2).异常的抛出 (3).创建 ...
- 【软件构造】第二章知识整理
软件配置管理SCM 追踪和控制软件的变化 包含修订控制 + 基线的建立 1.SCI:软件配置项--软件中发生变化的基本变化 2.基线:软件持续变化过程中的稳定时刻 3.CMDB:配置管理数据库,用于存 ...
- 2020软件构造实验三
3实验过程 请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程.阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!). 3.1待开发 ...
- 《统计建模与R软件》第三章课后习题3.5-3.11解题答案
自学R语言,学习完了之后做一做习题,是对知识的一些巩固,也希望可以帮到正在学习的童鞋们. dev.new() par(mfrow=c(1,2)) s<-data.frame(d=c(2,4,3, ...
最新文章
- 卡尔曼滤波对gps轨迹数据清洗_卡尔曼滤波:从入门到精通
- C++运算符重载(10)
- 使用xshell 登陆aws的ec2
- python浅蓝色对应的代码_浅蓝色Python模块不在m上工作
- vba ado返回集合_利用VBA代码导出工作表中的图片
- FloatingActionButton FAB 悬浮按钮
- VS2008启动调试,出现“ 已经找到网站 正在等待回应”
- 蓝牙---AVRCP协议
- 【笔记】Loop曲面细分算法c++实现
- Hive sum over partition preceding following 累计求和
- java rd th 小票机_英语日期rd、th有什么区别,怎么运用?
- 自注意力中的不同的掩码介绍以及他们是如何工作的?
- Linux中的各种栈:进程栈 线程栈 内核栈 中断栈
- windows 搜索文件内容 txt 、excel 、word、c、java 、压缩文件 等文件内容
- 读书笔记 | 自动驾驶中的雷达信号处理(第9章 汽车雷达的应用概述)
- AStar2006百度之星程序设计大赛试题
- 【线上直播】人机多轮对话的方法综述
- QT使用QMovie播放Gif动画
- 成都建博会:家居行业数字营销金点子 句句戳心坎,先收藏
- 量化投资学习——最优成交剩撤卖
热门文章
- Java Review - Queue和Stack 源码解读
- Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
- python学习笔记(一)——操作符和运算变量
- 浙江大学计算机与机械工程,中国26所“机械工程”大学经调整、合并,浙大、西交、同济升级...
- 体验使用node.js创建vue+Element-UI项目
- 中级软件测试笔试题100精讲_数字IC设计职位经典笔试面试100题(71~80)
- java内部错误2755_内部错误2755.(安装软件出问题啦)
- mysql带c的命令_mysql命令整理
- java医疗框架,java毕业设计_springboot框架的城市智慧医疗服务系统
- sqlsourcesafe mysql_mysql权限问题,看不到其它的库!