【簡(jiǎn)介:】是進(jìn)行以模塊功能和處理過(guò)程設(shè)計(jì)為主的詳細(xì)設(shè)計(jì)的基本原則。結(jié)構(gòu)化程序設(shè)計(jì)是過(guò)程式程序設(shè)計(jì)的一個(gè)子集,它對(duì)寫(xiě)入的程序使用邏輯結(jié)構(gòu),使得理解和修改更有效更容易。
中文名:結(jié)
是進(jìn)行以模塊功能和處理過(guò)程設(shè)計(jì)為主的詳細(xì)設(shè)計(jì)的基本原則。結(jié)構(gòu)化程序設(shè)計(jì)是過(guò)程式程序設(shè)計(jì)的一個(gè)子集,它對(duì)寫(xiě)入的程序使用邏輯結(jié)構(gòu),使得理解和修改更有效更容易。
中文名:結(jié)構(gòu)化程序設(shè)計(jì)
外文名:structured programming
提出人:E.W.Dijikstra
時(shí)間:1965年
分享
概述
概念
其概念最早由E.W.Dijikstra在1965年提出的,是軟件發(fā)展的一個(gè)重要的里程碑。它的主要觀(guān)點(diǎn)是采用自頂向下、逐步求精及模塊化的程序設(shè)計(jì)方法;使用三種基本控制結(jié)構(gòu)構(gòu)造程序,任何程序都可由順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)構(gòu)造。結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的是程序的易讀性。
內(nèi)容
詳細(xì)描述處理過(guò)程常用三種工具:圖形、表格和語(yǔ)言。
圖形:程序流程圖、N-S圖、PAD圖 表格:判定表
語(yǔ)言:過(guò)程設(shè)計(jì)語(yǔ)言(PDL)
結(jié)構(gòu)化程序設(shè)計(jì)曾被稱(chēng)為軟件發(fā)展中的第三個(gè)里程碑。該方法的要點(diǎn)是:
(1) 主張使用順序、選擇、循環(huán)三種基本結(jié)構(gòu)來(lái)嵌套連結(jié)成具有復(fù)雜層次的“結(jié)構(gòu)化程序”,嚴(yán)格控制GOTO語(yǔ)句的使用。用這樣的方法編出的程序在結(jié)構(gòu)上具有以下效果:
a. 以控制結(jié)構(gòu)為單位,只有一個(gè)入口,一個(gè)出口,所以能獨(dú)立地理解這一部分。
b. 能夠以控制結(jié)構(gòu)為單位,從上到下順序地閱讀程序文本。
c.由于程序的靜態(tài)描述與執(zhí)行時(shí)的控制流程容易對(duì)應(yīng),所以能夠方便正確地理解程序的動(dòng)作。
(2)“自頂而下,逐步求精”的設(shè)計(jì)思想,其出發(fā)點(diǎn)是從問(wèn)題的總體目標(biāo)開(kāi)始,抽象低層的細(xì)節(jié),先專(zhuān)心構(gòu)造高層的結(jié)構(gòu),然后再一層一層地分解和細(xì)化。這使設(shè)計(jì)者能把握主題,高屋建瓴,避免一開(kāi)始就陷入復(fù)雜的細(xì)節(jié)中,使復(fù)雜的設(shè)計(jì)過(guò)程變得簡(jiǎn)單明了,過(guò)程的結(jié)果也容易做到正確可靠。
(3)“獨(dú)立功能,單出、入口”的模塊結(jié)構(gòu),減少模塊的相互聯(lián)系使模塊可作為插件或積木使用,降低程序的復(fù)雜性,提高可靠性。程序編寫(xiě)時(shí),所有模塊的功能通過(guò)相應(yīng)的子程序(函數(shù)或過(guò)程)的代碼來(lái)實(shí)現(xiàn)。程序的主體是子程序?qū)哟螏?kù),它與功能模塊的抽象層次相對(duì)應(yīng),編碼原則使得程序流程簡(jiǎn)潔、清晰,增強(qiáng)可讀性。
(4) 主程序員組。
其中(1)、(2)是解決程序結(jié)構(gòu)規(guī)范化問(wèn)題;(3)是解決將大劃小,將難化簡(jiǎn)的求解方法問(wèn)題;(4)是解決軟件開(kāi)發(fā)的人員組織結(jié)構(gòu)問(wèn)題。
模型
結(jié)構(gòu)化程序設(shè)計(jì)通常使用自上往下的設(shè)計(jì)模型,開(kāi)發(fā)員將整個(gè)程序結(jié)構(gòu)映射到單個(gè)小部分。已定義的函數(shù)或相似函數(shù)的集合在單個(gè)模塊或字模塊中編碼,這意味著,代碼能夠更有效的載入存儲(chǔ)器,模塊能在其它程序中再利用。模塊單獨(dú)測(cè)試之后,與其它模塊整合起來(lái)形成整個(gè)程序組織。
程序流程遵循簡(jiǎn)單的層次化模型,采用“for”、“repeat”、“while”等循環(huán)結(jié)構(gòu),鼓勵(lì)使用“Go To”語(yǔ)句。幾乎任何語(yǔ)言都能使用結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)來(lái)避免非結(jié)構(gòu)化語(yǔ)言的通常陷阱。非結(jié)構(gòu)化程序設(shè)計(jì)必須依賴(lài)于開(kāi)發(fā)人員避免結(jié)構(gòu)問(wèn)題,從而導(dǎo)致程序組織較差。大多數(shù)現(xiàn)代過(guò)程式語(yǔ)言都鼓勵(lì)結(jié)構(gòu)化程序設(shè)計(jì)。
基本結(jié)構(gòu)
結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)是:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
順序結(jié)構(gòu)
順序結(jié)構(gòu)表示程序中的各操作是按照它們出現(xiàn)的先后順序執(zhí)行的。
選擇結(jié)構(gòu)
選擇結(jié)構(gòu)表示程序的處理步驟出現(xiàn)了分支,它需要根據(jù)某一特定的條件選擇其中的一個(gè)分支執(zhí)行。選擇結(jié)構(gòu)有單選擇、雙選擇和多選擇三種形式。
循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)表示程序反復(fù)執(zhí)行某個(gè)或某些操作,直到某條件為假(或?yàn)檎妫r(shí)才可終止循環(huán)。在循環(huán)結(jié)構(gòu)中最主要的是:什么情況下執(zhí)行循環(huán)?哪些操作需要循環(huán)執(zhí)行?循環(huán)結(jié)構(gòu)的基本形式有兩種:當(dāng)型循環(huán)和直到型循環(huán)。
當(dāng)型循環(huán):表示先判斷條件,當(dāng)滿(mǎn)足給定的條件時(shí)執(zhí)行循環(huán)體,并且在循環(huán)終端處流程自動(dòng)返回到循環(huán)入口;如果條件不滿(mǎn)足,則退出循環(huán)體直接到達(dá)流程出口處。因?yàn)槭钱?dāng)條件滿(mǎn)足時(shí)執(zhí)行循環(huán),即先判斷后執(zhí)行,所以稱(chēng)為當(dāng)型循環(huán)。
直到型循環(huán):表示從結(jié)構(gòu)入口處直接執(zhí)行循環(huán)體,在循環(huán)終端處判斷條件,如果條件不滿(mǎn)足,返回入口處繼續(xù)執(zhí)行循環(huán)體,直到條件為真時(shí)再退出循環(huán)到達(dá)流程出口處,是先執(zhí)行后判斷。因?yàn)槭侵钡綏l件為真時(shí)為止,所以稱(chēng)為直到型循環(huán)。
設(shè)計(jì)方法
自頂向下
程序設(shè)計(jì)時(shí),應(yīng)先考慮總體,后考慮細(xì)節(jié);先考慮全局目標(biāo),后考慮局部目標(biāo)。不要一開(kāi)始就過(guò)多追求眾多的細(xì)節(jié),先從最上層總目標(biāo)開(kāi)始設(shè)計(jì),逐步使問(wèn)題具體化。
逐步細(xì)化
對(duì)復(fù)雜問(wèn)題,應(yīng)設(shè)計(jì)一些子目標(biāo)作為過(guò)渡,逐步細(xì)化。
模塊化
一個(gè)復(fù)雜問(wèn)題,肯定是由若干稍簡(jiǎn)單的問(wèn)題構(gòu)成。模塊化是把程序要解決的總目標(biāo)分解為子目標(biāo),再進(jìn)一步分解為具體的小目標(biāo),把每一個(gè)小目標(biāo)稱(chēng)為一個(gè)模塊。
限制使用goto語(yǔ)句 結(jié)構(gòu)化程序設(shè)計(jì)方法的起源來(lái)自對(duì)GOTO語(yǔ)句的認(rèn)識(shí)和爭(zhēng)論??隙ǖ慕Y(jié)論是,在塊和進(jìn)程的非正常出口處往往需要用GOTO語(yǔ)句,使用GOTO語(yǔ)句會(huì)使程序執(zhí)行效率較高;在成程序目標(biāo)時(shí),GOTO語(yǔ)句往往是有用