您的位置:首页 > 其它

自顶向下,逐步求精:从洗衣机工作程序看面向过程程序设计方法

2017-11-28 19:04 387 查看
作为软件工程专业入门新生,在进行程序设计实践过程中,很多同学可能会被偶尔的“大项目”吓倒而步履维艰,“大项目”们题目要求很长,程序结构逻辑看起来很复杂,感觉分支很多……难以下手。在这篇博客中,我们便将分享解决这一问题的一种“指导思想”- 自顶向下,逐步求精。并通过问题求解举例和对生活中常用电器 - 洗衣机中的机器运行程序进行观察和了解,加深理解。

思想概述

自顶向下

  自顶向下,Top-Down,指的是对大问题的分解,即将我们遇到的复杂的,所谓“大”的问题,分解为小问题,从而方便我们找出问题的关键、重点、突破口所在,进而用更加清晰的、定性定量的方法去描述、解决问题。

逐步求精

  逐步求精指的是我们对问题的一种映射转化,即将现实世界中的问题具体化地抽象转化为对应领域、世界的问题;将复杂问题经过抽象化处理,精简、分解为相对简单的小问题,从而实现将整个大问题细化精确到某些简单小问题的解决中。

应用举例

  了解过自顶向下,逐步求精的思想,让我们先来以一个著名数学问题为例对其进行实践,稍后我们还会进入实际中对洗衣机工作程序的了解和解读。

  

  哥德巴赫猜想:任何一个大于等于4的偶数均可以表示为两个素数之和。

  下面让我们通过编程来在某个范围内验证哥德巴赫猜想。

  

  也许很多同学见此问题直接开始打码解决也没有问题,但在对主题思想的学习理解中,让我们用自顶向下,逐步求精的思维方式来解决这个问题。

  思考流程如下:

第一层次:验证哥德巴赫猜想;

第二层次:从4开始并设定我们要验证的上限数值,每次累加2,验证其能否分解为两素数之和。

第三层次:对每个正在验证中的数N,从I=2开始,判断N - I 是否仍未素数,若是,打印N的素数分解,进入下一个偶数的分解验证。若否,I进入下一个素数进行验证……直到I>=X/2而仍未分解成功,打印哥德巴赫猜想不成立。

第四层次:对用于判断分解的I的处理 - I从2开始,每次分解失败则进入下一个素数:I自增1,若I为素数,返回I,若I不为素数,I自增1……

  通过这样的流程,我们就将验证哥德巴赫猜想这个较大的问题从大到小地进行分解,分解为一个个小问题的处理,从而使我们解决问题的思路更加清晰,操作性强。

  

  完成了一次牛刀小试后,让我们进入对生活中实际问题的探讨。

洗衣机工作程序设计中的自顶向下,逐步求精思想



  常见的自动洗衣机正如笔者实拍宿舍里的这一台洗衣机一样,常有以上洗衣选项,从而满足用户不同的需求,自动完成洗衣工作。在左下第一个按钮上我们可以看见两个大字:程序,可见洗衣程序的自动化过程,其实也是程序员编写程序“教”给洗衣机的。那么,程序员们是怎么让这台机器明白我们的洗衣目的,并教会具有诸多部件的洗衣机君自动洗衣的呢?

  

  正如“过程”那一栏的选项中我们可见,设计者们将洗衣过程初步分解为:浸洗、洗涤、漂洗、脱水过程。从而将整个洗衣过程初步分解为几个小过程,分别用对应程序控制就更细化、容易实现了。

  

  进入实践,我们以向下求精的第三层级分类中的注水为例,用伪代码的方式模拟洗衣机的工作控制程序:

  从选项中读取用户设定的水量;

  关闭排水口;

  打开放水口;

  实时返回当前水量;

  判断当前水量是否达到设定水量,当水量达到要求

  {

   关闭放水口;

   进入下一环节……(浸泡、定时)

  }

  ……

  以上便是洗衣机工作中某环节程序的伪代码大致示例,将其转化为机器认识的指令并有序执行,我们就可以一步步控制洗衣机完成工作。而通过改动程序中的一些参数,我们便可以实现对洗衣机不同洗衣模式的控制。如强洗中将转筒转速加快;精洗中将漂洗时间加长……等等。

以上便是本次“自顶向下,逐步求精”思想的介绍分享。它在程序设计中可以算是一种“指导思想”,帮助我们将眼前庞然大矣的问题细化,从而为我们的问题求解提供思路和突破口。同时,这样的思想也可以应用在我们的生活中,帮助我们解决问题。

面对难题,如果我们懂得Top-Down,懂得求精,一定程度上也可以大事化小,小事化无……小事……小事就可以解决了嘛!

谢谢阅读!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: