对象以及数据结构的区别
对象和数据结构在面向对象的过程中慢慢的变得不是那么明显了,在读到代码整洁之道(clean code)的第6章甚至对什么事对象和什么事数据结构产生了疑问。
先用书中的一句话进行总结:对象是暴露行为,数据结构暴露数据。
概念
我们先看看维基百科对于数据结构和对象定义
数据结构
在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。
数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。
大多数数据结构都由数列、记录、可辨识联合、引用等基本类型构成。举例而言,可为空的引用(nullable reference)是引用与可辨识联合的结合体,而最简单的链式结构链表则是由记录与可空引用构成。
不同种类的数据结构适合不同种类的应用,部分数据结构甚至是为了解决特定问题而设计出来的。例如B树即为加快树状结构访问速度而设计的数据结构,常被应用在数据库和文件系统上。
正确的数据结构选择可以提高算法的效率(请参考算法效率)。在计算机程序设计的过程中,选择适当的数据结构是一项重要工作。许多大型系统的编写经验显示,程序设计的困难程度与最终成果的质量与表现,取决于是否选择了最适合的数据结构。
总结一下:
- 数据结构是数据在存储时候所展现的一定的结构形式。
- 是两个方法交互的接口或者说是媒介。
- 数据结构是面向问题提出的解决数据处理的结构。
- 数据结构的变更可以提高代码的执行效率,也是算法的基础。
对象:
在计算机科学中,对象(英语:object),台湾译作物件,是一个存储器地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素。
在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例(Instance)。
总结一下:
- 对象可以包含变量、方法、数据结构。
我的理解,数据结构和对象,在面向对象的编程中,界线越来越弱了,不过究其本质,数据结构是一系列的数据的组合形式,而对象是用来实现一定功能的类。两者的重点有不同。
在代码整洁之道里面提到:
对象暴露行为,隐藏数据,便于添加新对象类型而无需修改既有的行为,同时难以在既有的对象中添加新的行为;数据结构暴露数据,没有明显的行为,便于向既有的数据结构添加新的行为,同时难以向既有的函数增加新的数据结构。
我们有时候会希望能够灵活的添加新的数据类型,这部分使用对象。
希望灵活的添加行为,这部分使用数据结构。
理解
在面向对象中,我们定义的很多的只有基本属性和存储值操作的对象准确地来说应该算是数据结构。而真正的对象应该是使用期方法的一些列类。
如springboot配置的DataSource
DataSourceProperties这个类更多的像是一个数据的组织形式。
而使用这个的DataSourceAutoConfiguration跟多的是里面的方法。