当前位置: 首页 > 知识库问答 >
问题:

抽象在编程中意味着什么?

申屠昌胤
2023-03-14

我正在学习python,我不确定是否理解以下语句:“函数(包括它的名字)可以捕捉我们对问题的心理组块或抽象。”

我不理解粗体部分在编程方面的含义。引用自http://www.openbookproject.net/thinkcs/python/english3e/functions.html

如何像计算机科学家一样思考,第3版。

谢谢你!

共有3个答案

仲阳朔
2023-03-14

如维基百科所定义:抽象(计算机科学)

抽象试图从一个公共模式中找出细节,这样程序员就可以接近人类思维的水平工作,而忽略了在实践中很重要但对解决问题并不迫切的细节。

基本上,它正在消除问题的细节。举个例子,画一个正方形需要几个步骤,但我只想要一个画正方形的函数。

阎元徽
2023-03-14

理解抽象的一个好方法是通过抽象类。

假设我们正在编写一个模拟房子的程序。房子将有几个不同的房间,我们将把它们表示为对象。我们为浴室、厨房、客厅、餐厅等定义了一个类。

然而,所有这些都是房间,因此共享多个属性(门窗、平方英尺等),但房间永远不可能独立存在。。。它总是会是某种类型的房间。

然后创建一个名为Room的抽象类是有意义的,它将包含所有房间共享的属性,然后让厨房、客厅等类继承抽象类Room。

房间的概念是抽象的,只存在于我们的头脑中,因为任何实际存在的房间都不仅仅是一个房间;它是卧室、客厅或教室。

我们希望我们的代码因此代表我们的“精神组块”。它让一切都更整洁,更容易处理。

安明亮
2023-03-14

抽象是所有计算机科学的核心概念。如果没有抽象,我们仍然会使用机器代码编程,或者更糟糕的是,我们一开始就没有计算机。所以,这是一个非常好的问题。

什么是抽象

抽象事物意味着给事物命名,这样名称就抓住了函数或整个程序的核心功能。

你参考的那本书给出了一个例子,书中说

假设我们和海龟一起工作,我们需要的一个常见操作是画正方形。“画一个正方形”是一个抽象的概念,或者说是一个思维块,它包含了许多较小的步骤。因此,让我们编写一个函数来捕获这个“构建块”的模式:

暂时忘掉海龟,想想画一个正方形。如果我告诉你(在纸上)画一个正方形,你马上知道该怎么做:

  • 画正方形=

你可以做到这一点,没有进一步的问题,因为你知道什么是正方形,而不需要我一步一步地告诉你。在这里,正方形一词是“画一个长方形,所有边的长度都一样”的抽象。

抽象深入

等等,你怎么知道矩形是什么?这是对以下内容的另一种抽象:

  • 长方形=

当然,它是连续的、在线的、平行的、垂直的、连接的,这些都是众所周知的概念的抽象。

现在,想象一下,每次你想要画一个矩形或正方形,你必须给出矩形的完整定义,或者解释线、平行线、垂直线和连接线——这样做太长了。

抽象的真正力量

这就是抽象的第一种力量:它们使谈话和做事变得更容易。

抽象的第二个力量来自可组合性的良好特性:一旦你定义了抽象,你可以组成两个或更多的抽象来形成一个新的、更大的抽象:假设你厌倦了画方块,但你真的想画一栋房子。假设我们已经定义了三角形,那么我们可以定义:

  • 房子=

接下来,你想要一个村庄:

  • 村庄=

哦,等等,我们想要一个城市——我们有一条新的概念街道:

  • 城市=

等等

这一切如何适用于编程?

如果在规划你的程序(一个被称为分析和设计的过程)的过程中,你发现你试图解决的问题有很好的抽象,你的程序就会变得更短,因此更容易编写,也许更重要的是更容易阅读。这样做的方法是尝试和掌握定义你的问题的主要概念——就像在画房子的(简化的)例子中,这是正方形和三角形,画一个村庄就是房子。

在编程中,我们将抽象定义为函数(以及一些其他构造,如类和模块,但现在让我们关注函数)。函数本质上是对一组单个语句进行命名,因此函数本质上是一种抽象——有关详细信息,请参阅本书中的示例。

这一切的美丽

在编程中,抽象可以决定生产率。这就是为什么经常将常用函数收集到库中,供其他人重用的原因。这意味着您不必担心细节,只需要了解如何使用现成的抽象。显然,这会让你的工作更轻松,因此你可以更快地工作,从而提高工作效率:

例子:

想象一下,有一个名为“nicepic”的图形库,它包含上面讨论的所有抽象的预定义函数:矩形、正方形、三角形、房子、村庄。

假设您想基于上述抽象创建一个程序,绘制一幅漂亮的房子图片,您只需编写以下内容:

import nicepic
draw_house()

所以这只是两行代码,可以得到更详细的东西。那不是很美妙吗?

希望这有帮助。

 类似资料:
  • 问题内容: 我正在学习python,但不确定是否理解以下语句:“该函数(包括其名称)可以捕获 我们对问题的看法或抽象 。” 这是我不理解编程含义的粗体部分。引用来自http://www.openbookproject.net/thinkcs/python/english3e/functions.html 像计算机科学家一样思考,第3版。 谢谢 ! 问题答案: 抽象是所有计算机科学中的核心概念。没有

  • 我想创建一个

  • 问题内容: 下面是代码片段。 有人可以向我解释@符号在Java中的含义吗? 问题答案: 这是一个注释。 注释是元数据的一种形式。它们提供的程序数据不属于程序本身。注释对其注释的代码的操作没有直接影响。 注释确实会影响工具和库对待程序的方式,进而会影响正在运行的程序的语义。可以从源文件,类文件中读取注释,也可以在运行时从中读取注释。

  • 问题内容: 异步在Ajax中意味着什么?以及Ajax如何知道何时在不进行服务器轮询的情况下提取数据? 问题答案: 异步意味着脚本将向服务器发送请求,并继续执行它而无需等待答复。收到答复后,立即触发浏览器事件,该事件进而允许脚本执行关联的操作。 Ajax知道何时从服务器提取数据,因为您告诉它何时进行处理。

  • 问题内容: 使用或不使用变量访问变量之间有什么区别? 问题答案: 所述使它成为 用户定义 会话 变量。否则它将是 本地范围的 变量(在存储过程中),您必须先在本地使用它。如果需要,还可以设置 全局 系统 变量(使用或)。以及带有或或的会话 系统 变量。 有关详细信息,从文档:如果没有修饰符,改变会话变量(这就是为什么你在存储过程中的第一个当地人)。如果设置了多个系统变量,则该语句中的最新变量或修饰

  • 问题内容: 我对gulp比较陌生,我想知道gulp任务到底是做什么的?我已经搜集到它通常在a 和after之后运行,但是它还必须更多。我一直无法在网上或gulp的文档中找到任何东西,我真的很想了解我在使用什么。 编辑我发现了这个,但是在解释它方面做得很差 问题答案: 从Node文档中: https://nodejs.org/api/stream.html#stream_visible_pipe_d