简单了解"自顶向下,逐步求精"的方法

自顶向下

一种程序开发技术,其中问题被分解成更容易处理的子问题,这些子问题的解决方案组合起来构成整体问题的解决方案。自顶向下设计最初把问题分解成一套子问题,然后把子问题分解成子问题。这一过程将一直持续到每个子问题足够基础,不再需要进一步分解为止。我们创造了一种分层结构来表示问题和子问题(称为模块)之间的关系,这种结构也称为树形结构。在树形结构中,每一层的模块都可以调用下层模块的服务。这些模块是算法的基本构件。

逐步求精

将现实问题经过几次抽象(细化)处理,最后到求解域中只是一些简单的算法描述和算法实现问题。即将系统功能按层次进行分解,每一层不断将功能细化,到最后一层都是功能单一、简单易实现的模块。求解过程可以划分为若干个阶段,在不同阶段采用不同的工具来描述问题。在每个阶段有不同的规则和标准,产生出不同阶段的文档资料。

自顶向下,逐步求精

逐步求精

步骤
Created with Raphaël 2.1.0 分析问题 编写主要模块 编写其余的模块 根据需要进行重组和改写
分析问题

理解问题,列出必须处理的信息。明确采用什么样的解决方案。列出对问题和信息的假设。

编写主要模块

用自然语言或伪代码在主模块中重述问题。用模块名把问题分解成功能区块

编写其余的模块

每一层的模块可以载入多个下层模块。虽然上层模块引用的是未成文的下层模块,但上层模块必须完整。不断细化每个模块,直到模块中的每条语句都是具体的步骤为止

根据需要进行重组和改写

为变化做好打算。一些尝试和细化操作是必要的。要维持透明性,简单直接地表示想法

通过洗衣机的例子来说明
洗衣机基本运行步骤
Created with Raphaël 2.1.0 洗衣 选择洗衣模式(是否快洗) 选择水量 注水 电机转动(漂洗) 排水 电机转动(脱水) 停机 浸泡 选择浸泡时间 yes no yes no
伪代码实现
Read mode/*读取是否快洗*/
If 正常洗衣 Then
    Read time/*选择浸泡时间*/
end if
Read water/*选择水量*/
While getwatervolume()<water
     water_in_switch(open)/*当水位不足指定水量时,开启注水口*/
end while
water_in_switch(close)/*注水完毕,关闭注水口*/
If 正常洗衣 Then/*浸泡指定时间*/
    wait(time)
end if
While timecounter()<漂洗时间(洗衣机设定或人工设定)
    motorrun(left)
    motorrun(left)
    motorrun(right)
    motorrun(right)
end while/*漂洗*/
While getwatervolume()>0
     water_out_switch(open)/*排清洗衣机的水并且不关闭,使脱干的水及时排出*/
end while
While timecounter()<脱水时间(洗衣机设定或人工设定)
    motorrun(left)
    motorrun(left)
    motorrun(right)
    motorrun(right)
end while/*脱水*/
halt()/*停机*/

Function wait(time)
While timecounter()<time
end while/*浸泡即无操作指定时间*/
End

学会分解任务,将超级大分为大的、中的、小的、超小的,直到能用很直接的方法解决。记住这个很管用的方法:自项向下,逐步求精。不管做什么事,编什么程序,都可以用这种方法套一套。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值