概述
概念
其概念最早由E.W.Dijikstra在1965年提出的,是軟體發展的一個重要的里程碑。它的主要觀點是採用自頂向下、逐步求精及模組化的程式設計方法;使用三種基本控制結構構造程式,任何程式都可由順序、選擇、循環三種基本控制結構構造。結構化程式設計主要強調的是程式的易讀性。
內容
詳細描述處理過程常用三種工具:圖形、表格和語言。
圖形:程式流程圖、N-S圖、PAD圖表格:判定表
語言:過程設計語言(PDL)
結構化程式設計曾被稱為軟體發展中的第三個里程碑。該方法的要點是:
(1) 主張使用順序、選擇、循環三種基本結構來嵌套連結成具有複雜層次的“結構化程式”,嚴格控制GOTO語句的使用。用這樣的方法編出的程式在結構上具有以下效果:
a. 以控制結構為單位,只有一個入口,一個出口,所以能獨立地理解這一部分。
b. 能夠以控制結構為單位,從上到下順序地閱讀程式文本。
c.由於程式的靜態描述與執行時的控制流程容易對應,所以能夠方便正確地理解程式的動作。
(2)“自頂而下,逐步求精”的設計思想,其出發點是從問題的總體目標開始,抽象低層的細節,先專心構造高層的結構,然後再一層一層地分解和細化。這使設計者能把握主題,高屋建瓴,避免一開始就陷入複雜的細節中,使複雜的設計過程變得簡單明了,過程的結果也容易做到正確可靠。
(3)“獨立功能,單出、入口”的模組結構,減少模組的相互聯繫使模組可作為外掛程式或積木使用,降低程式的複雜性,提高可靠性。程式編寫時,所有模組的功能通過相應的子程式(函式或過程)的代碼來實現。程式的主體是子程式層次庫,它與功能模組的抽象層次相對應,編碼原則使得程式流程簡潔、清晰,增強可讀性。
(4) 主程式設計師組。
其中(1)、(2)是解決程式結構規範化問題;(3)是解決將大劃小,將難化簡的求解方法問題;(4)是解決軟體開發的人員組織結構問題。
模型
結構化程式設計通常使用自上往下的設計模型,開發員將整個程式結構映射到單個小部分。已定義的函式或相似函式的集合在單個模組或字模組中編碼,這意味著,代碼能夠更有效的載入存儲器,模組能在其它程式中再利用。模組單獨測試之後,與其它模組整合起來形成整個程式組織。
程式流程遵循簡單的層次化模型,採用“for”、“repeat”、“while”等循環結構,鼓勵使用“Go To”語句。幾乎任何語言都能使用結構化程式設計技術來避免非結構化語言的通常陷阱。非結構化程式設計必須依賴於開發人員避免結構問題,從而導致程式組織較差。大多數現代過程式語言都鼓勵結構化程式設計。
基本結構
結構化程式設計的三種基本結構是:順序結構、選擇結構和循環結構。
順序結構
順序結構表示程式中的各操作是按照它們出現的先後順序執行的。
選擇結構
選擇結構表示程式的處理步驟出現了分支,它需要根據某一特定的條件選擇其中的一個分支執行。選擇結構有單選擇、雙選擇和多選擇三種形式。
循環結構
循環結構表示程式反覆執行某個或某些操作,直到某條件為假(或為真)時才可終止循環。在循環結構中最主要的是:什麼情況下執行循環?哪些操作需要循環執行?循環結構的基本形式有兩種:當型循環和直到型循環。
當型循環:表示先判斷條件,當滿足給定的條件時執行循環體,並且在循環終端處流程自動返回到循環入口;如果條件不滿足,則退出循環體直接到達流程出口處。因為是"當條件滿足時執行循環",即先判斷後執行,所以稱為當型循環。
直到型循環:表示從結構入口處直接執行循環體,在循環終端處判斷條件,如果條件不滿足,返回入口處繼續執行循環體,直到條件為真時再退出循環到達流程出口處,是先執行後判斷。因為是"直到條件為真時為止",所以稱為直到型循環。
設計方法
自頂向下
程式設計時,應先考慮總體,後考慮細節;先考慮全局目標,後考慮局部目標。不要一開始就過多追求眾多的細節,先從最上層總目標開始設計,逐步使問題具體化。
逐步細化
對複雜問題,應設計一些子目標作為過渡,逐步細化。
模組化
一個複雜問題,肯定是由若干稍簡單的問題構成。模組化是把程式要解決的總目標分解為子目標,再進一步分解為具體的小目標,把每一個小目標稱為一個模組。
限制使用goto語句結構化程式設計方法的起源來自對GOTO語句的認識和爭論。肯定的結論是,在塊和進程的非正常出口處往往需要用GOTO語句,使用GOTO語句會使程式執行效率較高;在合成程式目標時,GOTO語句往往是有用的,如返回語句用GOTO。否定的結論是,GOTO語句是有害的,是造成程式混亂的禍根,程式的質量與GOTO語句的數量呈反比,應該在所有高級程式設計語言中取消GOTO語句。取消GOTO語句後,程式易於理解、易於排錯、容易維護,容易進行正確性證明。作為爭論的結論,1974年Knuth發表了令人信服的總結,並證實了:
(1)GOTO語句確實有害,應當儘量避免;
(2)完全避免使用GOTO語句也並非是個明智的方法,有些地方使用GOTO語句,會使程式流程更清楚、效率更高;
(3)爭論的焦點不應該放在是否取消GOTO語句上,而應該放在用什麼樣的程式結構上。其中最關鍵的是,應在以提高程式清晰性為目標的結構化方法中限制使用GOTO語句。
結構化編碼
所謂編碼就是把已經設計好的算法用計算機語言表示,即根據已經細化的算法正確寫出電腦程式。結構化的語言(如 Pascal,C,QBASIC等)都有與三種基本機構對應的語句。