1. 程式人生 > >淺談“自頂向下,逐步求精”

淺談“自頂向下,逐步求精”

概念
“自頂而下,逐步求精”的設計思想,其出發點是從問題的總體目標開始,抽象低層的細節,先專心構造高層的結構,然後再一層一層地分解和細化。這使設計者能把握主題,高屋建瓴,避免一開始就陷入複雜的細節中,使複雜的設計過程變得簡單明瞭,過程的結果也容易做到正確可靠。換句話說,這其實也是分治法的一種。
分治法
是電腦科學中很重要的一種思想。英文為Divide and Conquer,直譯即為分治,或者分而治之。直觀的理解就是將一個大而難的問題分解為一些小而易的問題,先解決這些易於解決的小問題,再合併這些小問題的解(合併可以是分別求出小問題的解再合併,或者是直接將相同的小問題合併只求解一次),從而得到大問題的解。需要注意的是小問題必須和大問題是同一個型別的問題,或者說解法相同,這樣才可以遞迴求解。我們發現,這種實際上是自頂向下地分解問題。這裡寫圖片描述


應用
CATIA平臺的自頂向下引數化車身設計:從功能分解的角度看,自頂向下的設計方法是將汽車車身的設計要求,由上至下,逐層分解到零部件的效能,形成零部件的設計需求。從結構分解的角度看,自頂向下的設計方法是一個自上而下、逐步求精的迭代過程,是一個設計約束不斷分解、傳播與滿足的過程。 這裡寫圖片描述
課上舉例:洗衣機
1.使用者輸入引數(水位和洗衣的模式)
2.當關閉洗衣機門後進行灌水,直到指定的水位停止。
3.根據使用者所輸入的洗衣模式來控制洗衣的時間,以及轉動的速度
4.當時間到後,開啟排水開關,直到水排幹後進入脫水模式
5.脫水模式進行至指定的時間。
虛擬碼:
scanf(水位,洗衣模式)
while(當前水位<指定水位)
加水;
while(執行時間<指定洗衣模式時間)
洗衣機來回轉動;
while(水位=0)
進入脫水模式;
while(脫水時間=指定時間)
exit;