对象以及数据结构的区别

对象以及数据结构的区别

对象和数据结构在面向对象的过程中慢慢的变得不是那么明显了,在读到代码整洁之道(clean code)的第6章甚至对什么事对象和什么事数据结构产生了疑问。

先用书中的一句话进行总结:对象是暴露行为,数据结构暴露数据。

概念

我们先看看维基百科对于数据结构和对象定义

数据结构

在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。
数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。

大多数数据结构都由数列、记录、可辨识联合、引用等基本类型构成。举例而言,可为空的引用(nullable reference)是引用与可辨识联合的结合体,而最简单的链式结构链表则是由记录与可空引用构成。

不同种类的数据结构适合不同种类的应用,部分数据结构甚至是为了解决特定问题而设计出来的。例如B树即为加快树状结构访问速度而设计的数据结构,常被应用在数据库和文件系统上。

正确的数据结构选择可以提高算法的效率(请参考算法效率)。在计算机程序设计的过程中,选择适当的数据结构是一项重要工作。许多大型系统的编写经验显示,程序设计的困难程度与最终成果的质量与表现,取决于是否选择了最适合的数据结构。

总结一下:

  • 数据结构是数据在存储时候所展现的一定的结构形式。
  • 是两个方法交互的接口或者说是媒介。
  • 数据结构是面向问题提出的解决数据处理的结构。
  • 数据结构的变更可以提高代码的执行效率,也是算法的基础。

对象:

在计算机科学中,对象(英语:object),台湾译作物件,是一个存储器地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素。

在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例(Instance)。

总结一下:

  • 对象可以包含变量、方法、数据结构。

我的理解,数据结构和对象,在面向对象的编程中,界线越来越弱了,不过究其本质,数据结构是一系列的数据的组合形式,而对象是用来实现一定功能的类。两者的重点有不同。

在代码整洁之道里面提到:

对象暴露行为,隐藏数据,便于添加新对象类型而无需修改既有的行为,同时难以在既有的对象中添加新的行为;数据结构暴露数据,没有明显的行为,便于向既有的数据结构添加新的行为,同时难以向既有的函数增加新的数据结构。

​ 我们有时候会希望能够灵活的添加新的数据类型,这部分使用对象。

​ 希望灵活的添加行为,这部分使用数据结构。

理解

在面向对象中,我们定义的很多的只有基本属性和存储值操作的对象准确地来说应该算是数据结构。而真正的对象应该是使用期方法的一些列类。

如springboot配置的DataSource

DataSourceProperties这个类更多的像是一个数据的组织形式。

在这里插入图片描述

而使用这个的DataSourceAutoConfiguration跟多的是里面的方法。

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
堆和栈都是在计算机内存中用于存储数据的数据结构,但它们在功能和使用方式上有一些重要的区别。 1. 存储方式: - 堆:堆是动态分配的内存区域,由程序员手动分配和释放。它通常用于存储动态分配的对象数据结构。在堆上分配的内存需要手动释放,以避免内存泄漏。 - 栈:栈是一种自动分配的内存区域,由编译器自动分配和释放。它通常用于存储局部变量和函数调用的上下文。在函数结束时,栈上的内存会自动释放。 2. 内存管理: - 堆:由程序员手动管理内存,需要显式地分配和释放内存。如果没有正确释放堆上的内存,可能会导致内存泄漏。 - 栈:由编译器自动管理内存,无需手动分配和释放。当函数执行完成时,栈上的内存会自动释放。 3. 数据访问方式: - 堆:堆上的数据可以通过指针进行随机访问。堆中的数据没有特定的顺序,可以按照需要进行读取和修改。 - 栈:栈上的数据只能按照"先进后出"的顺序进行访问,即最新添加的数据最先被访问,最先添加的数据最后被访问。 4. 内存分配速度: - 堆:堆的内存分配速度比较慢,因为需要在运行时动态分配。 - 栈:栈的内存分配速度比较快,因为只需要通过移动栈指针来分配和释放内存。 总结来说,堆和栈在存储方式、内存管理、数据访问方式和内存分配速度等方面存在区别。堆适用于动态分配和释放内存的场景,而栈适用于实现函数调用和存储局部变量的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值