中文名 | 結(jié)構(gòu)化程序設(shè)計(jì) | 外文名 | structured programming |
---|---|---|---|
提出人 | E.W.Dijikstra | 提出時(shí)間 | 1965年 |
目????的 | 使程序執(zhí)行效率提高 | 原????則 | 程序=(算法)+(數(shù)據(jù)結(jié)構(gòu)) |
基本結(jié)構(gòu) | 順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu) |
順序結(jié)構(gòu)表示程序中的各操作是按照它們出現(xiàn)的先后順序執(zhí)行的。
選擇結(jié)構(gòu)表示程序的處理步驟出現(xiàn)了分支,它需要根據(jù)某一特定的條件選擇其中的一個(gè)分支執(zhí)行。選擇結(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)滿足給定的條件時(shí)執(zhí)行循環(huán)體,并且在循環(huán)終端處流程自動(dòng)返回到循環(huán)入口;如果條件不滿足,則退出循環(huán)體直接到達(dá)流程出口處。因?yàn)槭?當(dāng)條件滿足時(shí)執(zhí)行循環(huán)",即先判斷后執(zhí)行,所以稱為當(dāng)型循環(huán)。
直到型循環(huán):表示從結(jié)構(gòu)入口處直接執(zhí)行循環(huán)體,在循環(huán)終端處判斷條件,如果條件不滿足,返回入口處繼續(xù)執(zhí)行循環(huán)體,直到條件為真時(shí)再退出循環(huán)到達(dá)流程出口處,是先執(zhí)行后判斷。因?yàn)槭?直到條件為真時(shí)為止",所以稱為直到型循環(huán)。
程序設(shè)計(jì)時(shí),應(yīng)先考慮總體,后考慮細(xì)節(jié);先考慮全局目標(biāo),后考慮局部目標(biāo)。不要一開始就過多追求眾多的細(xì)節(jié),先從最上層總目標(biāo)開始設(shè)計(jì),逐步使問題具體化。
對(duì)復(fù)雜問題,應(yīng)設(shè)計(jì)一些子目標(biāo)作為過渡,逐步細(xì)化。
一個(gè)復(fù)雜問題,肯定是由若干稍簡單的問題構(gòu)成。模塊化是把程序要解決的總目標(biāo)分解為子目標(biāo),再進(jìn)一步分解為具體的小目標(biāo),把每一個(gè)小目標(biāo)稱為一個(gè)模塊。
限制使用goto語句 結(jié)構(gòu)化程序設(shè)計(jì)方法的起源來自對(duì)GOTO語句的認(rèn)識(shí)和爭論??隙ǖ慕Y(jié)論是,在塊和進(jìn)程的非正常出口處往往需要用GOTO語句,使用GOTO語句會(huì)使程序執(zhí)行效率較高;在合成程序目標(biāo)時(shí),GOTO語句往往是有用的,如返回語句用GOTO。否定的結(jié)論是,GOTO語句是有害的,是造成程序混亂的禍根,程序的質(zhì)量與GOTO語句的數(shù)量呈反比,應(yīng)該在所有高級(jí)程序設(shè)計(jì)語言中取消GOTO語句。取消GOTO語句后,程序易于理解、易于排錯(cuò)、容易維護(hù),容易進(jìn)行正確性證明。作為爭論的結(jié)論,1974年Knuth發(fā)表了令人信服的總結(jié),并證實(shí)了:
(1)GOTO語句確實(shí)有害,應(yīng)當(dāng)盡量避免;
(2)完全避免使用GOTO語句也并非是個(gè)明智的方法,有些地方使用GOTO語句,會(huì)使程序流程更清楚、效率更高;
(3)爭論的焦點(diǎn)不應(yīng)該放在是否取消GOTO語句上,而應(yīng)該放在用什么樣的程序結(jié)構(gòu)上。其中最關(guān)鍵的是,應(yīng)在以提高程序清晰性為目標(biāo)的結(jié)構(gòu)化方法中限制使用GOTO語句。
所謂編碼就是把已經(jīng)設(shè)計(jì)好的算法用計(jì)算機(jī)語言表示,即根據(jù)已經(jīng)細(xì)化的算法正確寫出計(jì)算機(jī)程序。結(jié)構(gòu)化的語言(如 Pascal,C,QBASIC等)都有與三種基本結(jié)構(gòu)對(duì)應(yīng)的語句。
“面向結(jié)構(gòu)”的程序設(shè)計(jì)方法即結(jié)構(gòu)化程序設(shè)計(jì)方法, 是“面向過程”方法的改進(jìn), 結(jié)構(gòu)上將軟件系統(tǒng)劃分為若干功能模塊, 各模塊按要求單獨(dú)編程, 再由各模塊連接, 組合構(gòu)成相應(yīng)的軟件系統(tǒng)。 該方法強(qiáng)調(diào)程序的結(jié)構(gòu)性, 所以容易做到易讀, 易懂。 該方法思路清晰, 做法規(guī)范, 深受設(shè)計(jì)者青睞。
結(jié)構(gòu)化程序設(shè)計(jì)(STRUCTURED PROGRAMING,簡稱SP)思想是最早由E.W.Dijikstra在1965年提出的,結(jié)構(gòu)化程序設(shè)計(jì)思想確實(shí)使程序執(zhí)行效率提高 。程序的出錯(cuò)率和維護(hù)費(fèi)用大大減少結(jié)構(gòu)程序設(shè)計(jì)就是一種進(jìn)行程序設(shè)計(jì)的原則和方法,按照這種原則和方法可設(shè)計(jì)出結(jié)構(gòu)清晰、容易理解、容易修改、容易驗(yàn)證的程序結(jié)構(gòu)化程序設(shè)計(jì)的目標(biāo)在于使程序具有一個(gè)合理結(jié)構(gòu),以保證和驗(yàn)證程序的正確性,從而開發(fā)出正確、合理的程序。
結(jié)構(gòu)化程序設(shè)計(jì)(structured programming)是進(jìn)行以模塊功能和處理過程設(shè)計(jì)為主的詳細(xì)設(shè)計(jì)的基本原則。結(jié)構(gòu)化程序設(shè)計(jì)是過程式程序設(shè)計(jì)的一個(gè)子集,它對(duì)寫入的程序使用邏輯結(jié)構(gòu),使得理解和修...
結(jié)構(gòu)化程序設(shè)計(jì) 和 面向?qū)ο蟪绦蛟O(shè)計(jì)
我來個(gè)你舉個(gè)例子比如和樓上一樣的 蓋房子所謂結(jié)構(gòu)化的蓋法 就是把你要蓋的房子拆成房間、大廳、廁所、廚房,然后分別交給4個(gè)人去設(shè)計(jì),4個(gè)人設(shè)計(jì)好了,你在吧4個(gè)部分組合起來,成為你的房子如果是面向?qū)ο蟮?..
C語言中用于結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)是
三種基本結(jié)構(gòu)為順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。1、順序結(jié)構(gòu)順序結(jié)構(gòu)表示程序中的各操作是按照它們出現(xiàn)的先后順序執(zhí)行的。大多數(shù)C語言語句都是順序結(jié)構(gòu)的, 按照代碼的先后順序執(zhí)行。比如int?a;a=5;pr...
結(jié)構(gòu)化程序設(shè)計(jì)采用自頂向下、逐步求精的設(shè)計(jì)方法,各個(gè)模塊通過“順序、選擇、循環(huán)”的控制結(jié)構(gòu)進(jìn)行連接,并且只有一個(gè)入口、一個(gè)出口。
結(jié)構(gòu)化程序設(shè)計(jì)的原則可表示為:程序=(算法) (數(shù)據(jù)結(jié)構(gòu))。
算法是一個(gè)獨(dú)立的整體,數(shù)據(jù)結(jié)構(gòu)(包含數(shù)據(jù)類型與數(shù)據(jù))也是一個(gè)獨(dú)立的整體。兩者分開設(shè)計(jì),以算法(函數(shù)或過程)為主。
隨著計(jì)算機(jī)技術(shù)的發(fā)展,軟件工程師越來越注重于系統(tǒng)整體關(guān)系的表述,于是出現(xiàn)了數(shù)據(jù)模型技術(shù)(把數(shù)據(jù)結(jié)構(gòu)與算法看做一個(gè)獨(dú)立功能模塊),這便是面向?qū)ο蟪绦蛟O(shè)計(jì)的雛形。
1、軟件的重用性差
重用性是指同一事物不經(jīng)修改或稍加修改就可多次重復(fù)使用的性質(zhì)。軟件重用性是軟件工程追求的目標(biāo)之一。如果軟件的重用性較差那么軟件的造價(jià)就相對(duì)高。
2、軟件的可維護(hù)性差
軟件工程強(qiáng)調(diào)軟件的可維護(hù)性。強(qiáng)調(diào)文檔資料的重要性。規(guī)定最終的軟件產(chǎn)品應(yīng)該由完整、一致的配置成分組成。在軟件開發(fā)過程中。始終強(qiáng)調(diào)軟件的可讀性、可修改性和可測(cè)試性是軟件的重要的質(zhì)量指標(biāo)。實(shí)踐證明。用傳統(tǒng)方法開發(fā)出來的軟件.維護(hù)時(shí)其費(fèi)用和成本仍然很高.其原因是可修改性差.維護(hù)困難。導(dǎo)致可維護(hù)性差。
3、開發(fā)出的軟件不能真正滿足用戶需要
結(jié)構(gòu)化方法開發(fā)大型軟件系統(tǒng)涉及各種不同領(lǐng)域的知識(shí)。在開發(fā)需求模糊或需求動(dòng)態(tài)變化的系統(tǒng)時(shí).所開發(fā)出的軟件系統(tǒng)往往不能真正滿足用戶的需要。
結(jié)構(gòu)化程序中的任意基本結(jié)構(gòu)都具有唯一入口和唯一出口,并且程序不會(huì)出現(xiàn)死循環(huán)。在程序的靜態(tài)形式與動(dòng)態(tài)執(zhí)行流程之間具有良好的對(duì)應(yīng)關(guān)系。
由于模塊相互獨(dú)立,因此在設(shè)計(jì)其中一個(gè)模塊時(shí),不會(huì)受到其它模塊的牽連,因而可將原來較為復(fù)雜的問題化簡為一系列簡單模塊的設(shè)計(jì)。模塊的獨(dú)立性還為擴(kuò)充已有的系統(tǒng)、建立新系統(tǒng)帶來了不少的方便,因?yàn)槲覀兛梢猿浞掷矛F(xiàn)有的模塊作積木式的擴(kuò)展。
按照結(jié)構(gòu)化程序設(shè)計(jì)的觀點(diǎn),任何算法功能都可以通過由程序模塊組成的三種基本程序結(jié)構(gòu)的組合:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。
結(jié)構(gòu)化程序設(shè)計(jì)的基本思想是采用"自頂向下,逐步求精"的程序設(shè)計(jì)方法和“單入口單出口”的控制結(jié)構(gòu)。自頂向下、逐步求精的程序設(shè)計(jì)方法從問題本身開始,經(jīng)過逐步細(xì)化,將解決問題的步驟分解為由基本程序結(jié)構(gòu)模塊組成的結(jié)構(gòu)化程序框圖;“單入口單出口”的思想認(rèn)為一個(gè)復(fù)雜的程序,如果它僅是由順序、選擇和循環(huán)三種基本程序結(jié)構(gòu)通過組合、嵌套構(gòu)成,那么這個(gè)新構(gòu)造的程序一定是一個(gè)單入口單出口的程序。據(jù)此就很容易編寫出結(jié)構(gòu)良好、易于調(diào)試的程序來。
①整體思路清楚,目標(biāo)明確。
②設(shè)計(jì)工作中階段性非常強(qiáng),有利于系統(tǒng)開發(fā)的總體管理和控制。
③在系統(tǒng)分析時(shí)可以診斷出原系統(tǒng)中存在的問題和結(jié)構(gòu)上的缺陷。
①用戶要求難以在系統(tǒng)分析階段準(zhǔn)確定義,致使系統(tǒng)在交付使用時(shí)產(chǎn)生許多問題。
②用系統(tǒng)開發(fā)每個(gè)階段的成果來進(jìn)行控制,不能適應(yīng)事物變化的要求。
③系統(tǒng)的開發(fā)周期長。2100433B
格式:pdf
大?。?span id="0ue7afl" class="single-tag-height">172KB
頁數(shù): 9頁
評(píng)分: 4.6
格式:pdf
大?。?span id="sn6gehc" class="single-tag-height">172KB
頁數(shù): 3頁
評(píng)分: 4.7
針對(duì)目前工程機(jī)械產(chǎn)品越來越豐富,控制邏輯越來越復(fù)雜的情況,需要使用結(jié)構(gòu)化程序設(shè)計(jì)。本文以24t挖掘機(jī)為例,對(duì)常用功能進(jìn)行標(biāo)準(zhǔn)化、模塊化,減少重復(fù)勞動(dòng),而且程序的可讀性更好、更容易理解,也便于程序分工管理。最后將模塊化編程實(shí)際應(yīng)用到挖掘機(jī)控制系統(tǒng)中,取得了不錯(cuò)的應(yīng)用效果。
結(jié)構(gòu)化程序設(shè)計(jì)提出的原則可以歸納為32個(gè)字:自頂向下,逐步細(xì)化;清晰第一,效率第二;書寫規(guī)范,縮進(jìn)格式;基本結(jié)構(gòu),組合而成。
底層的結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化的程序是以一些簡單、有層次的程序流程架構(gòu)所組成,可分為順序(sequence)、選擇(selection)及循環(huán)(repetition)。
● 順序是指程序正常的執(zhí)行方式,執(zhí)行完一個(gè)指令后,執(zhí)行后面的指令。
● 選擇結(jié)構(gòu)顧名思義,當(dāng)程序到了一定的處理過程時(shí),遇到了很多分支,無法按直線走下去,它需要根據(jù)某一特定選擇結(jié)構(gòu)表示程序的處理步驟出現(xiàn)了分支,它需要根據(jù)某一特定的條件選擇其中的一個(gè)分支執(zhí)行,選擇結(jié)構(gòu)有單選擇、雙選擇和多選擇三種形式。
● 不斷的重復(fù),被稱作循環(huán),所以這里的循環(huán)結(jié)構(gòu)通常就是用來表示反復(fù)執(zhí)行一個(gè)程序或某些操作的過程,直到某條件為假(或?yàn)檎妫r(shí)才可終止循環(huán)。在循環(huán)結(jié)構(gòu)中最主要的是:什么時(shí)候可以執(zhí)行循環(huán)?出現(xiàn)哪些操作需要循環(huán)執(zhí)行?循環(huán)結(jié)構(gòu)的基本形式有兩種。當(dāng)型循環(huán)和直到型循環(huán)。
● 重用測(cè)試過代碼,如果重用別的程序中的部分越多,您自身的工作也越簡單。在面向?qū)ο笾校赜玫倪^程更為容易一些,因?yàn)榇a本身的可復(fù)用性更高。如果項(xiàng)目的任務(wù)不重,程序員之間的協(xié)作也更容易。
面向?qū)ο蟮念悗熘械念惡涂蚣苣軌驇椭鷾p輕編程任務(wù)。例如,如果您使用了蘋果公司提供的軟件框架,您就可以和蘋果公司的程序員合作。這些框架通常構(gòu)成了您的程序中比較基礎(chǔ)的部分,而您可以把精力放在您最擅長的方面,其它的事情讓類庫的開發(fā)人員去做。因此,您的項(xiàng)目可以更快的做出原型系統(tǒng),更快的完成,協(xié)作方面的問題也更少。
若一個(gè)編程語言的語法允許用成對(duì)的關(guān)鍵字包圍一段程序,形成一個(gè)結(jié)構(gòu),這種編程語言稱為有“區(qū)塊結(jié)構(gòu)”(block-structured),這類的結(jié)構(gòu)包括用ALGOL 68的if..fi包圍的程序,或是在PL/I中用BEGIN..END包圍的一段程序,或是在C語言中用大括號(hào){...}包圍的一段程序。
結(jié)構(gòu)化編程語言
用任何語言都可以進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì),不過一般較常使用程序式的編程語言。早期的結(jié)構(gòu)化編程語言包括ALGOL、 Pascal、PL/I及Ada,不過后來大部份的程序式編程語言都鼓勵(lì)使用結(jié)構(gòu)化程序設(shè)計(jì),有時(shí)也會(huì)特意的省去一些特性(例如不支援goto指令)使得非結(jié)構(gòu)化的程序設(shè)計(jì)更加困難。
結(jié)構(gòu)化程序理論可做為結(jié)構(gòu)化編程的理論基礎(chǔ),結(jié)構(gòu)化程序理論中提到利用順序、選擇及重復(fù)這三種組合程序的方式,可以表示所有可計(jì)算函數(shù)。上述的三種結(jié)構(gòu)已足以表示CPU中的指令周期,也可以表示圖靈機(jī)的運(yùn)作,以此觀點(diǎn)來看,處理器所執(zhí)行的指令可視為是某種“結(jié)構(gòu)化程序”,雖然整個(gè)程序可能不是一個(gè)結(jié)構(gòu)化程序。一般都認(rèn)為結(jié)構(gòu)化程序理論是歸功于伯姆和賈可皮尼于1966年發(fā)表的論文,其中一個(gè)原因可能是戴克斯特拉引用過此論文。結(jié)構(gòu)化程序理論未提及如何撰寫結(jié)構(gòu)化程序,也沒有提到結(jié)構(gòu)化程序的分析,后來1960至1970年代時(shí),戴克斯特拉、羅伯特·弗洛伊德、東尼·霍爾等計(jì)算機(jī)科學(xué)家在此領(lǐng)域有許多的貢獻(xiàn)。
結(jié)構(gòu)化編程中一項(xiàng)重要的原則是減少甚至禁止goto指令的使用,不過不是所有計(jì)算機(jī)科學(xué)家都贊成禁止使用goto指令。高德納贊成程序設(shè)計(jì)時(shí)需考慮可讀性,但他不贊成禁用goto指令。在其1974年發(fā)表的論文《使用goto指令的結(jié)構(gòu)化編程》(Structured Programming with Goto Statements)中,他提出了一些程序,使用goto指令可以使得程序更清楚而有效率,也不會(huì)犧牲程序的可讀性。高德納提出了一個(gè)較松的結(jié)構(gòu)限制要求:將程序以流程圖表示,前進(jìn)的分支在流程圖的左側(cè),倒退的分支在流程圖的右側(cè),所有分支均不得交叉。
結(jié)構(gòu)化編程在1970年有很大的進(jìn)展,IBM的研究員哈倫·米爾斯(英語:Harlan Mills)將結(jié)構(gòu)化編程應(yīng)用在紐約時(shí)報(bào)研究檔案索引系統(tǒng)的開發(fā),此計(jì)劃相當(dāng)成功,因此許多公司開始使用結(jié)構(gòu)化編程,不過戴克斯特拉評(píng)論米爾斯使用的方式和一些已發(fā)表論文中的方式不同。
到1987年時(shí)在計(jì)算機(jī)科學(xué)領(lǐng)域仍有針對(duì)結(jié)構(gòu)化編程的爭論,弗蘭克·魯賓發(fā)表了一篇論文《“goto有害論”是有害的》(GOTO considered harmful' considered harmful),引發(fā)許多的反對(duì),戴克斯特拉本人也批評(píng)魯賓及其追隨者的論點(diǎn)。
在二十世紀(jì)末時(shí)絕大多數(shù)的計(jì)算機(jī)科學(xué)學(xué)者均已同意使用結(jié)構(gòu)化程序設(shè)計(jì)的好處,原來缺乏程序結(jié)構(gòu)的高階編程語言(如FORTRAN、COBOL及BASIC)也都已加入此特性。
“測(cè)量程序設(shè)計(jì)”是繼程序設(shè)計(jì)語言之后進(jìn)一步提高程序設(shè)計(jì)能力的一門課程。
本書從實(shí)際應(yīng)用出發(fā),以軟件工程化的基本思想和結(jié)構(gòu)化、規(guī)范化的方法,結(jié)合測(cè)量工程的特點(diǎn)和實(shí)例,介紹軟件開發(fā)的全過程。全書除總論外共分為六章,內(nèi)容包括程序設(shè)計(jì)的基本原理、軟件的總體設(shè)計(jì)、軟件的 詳細(xì)設(shè)計(jì)、程序的編碼工作 程序的測(cè)試和調(diào)試,測(cè)量程序開發(fā)示例 。本書系大專院校測(cè)繪專業(yè)的“測(cè)量程序設(shè)計(jì)”課程的教材,也可作為學(xué)過一門程序設(shè)計(jì)語言的讀者的自學(xué)用書。