什么是编程抽象级别

先看看这个:Thinking about code — what is a level of abstraction anyway?

编程语言允许你在不同的抽象级别表示代码,什么是抽象级别?

考虑下这样的情况: 你到了一家餐厅并下了订单,你对服务员说,我想要一份确定的菜肴和一份确定的饮品。你通常不会告诉服务员如何做这道菜或该用什么食材。你只传递信息并且希望得到处理。

这种通信可以被成为是发生在高级抽象层次的。它的细节只够服务员理解你想干什么。

服务员返回厨房,并且将信息传递给准备这道菜的厨师。让我们假设这个厨师有若干个助手,厨师可能指示助手们做如下步骤: 切蔬菜、揉面团、在 250F 下烘烤 15 分钟等等。

这是另一种层次的抽象,适合厨师和助手们之间的通信。同样,它的细节只够帮工们理解厨师想干什么。然而从你的视角看,这种交互发生在更低的抽象层次中。

我们可以进一步深挖此过程并且想象每一名助手现在执行诸如使用刀切蔬菜、将菜肴放入烤箱、设置时间等任务。这仅涵盖了他们完成各自任务的具体和足够的细节。

在你看来,这种交互发生在甚至更低的抽象层次。

在这里插入图片描述
助手们反过来与大脑沟通,大脑与身体沟通,而抽象程度甚至更低。大脑让这一切看起来是自动的。我们不知道也不需要知道大脑如何向身体的不同部位传递什么信息来执行这些任务。抽象程度现在太低了,我们无法理解或关心。

在整个交互过程中,您可能只关心最高级别的抽象(即您下订单的那个),但您还是完成了工作(餐点已送达)。在每一层交互中,负责的员工只需理解一个高级消息,并将其分解为与他们相关的细节,最终您就拿到了餐点,而无需了解任何较低级别的细节。

面向对象的编程语言允许您以类似于这种交互结构的方式编写软件。对象通常会调用接口上的方法,该方法描述正在传递的高级消息。

在这种情况下,客户(您)正在对可以处理 Waiter 接口(例如 Waiter W)的任何人调用 orderMeal
方法。您还传递了相关信息,例如菜名和饮料名。这些是方法参数。服务员依次接受订单,做一些家务,例如在订单管理系统中记录该信息,然后对可以处理
Chef 接口(例如 Chef C)的人调用 prepareMeal 等方法。厨师依次通过调用处理(实现)Helper 接口(helper
H)的人的 chopVegetable 等方法来传递消息。您明白了。

就软件和计算机系统而言,每个客户端对象(想要完成某件事)都会调用可以执行该工作的对象的方法。此时,抽象级别发生变化,任务变得更加详细。此任务进一步细分为更低级别的构造。此过程持续进行,直到非常低级别的抽象(例如 CPU 指令)开始执行它。

正是由于这些抽象级别,许多流程才能高效运行。企业可以专注于其核心竞争力,并将其他任务委托给其他企业(他们可能是处理其他任务的专家)。这也代表了您可以用这些想法构建的系统的灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值