当前位置: 首页 > 面试题库 >

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

艾灿
2023-03-14
问题内容

我正在学习python,但不确定是否理解以下语句:“该函数(包括其名称)可以捕获 我们对问题的看法或抽象 。”

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

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

谢谢 !


问题答案:

抽象是所有计算机科学中的核心概念。没有抽象,我们仍将使用机器代码进行编程,或者更糟糕的是首先没有计算机。所以恕我直言,这是一个非常好的问题。

什么是 抽象

抽象 事物意味着 事物 命名 ,以便该名称抓住功能或整个程序的核心作用。

您参考的书中给出了一个示例,其中说

假设我们正在使用海龟,并且我们需要的常见操作是绘制正方形。“画一个正方形”是许多较小步骤的抽象或思想块。因此,让我们编写一个函数来捕获此“构建块”的模式:

暂时忘掉海龟,只想画一个正方形即可。如果我告诉您在纸上画一个正方形,您会立即知道该怎么做:

  • 绘制一个正方形=> 绘制一个所有边长均相同的矩形。

您可以执行此操作而无需其他问题,因为您完全知道 正方形 是什么,而无需我一步一步地告诉您。在这里,“ 正方形 ”一词是“绘制所有边长均相同的矩形”的
抽象

抽象深入

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

  • 矩形 =>绘制两条长度相同的彼此平行的线,然后添加两条垂直于其他两条直线的平行线,它们的长度也相同,但长度可能与前两条长度不同。

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

现在,想象一下每次要绘制矩形或正方形时,都必须给出矩形的完整定义,或者说明直线,平行线,垂直线和连接线-这样做会花费太长时间。

抽象的真正力量

是抽象 的第一个 力量: 它们使交谈和完成事情变得更加容易。

抽象的第二种力量来自于 可组合性 的好特性:定义了抽象之后,就可以 组成
两个或多个抽象以形成一个新的更大的抽象:说您厌倦了绘制正方形,但是您确实想绘制一 所房子 。假设我们已经定义了 三角形 ,那么我们可以定义:

  • 房子 =>画一个 正方形 ,上面有一个 三角形

接下来,您要一个村庄:

  • 村庄 =>彼此相邻画多 栋房子

哦,等等,我们想要一个城市-我们有一条新的概念

  • city =>吸引许多彼此靠近的 村庄 ,用更多的 房屋 填充空白处,但留出空间留给 街道
  • 街道 =>(街道的某些定义)

等等…

这一切如何适用于编程?

如果在计划程序的过程(称为 分析和设计
的过程)中,您找到了要解决的问题的良好抽象,那么程序就会变得更短,因此更容易编写,而且可能更重要的是,它更易于阅读。执行此操作的方法是尝试掌握定义问题的主要概念-
如在绘制 房屋 的(简化的)示例中,这是 正方形三角形 ,在绘制 乡村的 过程中是 房屋

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

这一切的美丽

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

范例

想象有一个名为“ 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