![第 6 章 系統(tǒng)實現(xiàn)_第1頁](http://file4.renrendoc.com/view/91a2a0e804f5852b1a8a402c6949732d/91a2a0e804f5852b1a8a402c6949732d1.gif)
![第 6 章 系統(tǒng)實現(xiàn)_第2頁](http://file4.renrendoc.com/view/91a2a0e804f5852b1a8a402c6949732d/91a2a0e804f5852b1a8a402c6949732d2.gif)
![第 6 章 系統(tǒng)實現(xiàn)_第3頁](http://file4.renrendoc.com/view/91a2a0e804f5852b1a8a402c6949732d/91a2a0e804f5852b1a8a402c6949732d3.gif)
![第 6 章 系統(tǒng)實現(xiàn)_第4頁](http://file4.renrendoc.com/view/91a2a0e804f5852b1a8a402c6949732d/91a2a0e804f5852b1a8a402c6949732d4.gif)
![第 6 章 系統(tǒng)實現(xiàn)_第5頁](http://file4.renrendoc.com/view/91a2a0e804f5852b1a8a402c6949732d/91a2a0e804f5852b1a8a402c6949732d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、管理信息系統(tǒng)主講鄒凱 博學篤行 盛德日新6第六章 系統(tǒng)實現(xiàn)了解結(jié)構(gòu)化程序設(shè)計方法掌握發(fā)展及選擇程序設(shè)計語言的熟練掌握程序設(shè)計風格的要求理解程序設(shè)計的技巧了解軟件文檔的編寫要求第六章 系統(tǒng)實現(xiàn)6.1 編程方法介紹6.2 程序設(shè)計語言的選擇6.3 程序設(shè)計的風格6.4 程序設(shè)計的技巧6.5 系統(tǒng)實現(xiàn)階段的文檔 第六章 系統(tǒng)實現(xiàn)系統(tǒng)實現(xiàn)是在系統(tǒng)分析、系統(tǒng)設(shè)計的基礎(chǔ)上,將系統(tǒng)設(shè)計的每一個細節(jié),用計算機語言(或開發(fā)工具)完整地表達出來,以便在計算機上實現(xiàn)該系統(tǒng)。一般將在計算機上實現(xiàn)的系統(tǒng)稱為新系統(tǒng)。新系統(tǒng)是建設(shè)的最終目標,是能在計算機上運行的程序。新系統(tǒng)既要能很好地體現(xiàn)原系統(tǒng)的功能又要能很好地在計算機上
2、運行。新系統(tǒng)的實現(xiàn)是對系統(tǒng)分析、系統(tǒng)設(shè)計階段工作的檢驗,又是取得用戶對新系統(tǒng)信任的關(guān)鍵階段。系統(tǒng)的規(guī)模越大,新系統(tǒng)的實現(xiàn)就越復雜。為此,程序設(shè)計人員要具有比較豐富的程序設(shè)計經(jīng)驗,具有良好的程序設(shè)計風格和豐富的編程技巧。系統(tǒng)實現(xiàn)的主要任務(wù)是進行編程語言的選擇、程序的編寫與調(diào)試。6.1 程序設(shè)計方法介紹6.1.1 結(jié)構(gòu)化程序的結(jié)構(gòu)6.1.2 自頂向下、逐步求精6.1.3 模塊化6.1.4 面向?qū)ο蟮某绦蛟O(shè)計方法6.1.5 CS結(jié)構(gòu)和BS結(jié)構(gòu) 6.1 程序設(shè)計方法介紹 用計算機對任何問題進行求解,都要把問題轉(zhuǎn)化成計算機能夠識別的語言程序,即進行程序設(shè)計。程序設(shè)計方法指的是按一定的規(guī)則書寫程序結(jié)構(gòu),研
3、究的是程序設(shè)計的有關(guān)原則和方法。目前軟件設(shè)計中,廣泛采用結(jié)構(gòu)化程序設(shè)計方法,這是一種公認的較好的程序設(shè)計方法。其主要思想可以概括為:自頂向下、逐步求精和模塊化。6.1.1 結(jié)構(gòu)化程序的結(jié)構(gòu) 一個好的計算機程序,應(yīng)具備開發(fā)費用低、結(jié)構(gòu)清晰、調(diào)試容易、易維護和執(zhí)行效率高等特點。為了避免過去那種“個人作坊”式的程序設(shè)計方法,規(guī)范程序的結(jié)構(gòu),提高程序的靈活性,在結(jié)構(gòu)化程序設(shè)計方法中規(guī)定了程序設(shè)計中的一些基本原則,使程序設(shè)計“有章可循”。原則之一:使用單入口、單出口的程序控制結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計方法中規(guī)定了三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)在程序中都只有一個入口和一個出口,即“
4、單入口、單出口”結(jié)構(gòu)。這樣就能確保不論一個程序中包含多少個控制結(jié)構(gòu),整個程序仍能保持一條清晰的線索。1)順序結(jié)構(gòu) 順序結(jié)構(gòu)的特點是:計算機按書寫的先后次序,自上而下逐條順序執(zhí)行程序語句,中間沒有選擇或重復執(zhí)行的過程,如圖6.1。語句1語句2語句3 圖6.1 順序結(jié)構(gòu)的執(zhí)行2)選擇結(jié)構(gòu) 選擇結(jié)構(gòu)的特點是:在程序執(zhí)行過程中出現(xiàn)了分支,要根據(jù)不同情況選擇其中一個分支執(zhí)行。如圖6.2,圖6.2(a)是if-else結(jié)構(gòu),圖6.2(b)是if結(jié)構(gòu),if結(jié)構(gòu)沒有else分支,也叫不平衡的分支結(jié)構(gòu)。(a) if-else結(jié)構(gòu) n n y y 條件 語句1語句2 條 件語句1(b) if結(jié)構(gòu)圖6.2 選擇結(jié)構(gòu)
5、的執(zhí)行3)循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)的特點是:在程序執(zhí)行過程中,一條或多條語句被重復執(zhí)行多次(包括次),執(zhí)行的次數(shù)由循環(huán)條件確定,如圖6.3。循環(huán)結(jié)構(gòu)一般可分為兩種類型:while循環(huán)類型和until循環(huán)類型。條件 循環(huán)體n 循環(huán)體條件ny注:循環(huán)體是由一條或多條語句構(gòu)成的程序體。目前,大多數(shù)程序設(shè)計語言都支持結(jié)構(gòu)化程序設(shè)計方法中規(guī)定的三種基本結(jié)構(gòu),并可由相應(yīng)的語句實現(xiàn)。例如在語言中,if-else語句實現(xiàn)選擇結(jié)構(gòu),While語句和do-while語句實現(xiàn)循環(huán)結(jié)構(gòu)。 (a) while循環(huán)類型 (b) until循環(huán)類型 圖6.3 循環(huán)結(jié)構(gòu)6.1.1 結(jié)構(gòu)化程序的結(jié)構(gòu)說明:為了滿足程序設(shè)計的實際需要,
6、結(jié)構(gòu)化程序設(shè)計方法還允許使用擴展程序結(jié)構(gòu),這種擴展的程序結(jié)構(gòu)不在三種基本結(jié)構(gòu)之列,但也符合單入口、單出口原則,在實際應(yīng)用中也經(jīng)常使用。在程序中往往用來表達比較復雜的事務(wù)結(jié)構(gòu),能夠使程序易于理解和提高程序的清晰性。例如:語言中的elseif結(jié)構(gòu)的程序流程如6.4。6.1.1 結(jié)構(gòu)化程序的結(jié)構(gòu)條件1條件2條件3語 句 1語 句 2語 句 3語 句 4圖6.4 elseif結(jié)構(gòu)6.1.1 結(jié)構(gòu)化程序的結(jié)構(gòu) 在許多情況下,在程序的循環(huán)過程中當滿足某種條件時,需要立即從循環(huán)中轉(zhuǎn)移出來,這時從程序結(jié)構(gòu)上看,可能會出現(xiàn)兩個出口的情況。但這種結(jié)構(gòu)對程序的清晰度并沒有多大影響,相反還可以提高程序的執(zhí)行效率,縮短
7、程序執(zhí)行時間。所以在實際應(yīng)用中,允許使用這種結(jié)構(gòu)來控制程序的執(zhí)行。不少高級語言中都設(shè)有從循環(huán)中轉(zhuǎn)移出來的語句。例如語言中的break語句。6.1.1 結(jié)構(gòu)化程序的結(jié)構(gòu)無條件轉(zhuǎn)移語句goto語句,公認為是對程序清晰性影響最大的語句。對goto語句不加限制地使用,會造成整個程序雜亂無章,甚至使程序無法理解或難以進行維護。目前一致認為,對于初學者要禁止使用goto語句,對比較有經(jīng)驗的程序員可以有限制地使用goto語句來提高程序效率,例如將goto語句的轉(zhuǎn)移范圍限制在同一程序結(jié)構(gòu)內(nèi)部。6.1.2 自頂向下、逐步求精 所謂自頂向下、逐步求精,就是指在程序設(shè)計初期,首先要對程序的功能有一個全面的理解,繼而
8、將其分解為若干個子功能,再分析每一個子功能,并繼續(xù)分解直至不需再分解為止,然后對每一個子功能進行相應(yīng)的算法設(shè)計,最終實現(xiàn)每一個子功能所需的程序結(jié)構(gòu)及方法。 這種方法有助于程序員全面理解程序應(yīng)完成的功能,通過子功能的分解可以使程序員掌握整個程序的結(jié)構(gòu),了解各個子功能及上、下級程序之間的數(shù)據(jù)接口。6.1.2 自頂向下、逐步求精 對于一些初學者,往往養(yǎng)成一種不良習慣,即在對問題沒有完全理解的情況下就著手編寫語言程序,往往事倍功半,甚至程序?qū)懙阶詈蟛虐l(fā)現(xiàn)整體結(jié)構(gòu)不正確。只能全部推翻重來,造成人力、財力上的浪費。這種失敗的例子屢見不鮮。對于一個成熟的程序員來說,在對要解決的問題有了全面理解后,應(yīng)先使用程
9、序設(shè)計的表達工具(如程序流程圖、PAD圖、N-S圖、偽代碼等)對問題進行描述,最后再使用具體的計算機語言把問題表達出來,調(diào)試成功后在計算機上運行。6.1.3 模塊化 把一個較大的程序,分解成若干個彼此相對獨立的功能模塊,這個過程稱為模塊化。在前面講到的將程序功能分解為子功能,最終實現(xiàn)時可將一個子功能分解為若干模塊,或?qū)⒍鄠€子功能合并為一個模塊。也就是說子功能與模塊之間并非是一一對應(yīng)關(guān)系。也可以將某一個多處用到的功能設(shè)計成一個獨立模塊供其他程序調(diào)用。例如:將求兩個數(shù)的最大公約數(shù)設(shè)計成一個獨立程序,供其它程序調(diào)用。很多計算機語言中都提供子程序,函數(shù)等程序設(shè)計方法,這些都是支持模塊化程序設(shè)計的體現(xiàn)。
10、6.1.3 模塊化 模塊化程序設(shè)計能將較大的程序分解為一個個較小的程序,使程序員能夠集中精力解決一個個較小的程序,繼而完成整個程序的設(shè)計。模塊化程序設(shè)計也使多人合作完成一個較大的程序成為可能。在模塊化程序設(shè)計中,要注意模塊劃分的科學性。一般認為一個模塊完成一個功能最好,模塊的大小也應(yīng)控制在一個人能夠掌握的范圍內(nèi)。另外,還要注意模塊之間的關(guān)系,模塊之間應(yīng)盡量保持簡單的數(shù)據(jù)聯(lián)系,這樣有利于每一個模塊進行單獨調(diào)試和程序在維護中進行查錯和排錯。6.1.3 模塊化 總之,結(jié)構(gòu)化程序設(shè)計方法,就是采用自頂向下、逐步求精的方法對問題進行分析、分解,實現(xiàn)時采用模塊化的程序設(shè)計方法,采用單入口、單出口的程序結(jié)構(gòu)
11、來構(gòu)造程序,使設(shè)計出的程序能正確地完成應(yīng)有的功能,并且便于調(diào)試和維護。6.1.4 面向?qū)ο蟮某绦蛟O(shè)計方法 結(jié)構(gòu)化程序設(shè)計方法是一種面向數(shù)據(jù)處理過程的方法,它把數(shù)據(jù)和過程分離為相互獨立的實體。而面向?qū)ο蟮某绦蛟O(shè)計方法是在本質(zhì)上不同于結(jié)構(gòu)化方法的一種新方法。面向?qū)ο蟪绦蛟O(shè)計既吸取了結(jié)構(gòu)化方法的優(yōu)點,又考慮了現(xiàn)實世界與對象空間的映射關(guān)系。 6.1.4 面向?qū)ο蟮某绦蛟O(shè)計方法面向?qū)ο蟮幕境绦蚪Y(jié)構(gòu)被稱為對象。面向?qū)ο蠓椒▽⒖陀^世界看成由許多不同種類的對象構(gòu)成的。例如:可以將學校簡單看作由老師和學生構(gòu)成的,老師和學生就是不同的對象。每個對象都有自己的內(nèi)部狀態(tài)和內(nèi)部運動規(guī)律,不同的對象之間相互聯(lián)系相互作用
12、,構(gòu)成了完整的客觀世界。通常用數(shù)據(jù)描述對象的內(nèi)部狀態(tài),并規(guī)定了對數(shù)據(jù)的操作。當對象接受到其他對象發(fā)送來的消息時,可進行相應(yīng)的操作,從而改變其內(nèi)部狀態(tài)。性質(zhì)相同的對象稱為類。類具有封裝性、繼承性和多態(tài)性。6.1.4 面向?qū)ο蟮某绦蛟O(shè)計方法 程序員在程序設(shè)計時,將所要解決的問題分解為若干個類和對象,定義對象的屬性和功能,再用消息來描述對象之間的相互聯(lián)系。將問題中相互聯(lián)系、相互作用的實體用對象和消息在程序中反映出來,這就是面向?qū)ο蟪绦蛟O(shè)計方法的主要思想。 面向?qū)ο蟮某绦蛟O(shè)計語言必須支持抽象數(shù)據(jù)類型?,F(xiàn)在已經(jīng)有多種語言支持面向?qū)ο蟮某绦蛟O(shè)計方法。而且每種語言都有完善的軟件開發(fā)工具。C+中有MS C+、
13、Turbo C+、Borland C+、Visual C+,Pascal中有Turbo Pascal、Object Pascal,Basic中有Visual Basic等。 面向?qū)ο蟮脑O(shè)計方法具有抽象性,可重用性等特點。在今后的程序設(shè)計中將逐步占據(jù)主導地位。6.1.5 C/S結(jié)構(gòu)和B/S結(jié)構(gòu) 隨著網(wǎng)絡(luò)技術(shù),特別是國際互聯(lián)網(wǎng)技術(shù)的發(fā)展,計算機的應(yīng)用已經(jīng)從單機環(huán)境發(fā)展到網(wǎng)絡(luò)上的應(yīng)用。越來越多的軟件要求在網(wǎng)絡(luò)環(huán)境下運行。管理信息系統(tǒng)也經(jīng)歷了從單機向網(wǎng)絡(luò)環(huán)境發(fā)展的過程。更多的管理信息系統(tǒng)是在網(wǎng)絡(luò)環(huán)境下實現(xiàn)信息的收集、傳遞和加工等功能的。所以,管理信息系統(tǒng)的軟件結(jié)構(gòu)應(yīng)充分考慮到在網(wǎng)絡(luò)環(huán)境下的運行效率、可
14、擴展性和可維護性等指標。即使最初開發(fā)的系統(tǒng)不需要在網(wǎng)絡(luò)環(huán)境下運行,也應(yīng)考慮到將來系統(tǒng)擴展或向網(wǎng)絡(luò)環(huán)境移植的可行性。在系統(tǒng)實現(xiàn)階段,選擇程序設(shè)計方法和程序設(shè)計語言時都應(yīng)考慮到系統(tǒng)的運行環(huán)境和移植的問題。 目前,應(yīng)用比較多的軟件結(jié)構(gòu)有C/S結(jié)構(gòu)和B/S結(jié)構(gòu)兩種。隨著計算機技術(shù)的發(fā)展,B/S結(jié)構(gòu)將逐步取代C/S結(jié)構(gòu),成為軟件結(jié)構(gòu)的主流。1) C/S 結(jié)構(gòu) C/S結(jié)構(gòu)指的是客戶機服務(wù)器(Client/Server)模式的軟件結(jié)構(gòu)。產(chǎn)生于九十年代前期,當時是局域網(wǎng)環(huán)境中MIS應(yīng)用系統(tǒng)的主流結(jié)構(gòu)。應(yīng)用程序分為服務(wù)器端程序和客戶機端程序。服務(wù)器程序負責管理數(shù)據(jù)資源(如數(shù)據(jù)庫等),并接受客戶機的服務(wù)請求(如數(shù)
15、據(jù)的查詢或更新等),向客戶機提供所需的數(shù)據(jù)或服務(wù)??蛻魴C程序面向用戶,接受用戶的應(yīng)用請求,并通過一定的協(xié)議或接口與服務(wù)器進行通信,將服務(wù)器提供的數(shù)據(jù)等資源經(jīng)過處理后提供給用戶。如圖6.5。1) C/S 結(jié)構(gòu)圖6.5 C/S結(jié)構(gòu)服務(wù)器客戶機1客戶機n用戶1用戶nHUB1) C/S 結(jié)構(gòu) C/S結(jié)構(gòu)能夠通過網(wǎng)絡(luò)環(huán)境完成數(shù)據(jù)資源的共享,適合管理信息系統(tǒng)的一般應(yīng)用,并且系統(tǒng)的開發(fā)費用較低、開發(fā)周期短。同時,它也存在很多的缺點。使得C/S結(jié)構(gòu)的應(yīng)用受到了很大的限制。其缺點如下:(1)C/S結(jié)構(gòu)只能適用于中、小規(guī)模的局域網(wǎng)。對于大規(guī)模的局域網(wǎng)和廣域網(wǎng)就不能勝任了。這就限制了這種軟件結(jié)構(gòu)的普遍適用性。(2)
16、當局域網(wǎng)中的用戶數(shù)量增加,頻繁訪問服務(wù)器中的數(shù)據(jù)資源時,服務(wù)器的負載急劇增加。系統(tǒng)性能明顯下降。1) C/S 結(jié)構(gòu)(3)由于C/S結(jié)構(gòu)的應(yīng)用程序存在于服務(wù)器端和客戶機端,并且二者要協(xié)同工作。這就給系統(tǒng)的維護工作帶來了很多麻煩。通常在對應(yīng)用程序進行修改、升級時,必須同時對兩端的應(yīng)用程序做出相應(yīng)的修改,還要更新所有客戶端的應(yīng)用程序。使系統(tǒng)管理和維護工作難以進行。 所以,C/S結(jié)構(gòu)的應(yīng)用程序雖然具有開發(fā)費用低、開發(fā)周期短等優(yōu)點,但不具有普遍適用性,系統(tǒng)性能不能得到保證,系統(tǒng)的可擴展性難以實現(xiàn)。 近幾年,B/S結(jié)構(gòu)的應(yīng)用不斷得到普及,它能很好地克服C/S結(jié)構(gòu)的缺點,越來越多地應(yīng)用在管理信息系統(tǒng)中。2)
17、 B/S 結(jié)構(gòu) Web服務(wù)器客戶機1客戶機n用戶1用戶n交換機圖6.6 B/S結(jié)構(gòu)應(yīng)用服務(wù)器數(shù)據(jù)庫服務(wù)器由于Web技術(shù)迅速發(fā)展,C/S體系結(jié)構(gòu)由單一的兩個層次,擴展到由表示層(Browser)、功能層(Web Server)與數(shù)據(jù)庫服務(wù)層(DB Server)構(gòu)成的三層分布式結(jié)構(gòu),即瀏覽器服務(wù)器(Browser/Server,簡稱B/S)模式的軟件結(jié)構(gòu)。B/S結(jié)構(gòu)采用Internet/Intranet技術(shù),使用統(tǒng)一的通信協(xié)議TCP/IP和統(tǒng)一的基于Web瀏覽器的用戶界面,適用于廣域網(wǎng)環(huán)境。一部分事務(wù)邏輯在前端實現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實現(xiàn),這種結(jié)構(gòu)通常設(shè)有數(shù)據(jù)庫服務(wù)器、Web服務(wù)器、應(yīng)用
18、服務(wù)器等。應(yīng)用程序主要存放在服務(wù)器中,客戶端只需要配置標準的瀏覽器。如圖6.6。2) B/S 結(jié)構(gòu)圖6.6 B/S結(jié)構(gòu)Web服務(wù)器客戶機1客戶機n用戶1用戶n交換機應(yīng)用服務(wù)器數(shù)據(jù)庫服務(wù)器B/S結(jié)構(gòu)具有以下特點: 由于B/S結(jié)構(gòu)采用Internet/Intranet技術(shù),以TCP/IP作為通信協(xié)議,可以適用于局域網(wǎng)和廣域網(wǎng)環(huán)境,具有普遍適用性。 B/S結(jié)構(gòu)中的各服務(wù)器分別進行數(shù)據(jù)處理、業(yè)務(wù)處理和Web頁面組織。使系統(tǒng)負載均衡分布。當用戶增加時,不會引起系統(tǒng)性能的明顯下降。 由于客戶端都是標準的瀏覽器,各服務(wù)器分工明確,所以,整個系統(tǒng)易于擴展,容易管理。 與C/S結(jié)構(gòu)相比,B/S結(jié)構(gòu)具有顯著的優(yōu)勢
19、。所以,在管理信息系統(tǒng)的開發(fā)中,應(yīng)以目前公認比較好的B/S結(jié)構(gòu)作為軟件結(jié)構(gòu)。6.2 程序設(shè)計語言的選擇6.2.1 程序設(shè)計語言的發(fā)展6.2.2 程序設(shè)計語言的選擇 6.2 程序設(shè)計語言的選擇 在系統(tǒng)實現(xiàn)階段,首先要進行的一項重要工作,就是選擇適當?shù)某绦蛟O(shè)計語言。自60年代以來已出現(xiàn)了數(shù)千種不同的程序設(shè)計語言,其中有一小部分得到了廣泛的應(yīng)用。隨著計算機技術(shù)的發(fā)展和對計算機軟件需求的不斷增長,程序設(shè)計語言也不斷更新?lián)Q代。也就是說開發(fā)人員所能夠使用的程序設(shè)計語言越來越多,那么從中選擇一種合適的語言就顯得尤為重要。6.2.1 程序設(shè)計語言的發(fā)展 隨著計算機功能的不斷豐富和計算機在社會中的廣泛應(yīng)用,程序
20、設(shè)計語言也經(jīng)歷了由低級到高級、由難學難用到易學易用的發(fā)展過程。語言的發(fā)展大致可分為代。 1) 第一代語言機器語言在計算機產(chǎn)生初期,人們直接利用硬件系統(tǒng)提供的指令系統(tǒng)編寫“程序”來控制計算機的運行。指令是計算機硬件能理解的語言,因此通常把指令系統(tǒng)稱為機器語言。這種語言都是用代碼“”和“”組成的。一般采用在紙卡上打孔的方式,通過讀卡機輸入計算機。用機器語言寫成的“程序”難以理解,而且由于各種計算機的指令系統(tǒng)差別很大,用機器語言編寫的“程序”就只能用于特定的計算機?,F(xiàn)在幾乎沒有人再用這種語言來編寫程序了。2) 第二代語言匯編語言由于機器語言難以記憶和理解,所以人們采用助記符來表示指令中的操作碼和操作
21、數(shù),這種助記符形式的指令系統(tǒng)被稱為匯編語言。匯編語言基本與指令系統(tǒng)一一對應(yīng)。在匯編語言輸入到計算機中要經(jīng)過一個匯編語言到機器語言的轉(zhuǎn)換過程,這個過程稱為匯編。為了提高匯編語言的效率,人們又設(shè)計了宏指令,即用一條指令來描述若干條指令,具有宏指令的匯編語言稱為宏匯編。2) 第二代語言匯編語言匯編語言用助記符代替了機器語言中的“”和“”構(gòu)成的操作碼,例如:用“ADD”表示操作碼“加”。使更多的人能夠看懂程序,也提高了編寫程序的效率。但從總體上來說匯編語言仍然沒有脫離指令系統(tǒng),相對于人的語言它更靠近機器語言,所以匯編語言與機器語言一起被稱為面向機器的語言,都是低級語言。2) 第二代語言匯編語言與后來興
22、起的高級語言相比,匯編語言仍是難以閱讀和理解,一般也不能在不同的機型上通用?,F(xiàn)在匯編語言主要用于編寫與硬件特征相關(guān)或?qū)Τ绦驁?zhí)行時間和空間都有嚴格限制的程序。如操作系統(tǒng)中的中斷處理程序和I/O設(shè)備的驅(qū)動程序等。有時也用于不同語言編寫的程序之間的接口。3) 第三代語言高級語言 60年代初以后,陸續(xù)推出了更接近人類語言、有一定語法規(guī)則的計算機語言,被稱為高級語言。用高級語言書寫的算術(shù)表達式與人們的書寫習慣差不多,而且可以將復雜的算法,按語法規(guī)則寫成源程序。源程序再經(jīng)過解釋程序或編譯程序的翻譯,轉(zhuǎn)換成計算機硬件可識別的目標程序。程序設(shè)計人員不必掌握計算機的硬件結(jié)構(gòu)和記憶機器指令。3) 第三代語言高級語
23、言因為用高級語言編寫的程序是對問題求解過程的描述,所以又稱為面向過程的語言。高級語言的種類很多,不下千種,并且還在不斷增加。隨著計算機技術(shù)的發(fā)展,有些語言不能適應(yīng)社會的需要逐漸被淘汰,也有些語言被廣泛應(yīng)用,至今不衰。現(xiàn)簡述如下:3) 第三代語言高級語言 FORTRAN語言。1954年IBM公司程序師約翰巴科斯(J.Backus)設(shè)計了一種用于科學計算的“公式翻譯語言(FORmula TRANslator)”,即FORTRAN語言。它是使用最早的高級語言。在科學計算領(lǐng)域有重要地位。FORTRAN語言具有充分表達包含算術(shù)運算和邏輯運算的常用科學計算等問題的能力,語言結(jié)構(gòu)簡單。 3) 第三代語言高級
24、語言 FORTRAN提供整數(shù)、實數(shù)、雙精度數(shù)、復數(shù)和布爾數(shù)等數(shù)據(jù)類型。程序由一個主程序和一組子程序(包括函數(shù))組成,主、子程序獨立編譯,把各個獨立編譯得到的目標用鏈接程序連接起來,即可運行。程序中各程序塊之間可進行參數(shù)傳遞,也可通過公用語句和等價語句來實現(xiàn)數(shù)據(jù)的共用。 3) 第三代語言高級語言FORTRAN語言自50年代至今已先后推出多個版本,較有影響的是標準FORTRAN、FORTRAN77、FORTRAN8X。FORTRAN77引入了字符類型,增加了處理字符型常數(shù)變量及數(shù)組的能力,而且在結(jié)構(gòu)化控制結(jié)構(gòu)方面作了很大的改進,引入了結(jié)構(gòu)化分支語句if-else-endif、if-then-end
25、if,表達能力大為提高。但數(shù)據(jù)類型不夠豐富,難以支持復雜的數(shù)據(jù)結(jié)構(gòu)。3) 第三代語言高級語言 BASIC語言。20世紀60年代初期,美國達特默斯學院約翰凱梅尼(J.Kemeny)和托馬斯卡茨(T.Kurtz)在簡化FORTRAN的基礎(chǔ)上,研制出一種“初學者通用符號指令代碼”(Beginners All purpose Symbolic Intruction Code),簡稱BASIC??捎糜谝话愕臄?shù)值計算和事務(wù)處理。由于其簡單易懂、適用面廣、具有交互功能,曾一度被廣泛應(yīng)用。3) 第三代語言高級語言我國曾把BASIC語言作為計算機的入門語言,對計算機語言的普及起過巨大作用。它的早期版本不支持結(jié)構(gòu)
26、化程序設(shè)計,不區(qū)分數(shù)據(jù)類型,執(zhí)行速度慢,曾一度衰落。后來推出的TRUE BASIC、QBASIC等版本,在保留了簡單易學特點的基礎(chǔ)上,支持結(jié)構(gòu)化程序設(shè)計,并完善了語言功能,使之又成為流行的計算機語言。3) 第三代語言高級語言 PASCAL語言。1971年,瑞士聯(lián)邦技術(shù)學院尼克勞斯沃爾斯(N.Wirth)教授發(fā)明了另一種簡單明晰的電腦語言,這就是以帕斯卡的名字命名的PASCAL語言。PASCAL語言語法嚴謹,層次分明,程序易寫,具有很強的可讀性,是第一個結(jié)構(gòu)化的編程語言。它提供了豐富的數(shù)據(jù)類型、靈活的數(shù)據(jù)結(jié)構(gòu)構(gòu)造能力和結(jié)構(gòu)化的程序結(jié)構(gòu)。廣泛用于科學計算、數(shù)據(jù)處理以及系統(tǒng)軟件的開發(fā)。 3) 第三代
27、語言高級語言它具有完備的控制結(jié)構(gòu),豐富的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu),語言表達能力強,結(jié)構(gòu)清晰。由于PASCA語言系統(tǒng)、全面、清晰地體現(xiàn)了程序設(shè)計語言的基本概念,國內(nèi)外眾多院校將PASCAL作為教學語言。后來推出的TURBO PASCAL更加完善了PASCAL的功能,并為用PASCAL開發(fā)軟件提供了集成化的開發(fā)環(huán)境,將編輯、調(diào)試、編譯集于一身,使PASCAL語言成為人們所喜愛的高級語言之一。 3) 第三代語言高級語言 PASCAL在現(xiàn)代語言中影響深遠,Ada就是來源于PASCAL的一個程序設(shè)計系統(tǒng),但風格又絕對不同于PASCAL,克服了PASCAL許多局限和不足,支持結(jié)構(gòu)化程序結(jié)構(gòu)。它提倡用一致的設(shè)計方
28、法以及恰當?shù)娘L格開發(fā)軟件,是表達能力很強的通用程序設(shè)計語言。Ada是針對大型實時、嵌入式計算機系統(tǒng)設(shè)計的。Ada不僅是一種程序設(shè)計語言,它和Ada環(huán)境一起構(gòu)成非常強有力的工具。美國國防部將其定為全軍統(tǒng)一的程序設(shè)計語言。3) 第三代語言高級語言 C語言。1972年AT&T貝爾實驗室的兩位科學家鄧尼斯里奇(D.Ritchie)和他的合作者肯湯姆森(K.Thompson),共同發(fā)明了著名的計算機語言C。最初它是用作UNIX操作系統(tǒng)的開發(fā)語言。與其它語言相比,C語言有其顯著的優(yōu)點。3) 第三代語言高級語言它支持結(jié)構(gòu)化程序設(shè)計,控制結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)完備,有豐富的運算符和數(shù)據(jù)類型,移植力強,編譯質(zhì)量高。用C
29、語言編譯程序產(chǎn)生的目標程序,其執(zhí)行效率可與匯編語言產(chǎn)生的目標文件相媲美。C語言既有高級語言的優(yōu)點,又有低級語言的特點,應(yīng)用領(lǐng)域很寬廣,適用于編寫應(yīng)用程序,又適合編寫操作系統(tǒng)、編譯系統(tǒng)等系統(tǒng)軟件。3) 第三代語言高級語言目前,使用較多的TURBO C,它是一個集編輯源程序、調(diào)試、編譯、試運行于一身的集成化環(huán)境。C語言是一種理想的結(jié)構(gòu)化語言,用它能編寫出結(jié)構(gòu)緊湊、執(zhí)行高效、風格優(yōu)美的程序。一般認為C語言是計算機程序設(shè)計人員應(yīng)該學會使用的一門語言,很多高等院校都將C語言作為計算機專業(yè)的必修課。3) 第三代語言高級語言 COBOL語言。1959年5月,美國五角大樓委托格雷斯霍波博士領(lǐng)導一個數(shù)據(jù)系統(tǒng)語言
30、委員會(Conference on Data System Language,簡稱CODASYL),設(shè)計了面向商業(yè)的通用語言(Common Business Oriented Language),即COBOL語言。3) 第三代語言高級語言COBOL最重要的特征是語法與英文很接近,可以讓不懂電腦的人也能看懂程序。COBOL能方便地處理數(shù)值數(shù)據(jù)和文字數(shù)據(jù),它是描述事務(wù)數(shù)據(jù)處理方面的標準化語言。COBOL語言的一個重要而明顯的特征是它采用類似于英語的語法,使得程序便于閱讀,程序具有較好的自說明能力,有利于文檔化管理。3) 第三代語言高級語言COBOL程序的結(jié)構(gòu)由標識部、環(huán)境部、數(shù)據(jù)部和過程部四部分組
31、成。標識部:用以注明程序名和作者姓名并給出其它的注釋作為程序文件的說明。環(huán)境部:含有如程序和外部數(shù)據(jù)文件間聯(lián)系等依賴于機器的程序說明。數(shù)據(jù)部:包含了對數(shù)據(jù)的描述。過程部:包含了算法的描述。3) 第三代語言高級語言 這四部分把依賴和獨立于機器的程序分開,把數(shù)據(jù)描述和算法描述分開,從而使每一部分均可獨立修改而不影響到另外部分,保證了最高通用性。 COBOL除用于商用和行政管理用外,還可用作表生成、數(shù)據(jù)通信與大型程序設(shè)計。70年代中期,COBOL引入了結(jié)構(gòu)化思想及CODASYL的數(shù)據(jù)庫功能,為COBOL的應(yīng)用開拓了更廣闊的領(lǐng)域。 還有一些語言一般只適用于某些特殊領(lǐng)域,通常具有特殊的語法形式,稱之為專
32、用語言。例如專用于處理數(shù)組和向量的APL語言,用于數(shù)控機床的APT語言,用于微處理器軟件開發(fā)的FORTH語言以及用于處理符號和表的LISP語言等。這些語言在各自領(lǐng)域發(fā)揮了巨大作用。4) 第四代語言 高級語言的發(fā)展大大促進了計算機的廣泛應(yīng)用。高級語言中既有通用語言,又有為某一特定應(yīng)用領(lǐng)域設(shè)計的專用語言。但從根本上說,高級語言仍是面向過程的語言。強調(diào)“程序結(jié)構(gòu)符合問題的結(jié)構(gòu)”,即用程序來詳細描述問題的求解過程,告訴計算機每一步應(yīng)該“怎樣做”。為了進一步提高編程效率,人們在尋求一種更高級的新語言,即甚高級語言,或稱為第四代語言(4GL,fourth-generation language)。4) 第
33、四代語言第四代語言能使程序員直接按一定的規(guī)則寫出問題的要求,無需列出算法過程。由計算機自動根據(jù)其要求生成相應(yīng)的程序執(zhí)行。也就是只需說明“做什么”而不必詳細描述“怎樣做”。第四代語言應(yīng)具有很強的數(shù)據(jù)管理能力和豐富的非過程化命令語句。關(guān)系數(shù)據(jù)庫查詢語言SQL就具備第四代語言的基本特征。 4) 第四代語言例如:在表(或稱數(shù)據(jù)庫)SC中有學號、課號、成績?nèi)齻€屬性(或字段)要求檢索學習了課號為“C2”課程的學生學號和成績。用SQL語言編寫程序如圖6.7。 SELECT 學號,成績 FROM SC WHERE 課號=C2; 圖6.7 SELECT語句應(yīng)用 該程序可以理解為“從SC中找出課號為“C2”的所有
34、學號和成績”。可以看出,用SQL語言編寫的程序,只是描述了問題是什么,而并未給出解決該問題的方法??梢杂肍OXBASE表示該問題的求解過程如圖6.8。4) 第四代語言 use sc do while .not.eof() if 課號=C2 ? 學號,成績 endif skip enddo 圖6.8 FOXBASE程序片段可見第四代語言只給出問題的描述,而不象面向過程的高級語言要給出問題的求解過程,所以第四代語言也稱為面向問題的語言。4) 第四代語言 在網(wǎng)絡(luò)技術(shù)迅猛發(fā)展階段,諸多面向網(wǎng)絡(luò)服務(wù)的語言如雨后春筍般涌現(xiàn),如描述語言(Jscript,VBScript)、置標語言(XML,HTML, SG
35、ML)、模型語言(UML)、體系結(jié)構(gòu)描述語言(ADL)等,特別是Sun公司發(fā)明的Java語言,更是號稱與平臺無關(guān)。微軟公司在Visual Studio.Net軟件包中發(fā)布了最新語言Visual C#(讀作C sharp)。Visual Studio.NET開發(fā)工具包含了還有Visual Basic.NET、Visual C+.NET,它的新特性將使其成為在Microsoft.NET Framework-微軟下一代Web應(yīng)用程序開發(fā)平臺進行構(gòu)建的完整的開發(fā)環(huán)境。4) 第四代語言從目前情況看,網(wǎng)絡(luò)時代最重要的三種編程語言是Java、XML和C#。它們之間的競爭正在如火如荼地展開,并開始引起編程方法
36、的變化,例如出現(xiàn)“面向構(gòu)件”或“面向Web服務(wù)”的方法。 Java是一個廣泛使用的網(wǎng)絡(luò)編程語言 ,它是一種新的計算概念。作為一種程序設(shè)計語言,它簡單、面向?qū)ο?、不依賴于機器的結(jié)構(gòu),具有可移植性、健壯性、安全性,并且提供了并發(fā)的機制,具有很高的性能。并且最大限度地利用了網(wǎng)絡(luò),Java的小應(yīng)用程序(applet)可在網(wǎng)絡(luò)上傳輸而不受 CPU和環(huán)境的限制。另外,Java還提供了豐富的類庫,使程序設(shè)計者可以很方便地建立自己的系統(tǒng)。4) 第四代語言 XML,稱為可擴展標記語言(Extensible Markup Language),是一種可以用來創(chuàng)建自己的標記的語言。它由萬維網(wǎng)協(xié)會(W3C)創(chuàng)建,用來克
37、服 HTML(即超文本標記語言)的局限。和 HTML 一樣,XML 基于 SGML(標準通用標記語言)。XML 是為 Web 設(shè)計的,它將數(shù)據(jù)與外觀分離,因而相同的XML數(shù)據(jù)可通過使用不同的外觀文件以多種方式顯示。XML協(xié)議是一組用于設(shè)計數(shù)據(jù)格式和結(jié)構(gòu)的規(guī)則和方法,它易于生成便于不同的計算機和應(yīng)用程序讀取的文件。因此,XML正迅速成為使用Internet傳輸數(shù)據(jù)的流行方式。4) 第四代語言C#語言自C/C+演變而來,它現(xiàn)代、簡單、完全面向?qū)ο蠛皖愋桶踩p少了C+的一些特性,不再有宏、模板和多重繼承。新增了嚴格的類型安全、版本控制、垃圾收集等功能。允許使用可應(yīng)用于任何對象的類型化可擴展元數(shù)據(jù)。
38、可以定義域特定屬性并將其應(yīng)用于任何語言元素(類、接口等)。還包括一些精細功能使其成為出色的 Internet 編程工具。C#將會變成為用于編寫“下一代窗口服務(wù)(NGWS )”應(yīng)用程序的主要語言。6.2.2 程序設(shè)計語言的選擇 程序設(shè)計語言的選擇直接關(guān)系到新系統(tǒng)的質(zhì)量。作為有經(jīng)驗的程序員應(yīng)該了解各種常用高級語言的特點,掌握選擇語言的標準,以便根據(jù)問題的需要,合理地選擇適當?shù)某绦蛟O(shè)計語言。常用以下幾項作為語言選擇的標準。 1) 應(yīng)用領(lǐng)域 每種語言都有自己的適用領(lǐng)域。FORTRAN適用于科學領(lǐng)域;COBOL語言適用于事務(wù)處理領(lǐng)域;C語言適用于系統(tǒng)軟件的開發(fā);匯編語言適用于系統(tǒng)軟件的開發(fā)或?qū)崟r處理程序
39、;FOXBASE系列語言適用于計算復雜度較低的管理信息系統(tǒng)。一般的通用語言都具有進行簡單的計算和事務(wù)處理能力。若所涉及的是專業(yè)領(lǐng)域,則應(yīng)優(yōu)先選用專用語言。6.2.2 程序設(shè)計語言的選擇 2) 運行環(huán)境 新系統(tǒng)的運行環(huán)境包括硬件環(huán)境和軟件環(huán)境。硬件環(huán)境是指計算機的處理速度、硬盤空間、顯示器的分辨率、外部設(shè)備的配備情況等。對于檔次較低的計算機只能使用對硬件要求不高的語言。同時還要考慮到該語言在今后硬件升級時,是否容易用更好的語言對程序進行改寫。 軟件環(huán)境是指新系統(tǒng)在運行時所需要的支持軟件。如操作系統(tǒng)、漢字系統(tǒng)、軟件開發(fā)工具等。若運行在WINDOWS下,應(yīng)考慮選用支持WINDOWS設(shè)計風格的語言,這
40、樣設(shè)計出來的程序會有比較好的界面。若運行在DOS環(huán)境下,則應(yīng)考慮與所選用的漢字系統(tǒng)兼容性好且能設(shè)計出良好界面的語言。另外,擁有完善的開發(fā)工具的語言,會提高程序開發(fā)的速度,降低開發(fā)費用。6.2.2 程序設(shè)計語言的選擇 3) 程序員是否熟悉 程序設(shè)計中應(yīng)選用有發(fā)展前途的語言,但也不能一味追求流行的語言。要根據(jù)程序員的知識結(jié)構(gòu),若能在短時間內(nèi)熟悉一門新語言,則應(yīng)選用公認的好語言。否則應(yīng)優(yōu)先選用程序員比較熟悉的語言。另外,在語言的選擇中還要考慮計算的復雜性,執(zhí)行效率等。6.3 程序設(shè)計的風格6.3.1 堅持采用結(jié)構(gòu)化的程序設(shè)計方法6.3.2 注重源程序的書寫規(guī)則6.3.3 給出明確的數(shù)據(jù)說明6.3.4
41、 遵循規(guī)則的語句結(jié)構(gòu)6.3.5 設(shè)計友好的輸入輸出6.3.6 良好風格的編碼原則 6.3 程序設(shè)計的風格 所謂程序設(shè)計的風格,就是程序員在程序設(shè)計中喜歡或習慣使用的表達程序主題的方式。早期的程序設(shè)計強調(diào)效率,而不注重程序的清晰度,造成程序難以理解,甚至無法進行維護。自70年代以來,人們認識到注重程序的清晰結(jié)構(gòu)、簡潔明了的算法設(shè)計,對提高程序的質(zhì)量和程序的可維護性,有著至關(guān)重要的作用。 6.3 程序設(shè)計的風格強調(diào)程序設(shè)計風格很有必要,計算機程序設(shè)計是一項人類的活動,編寫的程序是為人們閱讀、理解、使用甚至修改的,Pascal設(shè)計者沃爾斯教授十分重視程序設(shè)計風格的養(yǎng)成,他堅信“教給學生們以表達他們思
42、維的語言,會深深地影響他們思維和創(chuàng)造發(fā)明的習慣,而正是這些語言本身的混亂直接影響著學生們的程序設(shè)計的風格”。他這里所指的“這些語言”,是當時那些主要用于程序設(shè)計教學的計算機語言,因此他所設(shè)計的Pascal語言,是一種優(yōu)良的程序設(shè)計教學語言,可以用來培養(yǎng)學生嚴謹、清晰的程序設(shè)計風格和良好的習慣,并促使他們從中領(lǐng)會和理解精細的程序設(shè)計技巧。 6.3 程序設(shè)計的風格 程序設(shè)計風格的好壞很大程度上影響到程序質(zhì)量的好壞。良好的程序設(shè)計風格可以使程序結(jié)構(gòu)清晰合理,并且使程序代碼便于維護。培養(yǎng)良好的程序設(shè)計風格對于編程人員來說非常重要,這也是需要經(jīng)過長期的實踐才能養(yǎng)成的,下面簡述程序設(shè)計風格的要求。6.3.
43、1 堅持采用結(jié)構(gòu)化的程序設(shè)計方法 結(jié)構(gòu)化的程序設(shè)計方法是從結(jié)構(gòu)化分析方法中引申出來的,它強調(diào)使用標準的程序控制結(jié)構(gòu),即單入口、單出口的控制結(jié)構(gòu)。程序基本控制結(jié)構(gòu)包括順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)(參見6.1.1小節(jié))。 大多數(shù)高級語言提供了多于種基本結(jié)構(gòu)的控制結(jié)構(gòu),它們也符合單入口、單出口的原則,通常稱這種結(jié)構(gòu)為擴展的程序控制結(jié)構(gòu)。以C語言為例,它除了if-else基本選擇結(jié)構(gòu)外,還提供了elseif結(jié)構(gòu)和switch結(jié)構(gòu),循環(huán)結(jié)構(gòu)除了while基本結(jié)構(gòu)外,還提供了do-while結(jié)構(gòu)和for結(jié)構(gòu)。 6.3.1 堅持采用結(jié)構(gòu)化的程序設(shè)計方法 例如:用elseif結(jié)構(gòu)代替if-else結(jié)構(gòu)的嵌套,
44、如圖6.9。 if (ab) if (ay) a=b; a=x; else if (xy) else a=x; a=y; el else a=y; a=b; (a)if-else結(jié)構(gòu)的嵌套 (b)elseif結(jié)構(gòu) 圖6.9 用elseif結(jié)構(gòu)代替if-else結(jié)構(gòu)的嵌套6.3.1 堅持采用結(jié)構(gòu)化的程序設(shè)計方法 可見擴展的程序控制結(jié)構(gòu)elseif可消除if-else結(jié)構(gòu)嵌套所引起的模糊理解。圖6.9(a)中用if-else結(jié)構(gòu)所編制的程序,因為兩重if-else結(jié)構(gòu)的嵌套使if-else的匹配變得模糊,不易理解。而圖6.9(b)中用elseif結(jié)構(gòu)編寫的程序可完成同樣功能,而且提高了可讀性,容易
45、理解。 結(jié)構(gòu)化程序設(shè)計語言中一般還提供轉(zhuǎn)移語句,包括限定轉(zhuǎn)移語句(如C語言中的break語句、continue語句)、無條件轉(zhuǎn)移語句(如goto語句)。限定轉(zhuǎn)移語句一般被限定在一個程序結(jié)構(gòu)內(nèi),往往不會影響程序的清晰性,并有提高效率功能,可以在程序中使用。6.3.1 堅持采用結(jié)構(gòu)化的程序設(shè)計方法例如:用break語句提前退出循環(huán),如圖6.10。 i=1; while (i9999) break; i=i+1; 圖6.10 用break語句提前退出循環(huán) 在圖6.10中,按照循環(huán)條件,循環(huán)應(yīng)執(zhí)行100次。當循環(huán)滿足一定條件時 (sum9999),用break語句提前退出循環(huán)。6.3.1 堅持采用結(jié)構(gòu)
46、化的程序設(shè)計方法 對于無限定轉(zhuǎn)移語句goto語句,應(yīng)盡量避免使用。專家們一直把goto語句視為破壞程序清晰性的罪魁禍首。因為goto語句可以無限制地將程序的執(zhí)行順序由某處轉(zhuǎn)到另一處,也無論是否在同一控制結(jié)構(gòu)內(nèi),甚至可以在多個程序間進行,嚴重破壞了結(jié)構(gòu)化程序結(jié)構(gòu)的單入口、單出口的原則。6.3.1 堅持采用結(jié)構(gòu)化的程序設(shè)計方法當然,goto語句也不是完全不能用,比如可以將goto語句用于出錯處理。一旦程序執(zhí)行中出現(xiàn)錯誤,馬上轉(zhuǎn)移到出錯處理程序上,及時對錯誤進行處理,最大限度地降低錯誤造成的損失。結(jié)構(gòu)化程序中允許有g(shù)oto語句,但它只能在本程序塊內(nèi)使用,不允許從一個結(jié)構(gòu)轉(zhuǎn)移到另一個結(jié)構(gòu)??傊?,有規(guī)律
47、地使用goto語句也可以收到一些特殊效果,但在一般的情況下,應(yīng)避免使用。6.3.2 注重源程序的書寫規(guī)則 源程序的主要內(nèi)容是用程序設(shè)計語言構(gòu)造的程序,但為了提高程序的可讀性和可維護性,源程序的書寫也要有一定的規(guī)則。 1) 符號的命名 變量是由程序員在程序中定義的一些符號,雖然變量名稱原則上是在一定規(guī)則內(nèi)由程序員任意定義的,但不主張使用類似于a、b、a1、b1等這樣的變量名,變量的命名應(yīng)選用一些有實際意義的名詞,如name、age、car、code等。 例如將數(shù)據(jù)庫學生字段的結(jié)構(gòu)定義為如下形式:s(c,n,x,s)。在沒有任何說明的情況下,幾乎無法知道這個數(shù)據(jù)庫字段的確切含義。但若把該數(shù)據(jù)庫的字
48、段改寫為:s(code,name,sex,score),則幾乎無需什么說明就能知道字段所代表的含義。6.3.2 注重源程序的書寫規(guī)則 目前,越來越多的高級語言可以支持長變量名,程序員可以設(shè)計出比較直觀的變量名。有意義的變量名不僅能增加整個程序的自我說明,而且使變量容易記憶,當需要用到某個變量時,不必再把前面的程序翻出來,查看這個變量是怎么拼寫的。在變量名長度有一定限制的情況下,應(yīng)采用有意義標識符的詞頭,并且整個程序中變量的縮寫規(guī)則應(yīng)保持一致。 另外,由于目前漢字的輸入仍較英文困難,所以在變量命名時,應(yīng)減少漢字的用量,包括給數(shù)據(jù)庫中的字段命名。 2) 程序內(nèi)部文檔書寫規(guī)則 所謂程序內(nèi)部文檔是指源
49、程序中書寫的為了便于閱讀,使程序結(jié)構(gòu)清晰易懂,而在必要的地方增加的注釋。6.3.2 注重源程序的書寫規(guī)則在源程序中應(yīng)采用分層縮進方式,充分體現(xiàn)出程序的結(jié)構(gòu),在容易引起混淆的地方可適當增加空行,提高源程序的可理解性。 例如:圖6.11中為兩個程序片斷。 if (z0) if (z0) x=3; if (y0) x=3; else x=5; else x=5; z=1; z=1; if (z=y0) x=3; if (z=ym) n=n-m; /*用輾轉(zhuǎn)相減法求m,n的最大公約數(shù)*/ if(mn) m=m-n; printf(result=%dn,n);6.3.2 注重源程序的書寫規(guī)則必要的注釋能
50、幫助別人更好地理解程序,但也不是注釋越多越詳細越好。過多的注釋,不僅對程序的理解沒有任何好處,反而把程序搞得難以閱讀。在顯而易見的地方也無需注釋,比如在循環(huán)體中n=n+1的后面加上注釋“循環(huán)變量加”,明顯有畫蛇添足之感。程序中的注釋是與源程序相對應(yīng)的。在修改程序時若被注釋的程序段做了修改或被刪除,則注釋也應(yīng)做相應(yīng)的改動,以保持注釋和源程序的一致性。6.3.3 給出明確的數(shù)據(jù)說明程序中的注釋,由于篇幅比較小,只能作為提示性的說明。為了便于閱讀程序,便于維護程序,就應(yīng)將程序中用到的子程序、數(shù)據(jù)文件、變量等名稱進行統(tǒng)一規(guī)范的說明。同類名稱放在一起并按字典順序排列,方便查找。變量一般要說明變量名稱、含
51、義、數(shù)據(jù)類型、數(shù)據(jù)的組成。例如變量XH含義為學號,字符型數(shù)據(jù)、數(shù)據(jù)由8位數(shù)字字符組成、前兩位表示年度、第三四位表示系號、第五位表示專業(yè)號、第六位表示班號、后兩位表示序號。6.3.4 遵循規(guī)則的語句結(jié)構(gòu) 程序是由語句組成的,為了保證程序的清晰性,就要從細節(jié)做起。每條語句的書寫也應(yīng)遵循一定的規(guī)則。1) 每行只寫一條語句不應(yīng)為了讓程序顯得緊湊而在一行里寫多條語句,即使是順序結(jié)構(gòu)的語句。如果這樣,會嚴重影響分層縮進所產(chǎn)生的程序結(jié)構(gòu)層次。如圖6.13。 n=1; n=1; while (n=100) while (n=100) x=n+1;y=x*(x-1);n=n+1; printf(“%d”,y)
52、x=n+1; y=x*(x+1); n=n+1; printf(“%d”,y); (a)一行多條語句 (b) 每行只寫一條語句 圖6.13 每行只寫一條語句6.3.4 遵循規(guī)則的語句結(jié)構(gòu)2) 盡量使用直觀的表達式if (!(a=b) x=5; x=5; else else y=5; y=5; (a) (b) 圖6.14 盡量不使用否定的條件表達式圖6.14(a)中的程序,使用了否定的條件表達式,這樣的表達式很難理解,應(yīng)改為圖6.14(b)中的程序。在構(gòu)造表達式時,適當增加圓括號作分隔符,體現(xiàn)出表達式的運算順序。例如a=1+b%4!=0應(yīng)寫為a=1+(b%4!=0)。此外,還應(yīng)注意:應(yīng)盡可能利用
53、語言庫中已有的函數(shù);全局變量能不用則不用;避免浮點數(shù)(實數(shù))比較相等;使用多分支結(jié)構(gòu)處理多入口的選擇結(jié)構(gòu)等。6.3.5 設(shè)計友好的輸入輸出 輸入輸出往往是程序與用戶間的界面,輸入輸出的方式應(yīng)盡量符合用戶的習慣。并且注意以下原則:1) 輸入格式輸入格式應(yīng)與用戶的原有習慣相似,界面力求保持一致,并可作必要改進讓用戶少輸入漢字和重復數(shù)據(jù)。例如在庫存管理系統(tǒng)中,輸入的入庫單、出庫單應(yīng)與手工填寫的單據(jù)基本一致。庫中已有的貨物名稱可以讓用戶只輸入貨物號或從選擇框中選擇的方法輸入,不讓用戶重復輸入漢字。6.3.5 設(shè)計友好的輸入輸出2) 輸入的數(shù)據(jù)要有有效性檢驗可以在程序中設(shè)定輸入的長度、類型,由程序來檢驗
54、輸入數(shù)據(jù)的有效性。但只有這些還是不夠的,在用戶輸入完數(shù)據(jù)后,可以讓用戶再確認一次。若輸入的數(shù)據(jù)量比較大,則可以采用多終端重復輸入數(shù)據(jù)的方法。不同終端輸入的數(shù)據(jù)進行比較,相同的為有效數(shù)據(jù),不同的為輸錯的數(shù)據(jù)。并給出明確的提示,由用戶重新輸入正確的數(shù)據(jù)。這種形式多用于輸入考試成績(如中考、高考后的學生成績)。3) 在輸入數(shù)據(jù)前應(yīng)給出明顯的提示讓用戶清楚地知道什么時候該輸入數(shù)據(jù)。在輸入數(shù)據(jù)時,可在屏幕底部給出數(shù)據(jù)的說明,讓用戶知道需輸入什么樣的數(shù)據(jù)。6.3.5 設(shè)計友好的輸入輸出4) 數(shù)據(jù)的輸入方式 大多數(shù)的數(shù)據(jù)輸入可以使用鍵盤進行,但在某些情況下也可以采用其他方式。如用軟盤來傳遞數(shù)據(jù)。隨著辦公自動
55、化技術(shù)的發(fā)展,現(xiàn)在已經(jīng)可以實現(xiàn)用語音進行錄入,也可以借助其他設(shè)備進行數(shù)據(jù)的輸入,如掃描儀等。在網(wǎng)絡(luò)技術(shù)高度發(fā)達的今天,網(wǎng)上進行數(shù)據(jù)的傳輸,也是常用的輸入手段之一。在程序設(shè)計時都應(yīng)考慮到。有時需提供多種方式供用戶選擇。5) 程序的輸出 程序的輸出可以區(qū)分為屏幕輸出、打印輸出和其他方式輸出。屏幕輸出,包括屏幕上出現(xiàn)的一切信息,如圖形、文字及整體的布局。屏幕的輸出應(yīng)保持友好的界面,不出現(xiàn)用戶難以理解的專業(yè)術(shù)語。屏幕輸出的信息應(yīng)準確、簡捷,不應(yīng)讓用戶無所適從。屏幕信息還要保持連續(xù)性,在需要用戶等待時,應(yīng)給出相應(yīng)的提示,如“正在進行計算,請稍候”,并給出程序的進度指示。不能讓用戶不知道計算機在做什么、什
56、么時候能做完。在程序執(zhí)行中出現(xiàn)錯誤或可能出現(xiàn)錯誤時,應(yīng)給出醒目的提示,并告訴用戶應(yīng)該怎樣避免錯誤的產(chǎn)生和怎樣降低可能造成的損失。5) 程序的輸出 打印輸出的信息一般包括報表、報告等。在輸出前,要讓用戶能夠預覽要輸出的有關(guān)數(shù)據(jù)及輸出格式。輸出時應(yīng)提示用戶共有多少信息需要輸出,和已輸出信息占總信息量的比例。打印輸出一般要求能檢測出打印機的狀態(tài),如缺紙、未聯(lián)機等,并給出醒目的提示,讓用戶進行相應(yīng)的操作后繼續(xù)打印。所有打印的報表、報告要與用戶的習慣或統(tǒng)一的標準一致。 其他方式的輸出包括網(wǎng)絡(luò)上的信息傳遞、傳真、電子郵件等。在產(chǎn)生輸出前應(yīng)給出這次輸出的目的地和具體內(nèi)容,經(jīng)確認后再進行輸出。在程序設(shè)計期間也
57、應(yīng)盡可能考慮到用戶可能用到的輸出方式,并對其做詳細研究。 程序的輸入輸出,是計算機與用戶直接交互的關(guān)鍵所在,這不僅關(guān)系到用戶操作的方便與否,也涉及到程序和傳輸數(shù)據(jù)的正確性、安全性、適時性等,是程序設(shè)計過程中的一個重要環(huán)節(jié)。6.3.6 良好風格的編碼原則 根據(jù)眾多軟件開發(fā)人員所總結(jié)的經(jīng)驗,以及在教學過程中的上機指導實踐,歸納、提煉出來一些能夠體現(xiàn)優(yōu)良風格的編碼原則,不一定全面,供開發(fā)人員編寫程序時借鑒,有些條文可能是從不同角度、以不同提法來闡明同一個論點。參見P122程序設(shè)計風格是在長期的程序設(shè)計中養(yǎng)成的。所以必須在平時的程序設(shè)計中嚴格按照以上要求進行設(shè)計,逐漸養(yǎng)成良好的程序設(shè)計風格,這樣有助于
58、提高程序的質(zhì)量和可維護性。此外,由于程序設(shè)計語言各有特點,所以程序員必須對所使用的語言有足夠的了解,并能充分發(fā)揮語言的特點,使程序設(shè)計風格更加完善。 6.4 程序設(shè)計的技巧6.4.1 選擇好的算法6.4.2 算法的優(yōu)化6.4.3 把握問題的實質(zhì)6.4.4 充分利用語言特點6.4.5 模塊化與重復使用 6.4 程序設(shè)計的技巧 程序設(shè)計的主要目的是解決問題,為了更好地解決問題,在進行程序設(shè)計過程中應(yīng)該掌握一定的程序設(shè)計技巧,包括對系統(tǒng)分析與設(shè)計的充分理解,熟練運用編程語言,綜合運用文字、聲音、圖像,并彼此協(xié)調(diào)。應(yīng)能對所用算法進行優(yōu)化,使程序有較高的效率。6.4.1 選擇好的算法算法是在有限步驟內(nèi)求
59、解某一問題所使用的一組定義明確的規(guī)則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種算法。前者是推理實現(xiàn)的算法,后者是操作實現(xiàn)的算法。一個算法應(yīng)該具有以下五個重要的特征: 有窮性:一個算法必須保證執(zhí)行有限步之后結(jié)束;確切性:算法的每一步驟必須有確切的定義;可行性:算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身限定了初始條件;輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的;6.4.1 選擇好的算法算法是程序設(shè)
60、計的靈魂??梢赃@么說,無論是在結(jié)構(gòu)化程序設(shè)計中,還是在面向?qū)ο蟮某绦蛟O(shè)計中,沒有算法的程序不可能是一個高水平的程序。窗體的形狀、大小涉及到算法;控件自身以及與其它控件的諸多關(guān)系需要計算;字符串的查找、截取和替換更離不開算法。求解問題的算法可能有多種,而采用哪種算法則直接影響到程序的執(zhí)行效率,好的算法可以有效地使用系統(tǒng)資源并且提高執(zhí)行效率。6.4.1 選擇好的算法例如:求正整數(shù)x,y的最大公約數(shù)。人工求解時采用的算法是:將x,y分解為因數(shù)的積,然后找出“公共因數(shù)中的最大者”。比如x=6,y=8,有x=2x3,y=2x4=2x2x2,所以最大公約數(shù)是2。經(jīng)過分析知道最大公約數(shù)小于或等于x,y中的較
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲服務(wù)承攬合同三篇
- 管道行業(yè)安全管理工作心得
- 2025年全球及中國丙二醛行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國頭發(fā)護理用神經(jīng)酰胺行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國DHA微囊粉行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國三維足底掃描系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球電動跨式堆垛機行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國介孔二氧化硅微球行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國多相真空萃取機行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球豆莢酒店行業(yè)調(diào)研及趨勢分析報告
- 《社區(qū)康復》課件-第一章 總論
- 上海中考英語考綱詞匯
- 【工商管理專業(yè)畢業(yè)綜合訓練報告2600字(論文)】
- 《幼兒園健康》課件精1
- 22S803 圓形鋼筋混凝土蓄水池
- 2023年開心英語四年級上冊全冊練習
- Hadoop大數(shù)據(jù)開發(fā)實例教程高職PPT完整全套教學課件
- 企業(yè)中層管理人員測評問題
- 人教版高中地理必修一全冊測試題(16份含答案)
- 《民航服務(wù)溝通技巧》教案第11課孕婦旅客服務(wù)溝通
- 新東方四級詞匯-正序版
評論
0/150
提交評論