抽象是所有计算机科学的核心概念。如果没有抽象,我们仍然会使用机器代码进行编程,或者更糟糕的是,一开始就没有计算机。所以恕我直言,这是一个非常好的问题。
什么是抽象
抽象某事意味着给事物命名,这样名字就抓住了一个函数或整个程序的核心。
你参考的书中给出了一个例子,上面写着
假设我们正在使用海龟,我们需要的常见操作是
画正方形。 “画一个正方形”是一种抽象,或者说是一个心理块,
一些较小的步骤。因此,让我们编写一个函数来捕获
这个“积木”的模式:
暂时忘掉海龟,想想画一个正方形。如果我告诉你画一个正方形(在纸上),你马上就知道该怎么做了:
您可以在没有其他问题的情况下做到这一点,因为您对 正方形 是什么了如指掌,无需我一步一步地告诉您。这里,square这个词是“画一个所有边长相同的矩形”的抽象。
抽象深入
等等,你怎么知道矩形是什么?好吧,这是以下内容的另一个抽象:
-
rectangle => 画两条相互平行、长度相同的线,然后添加另外两条垂直于另外两条线的平行线,同样长度相同,但长度可能与第一条不同二。
当然会一直这样下去——lines、parallel、perpendicular、connecting都是众所周知的概念的抽象。
现在,想象一下,每次您想要绘制一个矩形或正方形时,您都必须给出矩形的完整定义,或者解释直线、平行线、垂直线和连接线——这将花费很长时间这样做。
抽象的真正力量
这是抽象的第一个力量:它们使谈话和完成事情变得更加容易。
抽象的第二个力量来自于可组合性的良好属性:一旦你定义了抽象,你可以组合两个或更多抽象来形成一个新的、更大的抽象: 说你已经厌倦了画正方形,但你真的想画一个房子。假设我们已经定义了三角形,那么我们可以定义:
接下来,你想要一个村庄:
哦等等,我们想要一个城市——我们有一个新概念街道:
-
city => 将许多 村庄 彼此靠近,用更多 房屋 填充空白空间,但为 街道 留出空间>
-
街道 =>(街道的一些定义)
等等……
这一切如何应用于编程?
如果在计划程序的过程中(称为分析和设计的过程),你发现你试图解决的问题有很好的抽象,你的程序会变得更短,因此更容易编写而且——也许更重要的是——更容易阅读。做到这一点的方法是尝试掌握定义问题的主要概念——就像在(简化的)绘制 house 的示例中,这是 squares 和 三角形,画一个村庄是房屋。
在编程中,我们将抽象定义为函数(以及其他一些构造,如类和模块,但现在让我们关注函数)。函数本质上命名一组单个语句,因此函数本质上是一种抽象——有关详细信息,请参阅书中的示例。
一切的美好
在编程中,抽象可以成就或破坏生产力。这就是为什么经常将常用函数收集到 库 中,以供其他人重用。这意味着您不必担心细节,您只需要了解如何使用现成的抽象即可。显然,这应该会让您的工作变得更轻松,这样您就可以更快地工作,从而提高工作效率:
示例:
想象有一个名为“nicepic”的图形库,其中包含上面讨论的所有抽象的预定义函数:矩形、正方形、三角形、房屋、村庄。
假设你想创建一个基于上述抽象的程序来绘制一幅漂亮的房子图片,你所要做的就是:
import nicepic
draw_house()
因此,只需两行代码即可获得更详细的信息。这不是很好吗?
希望这会有所帮助。