1. 程式人生 > >隨便亂扯:以洗衣機為例淺談自頂向下設計

隨便亂扯:以洗衣機為例淺談自頂向下設計

  二話不說先砸維基上的定義:

A top-down approach (also known as stepwise design) is essentially the breaking down of a system to gain insight into the sub-systems that make it up. In a top-down approach an overview of the system is formulated, specifying but not detailing any first-level subsystems. Each subsystem is then refined in yet greater detail, sometimes in many additional subsystem levels, until the entire specification is reduced to base elements. Once these base elements are recognised then we can build these as computer modules. Once they are built we can put them together, making the entire system from these individual components.

  這幾句話翻譯過來,大概就是:解決問題的時候,不是先看看我們有什麼(API,輪子,演算法等等),而是先看看人家要什麼(霧),然後再把需求拆解,直到拆解出來的每個子問題都可以用已知的方法輕鬆解決。
  這個問題解決思想在程式設計中被廣泛應用,這個方法有助於完全地理解需求,也只有當完全地理解了需求以後,這個程式的設計才能完美地滿足需求。
  例如:當我們要設計洗衣機的控制程式時,我們首先應該想到的,不是我們有什麼樣的介面去控制洗衣機(注水,排水,測量水的高度,旋轉滾筒,計時),而是應該去想到洗衣機應該滿足的需求:把衣服洗乾淨
  於是我們先列出問題的最頂層:

  • 洗乾淨衣服

  但僅僅列出問題的最頂層還是不夠的,我們需要分解問題:

  • 洗乾淨衣服
    • 注水
    • 旋轉滾筒
    • 排水

  將問題進一步細化:

  • 洗乾淨衣服
    • 注水
      • 開啟注水閥門
      • 測量水的高度
      • 當水的高度達到預設值時關閉注水閥門
    • 旋轉滾筒
      • 向左旋轉滾筒
      • 等待三秒
      • 向右旋轉滾筒
      • 等待三秒
      • 重複以上步驟數十次(大霧)
    • 排水
      • 開啟排水閥門
      • 測量水的高度
      • 當水的高度為零時關閉排水閥門

  至此,我們已經將洗衣機的排水程式分解到了一個可執行的階段,我們還可以對這個解決方案進行進一步分解,以用於設計出完整的程式。
這裡寫圖片描述


(圖片轉自網路,涉侵刪)

相關推薦

隨便洗衣機設計

  二話不說先砸維基上的定義: A top-down approach (also known as stepwise design) is essentially the breaking down of a system to gain insigh

linux6systemd,初探系統服務管理

假如你用的不是很老版本的unix系統,那麼你一定對systemd不甚陌生。 檢視服務:systemctl status servicename 停止服務:systemctl stop  servicename 這些常見操作,基本大家都有涉及。 那麼,systemd到底是何方神聖呢?

隨便關於區塊鏈中的幾個概念

(因為學識淺薄,書中的很多知識未能看懂,因此不足之處,還請指出)   前一段時間,包括比特幣、以太坊在內的電子貨幣被炒得火熱,其背後的區塊鏈技術更是被頂到了風口浪尖。在這個勢頭的推動下,我拜讀了張建老師的《區塊鏈:定義未來金融與經濟新格局》,初步瞭解了區塊

一種嵌入式系統軟體定時器的實現STM32

1.什麼是軟體定時器 軟體定時器是用程式模擬出來的定時器,可以由一個硬體定時器模擬出成千上萬個軟體定時器,這樣程式在需要使用較多定時器的時候就不會受限於硬體資源的不足,這是軟體定時器的一個優點,即數量不受限制。但由於軟體定時器是通過程式實現的,其執行和維護

Tensorflow讀取並使用預訓練模型inception_v3

在使用Tensorflow做讀取並finetune的時候,發現在讀取官方給的inception_v3預訓練模型總是出現各種錯誤,現記錄其正確的讀取方式和各種錯誤做法: 關鍵程式碼如下: import tensorflow as tf import ten

多程序開發如何共享資料python

最近使用gunicorn部署了一個專案,在啟動的時候,加上了worker 3的引數。也就是說,同時有3個程序存在。 這就引出了程序間通訊的問題。因為有一個功能只用單執行緒去執行就行了,也就是說,即使啟動100個程序, 這部分功能只有一個執行的例項才可以。否則

隨便軟體開發中的布魯克斯法則

  在《人月神話》中,布魯克斯博士提出了布魯克斯法則:向進度落後的專案中增加人手,只會使進度更加落後。   專案的進度可以被各種原因拖後:每個問題看上去都十分容易解決,但這些問題相互糾纏和堆積在一起時,團隊的行動就會越來越慢;對專案的預算不足也會拖延專案的

隨便關於IT與風投

  原本對經濟有關的東西不感興趣(程式碼賽高!),只是老師佈置了作業,就自行 Google 了一下(什麼都沒看懂),就憑藉著看到的一點東西,簡(suí)單(kǒu)談(hú)談(chě)自己對於IT與風投關係的理解。請希望找到相關資料的各位……出門右轉。   

使用者註冊功能模組MVC架構的JavaWeb開發流程

JavaWeb應用開發,撇開分散式不談,只討論一個功能服務應用的開發,無論是使用原生的Servlet/JSP方案,還是時下的SSM架構,都有一套經過工程實踐考驗的最佳實踐,這綜合考慮了團隊協作、專案管理、可用性等方方面面的問題。 一些約定 考慮到專案管理的方便,一般前端不能直接訪問到jsp頁面,而是必須通

計算機網路方法(第七版)Wireshark實驗指南

計算機網路:自頂向下方法(第七版)Wireshark實驗指南 這個資源在網上好像很難找,我歷經千辛萬苦找到之後,在文件的內部發現這些文件其實是免費公開在一個網站上的……,連結如下: http://gaia.cs.umass.edu/wireshark-labs/?tdsourcetag=s_pcqq_ai

筆記 -《計算機網路方法》 第5章 鏈路層鏈路、接入網和區域網(0)

第5章 鏈路層:鏈路、接入網和區域網(0)   ** “結構” 均為本章知識結構; ** “假設” 均為理想化,抽象的模型; ** “例項” 均為已經投入使用的模型; (結構1)   (假設1)同一子網內 傳遞網路層資料報的鏈路層工作流程 &nbs

筆記 -《計算機網路方法》 第5章 鏈路層鏈路、接入網和區域網(8)

第5章 鏈路層:鏈路、接入網和區域網(8)鏈路層交換機 鏈路層交換機的任務是從入鏈路接收鏈路層幀,並將其轉發到對應的出鏈路。 鏈路層交換機對子網中的主機和路由器是透明的。 鏈路層幀到達交換機的任何介面的速率可能暫時會超過該介面的鏈路數量,所以在介面設有快取。 鏈路層交換

《計算機網路-方法原書第六版》~~~~~第一章計算機網路和因特網

1.1 什麼是因特網 1.1.1 具體構成描述 1. 端系統(主機):資料的傳送或接受的終端。 2. 通訊鏈路:資料傳輸的媒介。 3. 分組:資料在鏈路中傳輸的一種封裝格式。 4. 路由器:負責轉發資料,用於網路核心中。 5. 鏈路層交換機:負責轉發資料,用於接入

計算機網路 應用層(FTP、SMTP、POP3、IMAP)

題外話,最近補習數學課還是很有成效的。 關於應用層是分三次寫的,因此寫的重點是在HTTP協議和DNS協議分析上。而應用層中FTP、SMTP、POP3、IMAP,計算機網路自頂向下中並沒有太詳細的介紹。我也試著看RFC然後抓包分析一下過程,採用的抓包方法是FTP

計算機網路 應用層(DNS,POP)

DNS是: 一個分散式DNS伺服器實現分佈或資料庫。 一個使得主機能夠查詢分佈資料庫的應用層協議。 DNS伺服器通常是執行BIND軟體的Linux機器。 DNS協議執行在UDP之上使用53埠。 DNS提供的服務: DNS除了進行主機到IP地址的

計算機網路自學筆記

2018.4.14 英文版電子書2018/4/16 購入中文版紙質書第1章 計算機網路和因特網1.1什麼是因特網因特網服務提供商ISP,傳輸控制協議TCP,網際協議IP1.2網路邊緣1.3網路核心分組交換和電路交換,分組交換效能優於電路交換1.4分組交換網中的時延、丟包和吞吐

層次聚類

如何理解這種層次性呢?At different distances, different clusters will form, which can be represented using a dendrogram(系統樹圖), which explains where the common name

增量測試測試&底向上測試

本部落格主要內容: 自頂向下測試和自底向上測試的優缺點; 軟體開發週期流程; 不同的測試方法針對不同的測試階段 一、 自頂向下測試: 優點: 1、如果主要的缺陷發生在程式的頂層將非常有利

文法分析小結底向上的分析方法和的分析方法有哪些

首先注意一點:無論是那種語法分析,語法都是從左至右的讀入符號! 自底向上分析法,也稱移進-歸約分析法。 它的實現思想是對輸入符號串自左向右進行掃描,並將輸入符逐個移入一個後進先出棧中,邊移入邊分析,一旦棧頂符號串形成某個句型的控制代碼時,(該控制代碼對應某產生式的右部),就

Golang Web入門(1)理解Http伺服器

摘要 由於Golang優秀的併發處理,很多公司使用Golang編寫微服務。對於Golang來說,只需要短短几行程式碼就可以實現一個簡單的Http伺服器。加上Golang的協程,這個伺服器可以擁有極高的效能。然而,正是因為程式碼過於簡單,我們才應該去研究他的底層實現,做到會用,也知道為什麼這麼用。 在本文中,會