抽象数据类型(ADT)和面向对象编程(OOP)3.5 ADT和OOP中的等价性

instancsof动态类型检查。除了在判断是否与应生成的类型一样外都不使用,getClass()同样

==引用等价性

equals()对象等价性  基本数据类型使用

在自定义ADT时需要重写Object的equals()   对象类型使用

a.equals(null) returns false

equals()的自反性:自己等自己   传递性:a等b,b等c,则a等c   对称性:a等b,则b等a

重写equals()必须也要重写hashCode(),相等的对象必须具有相同的散列码,如果没有重写,会从Object中得到一个,它是基于对象的地址。

hashCode()

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

当两个对象不能通过观察区别,则等价

观察等价性:通过只调用observer,producer和creator方法。 这测试两个参考在程序的当前状态中是否“看起来”相同

行为等价性:不能通过任何代码加以区分,即使在一个代码上调用了mutator,而另一个代码则不会调用它。 这将测试这两个引用在这个和所有将来的状态中是否会“表现”相同。

对于不可变的对象,观察和行为的平等是相同的,因为没有任何增变方法

对于可变对象倾向于观察等价性

大多数可变数据类型(例如Collections)使用观察等价性

其他可变类(如StringBuilder)使用行为等价性

有时观察等价性会有bug,甚至破坏RI

可变类型实现行为等价性即可,只有只想同样内存空间的object才相等,可变类型只需要从Object继承equals()  hashCode()即可

一定要观察等价性可以写一个新方法

不可变类型一定要重写equals()和hashCode()

原文地址:https://www.cnblogs.com/xgl122/p/9218496.html

时间: 2024-08-29 18:10:44

抽象数据类型(ADT)和面向对象编程(OOP)3.5 ADT和OOP中的等价性的相关文章

软件构造 第三章第五节 ADT和OOP中的等价性

第三章第五节 ADT和OOP中的等价性 1.==与equals ==是引用等价性 :而equals()是对象等价性. == 比较的是索引.更准确的说,它测试的是指向相等(referential equality).如果两个索引指向同一块存储区域,那它们就是==的.对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象. equals()操作比较的是对象的内容,换句话说,它测试的是对象值相等(object equality).在每一个ADT中,equals操作必须合理定义 2.等价性

一百零六、SAP的OOP面向对象编程,OO-ALV的简介

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构. 基本概念: 1.对象(Object)是一个现实实体的抽象.一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应.这些对象操作有时称为方法.对象是个动态的概念,其中的属性反映了对象当前的状态. 2.类(Class)用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.每个对象是类的

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

抽象数据类型总结:复数 adt 和 FIFO 队列adt

定义:抽象数据类型(abstract data type, ADT)是指"只"通过接口进行访问的数据类型.我们将那些使用ADT的程序叫做客户,将那些确定数据类型的程序叫做实现. 客户程序除了通过接口中提供的那些操作外,并不访问任何数据值.数据的表示和操作都在接口的实现里,和客户完全分离. 数据结构.数据类型和抽象数据类型 数据结构.数据类型和抽象数据类型,这3个术语在字面上虽不同但相近,反映出它们在含义上既有区别又有联系. 数据结构 数据结构是计算机科学与技术领域常用的术语.它用来反映

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想(OOP)(转发)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

第六章 Python类(面向对象编程)

什么是面向对象编程? 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构.Python就是这种编程语言. 面向对象程序设计中的概念主要包括:对象.类.继承.动态绑定.封装.多态性.消息传递.方法. 1)对象:类的实体,比如一个人. 2)类:一个共享相同结构和行为的对象的集合.通俗的讲就是分类,比如人是一类,动物是一类. 3)继承:类之间的关系,比如猫狗是一类,他们都有四条腿,狗继承了这个四条腿,拥有了这个属性. 4)动态绑定:在不

1Python廖--面向对象编程

面向对象编程 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度. 而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列

JAVA的面向对象编程--------课堂笔记

JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.   为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参