我正在学习python,我不确定是否理解以下语句:“函数(包括它的名称)可以捕获--我们对问题的思维块或抽象。”
这部分用粗体表示,我不理解编程的意义。这句话来自http://www.openbookproject.net/thinkcs/python/english3e/functions.html
如何思考像一个计算机科学家,3版。
谢谢!
发布于 2014-01-19 18:39:13
抽象是计算机科学的核心概念。如果没有抽象,我们仍然会使用机器代码进行编程,或者更糟糕的是,一开始就没有计算机。这是个很好的问题。
抽象是什么
抽象某物意味着给事物命名,这样名称就能捕捉函数或整个程序所做的核心内容。
书中给出了一个例子,书中写着
假设我们和海龟一起工作,我们需要的一个常见操作是画正方形。“画正方形”是一些较小的步骤的抽象,或精神上的块。因此,让我们编写一个函数来捕获这个“构建块”的模式:
暂时忘了海龟吧,想想画个正方形。如果我告诉你(在纸上)画一个正方形,你马上就知道该怎么做:
你可以不问进一步的问题,因为你知道什么是正方形,不需要我一步一步地告诉你。在这里,方格这个词是“绘制一个长度相同的矩形”的抽象。
抽象运行深度
等等,你怎么知道矩形是什么?这是对以下内容的另一个抽象:
当然,它继续和在线,平行,垂直,连接都是众所周知的概念的抽象.
现在,想象一下,每次你想要画一个矩形或一个正方形时,你必须给出一个矩形的完整定义,或者解释直线、平行线、垂直线和连接线--要花太长时间才能这样做。
抽象的真正力量
这是抽象的第一种力量:它们使谈话和完成任务变得容易得多。
抽象的第二种力量来自于可组合性的优点:一旦你定义了抽象,你就可以组合两个或更多的抽象,形成一个新的、更大的抽象:假设你厌倦了画正方形,但你真的想画房子。假设我们已经定义了三角形,那么我们就可以定义:
接下来,你想要一个村庄:
哦,等等,我们想要一个城市--我们有了一条新的概念街
等等..。
这一切如何应用于编程?
如果在规划程序的过程中(这是一个被称为分析和设计的过程),您发现对您想要解决的问题有很好的抽象,那么您的程序就会变得更短,从而更容易编写,更重要的是更容易阅读。这样做的方法是试图掌握主要的概念来定义你的问题--就像(简化的)画房子的例子,这是正方形和三角形,画一个村庄--它就是房子。
在编程中,我们将抽象定义为函数(以及类和模块等一些其他构造,但现在让我们关注函数)。函数本质上是命名一组单个语句,因此函数本质上是一种抽象--参见您书中的示例以获得详细信息。
这一切的美丽,
在编程中,抽象可以提高生产力,也可以降低生产力。这就是为什么很多时候,常用的函数被收集到库中,其他人可以重用。这意味着您不必担心细节,您只需要了解如何使用现成的抽象。显然,这会使事情变得更容易,这样你就可以工作得更快,从而更有效率:
示例
想象一下,有一个叫做"nicepic“的图形库,它包含了前面讨论的所有抽象的预定义函数:矩形、正方形、三角形、房屋、村庄。
假设您想要根据上面的抽象来创建一个程序,它可以描绘出一幅漂亮的房子图片,您所要写的就是:
import nicepic
draw_house()因此,这只是两行代码,以获得更详细的内容。这不是很棒吗?
希望这能有所帮助。
发布于 2014-01-19 17:44:22
理解抽象的一个很好的方法是通过抽象类。
假设我们正在编写一个模拟房子的程序。这所房子将有几个不同的房间,我们将把它们表示为物体。我们定义了浴室、厨房、客厅、餐厅等的类别。
然而,所有这些都是房间,因此共享多个属性(门窗、平方英尺等)。但是,一个房间不可能独自存在.它永远是某种类型的房间。
然后创建一个名为Room的抽象类,它将包含所有房间共享的属性,然后拥有厨房、起居室等类,继承抽象类Room。
房间的概念是抽象的,只存在于我们的脑海中,因为任何真正存在的房间不仅仅是一个房间,它是一个卧室、一个客厅或一个教室。
因此,我们希望我们的代码代表我们的“精神块”。它使一切变得更整洁,更容易处理。
发布于 2014-01-19 17:38:36
正如在科学)上定义的
抽象试图从一种常见的模式中筛选出细节,这样程序员就可以接近人类思维的水平,而忽略了在实践中重要的细节,而不是迫切需要解决的问题。
从根本上讲,它是在消除问题的细节。例如,绘制一个正方形需要几个步骤,但我只想要一个绘制正方形的函数。
https://stackoverflow.com/questions/21220155
复制相似问题