新版第4章計算機程序設(shè)計與語言_第1頁
新版第4章計算機程序設(shè)計與語言_第2頁
新版第4章計算機程序設(shè)計與語言_第3頁
新版第4章計算機程序設(shè)計與語言_第4頁
新版第4章計算機程序設(shè)計與語言_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第4章計算機程序設(shè)計與語言程序設(shè)計的基本概念模型的建立、算法的設(shè)計和表達程序的編寫、測試和維護程序文檔的建立程序設(shè)計語言的應(yīng)用4.1概述4.1.1計算機程序4.1.2程序設(shè)計語言4.1.3程序設(shè)計步驟4.1.1計算機程序程序是計算機執(zhí)行任何操作的驅(qū)動力,是計算機為完成某一任務(wù)所必須執(zhí)行的一系列指令。沒有程序,計算機就像原地待命的士兵,什么也不會做。從存儲的角度來看,程序就是保存在磁盤上的指令序列。除了少量特殊程序外,程序在沒有啟動時大多以文件的形式存儲在磁盤等外存儲器上。4.1.2程序設(shè)計語言計算機語言是人與計算機之間傳遞信息的媒介。為了使計算機進行各種工作,必須將人們的意圖用計算機語言告訴計算機。電腦做的每個動作、執(zhí)行的每個步驟,都是按照用計算機語言編好的程序來執(zhí)行的,所以,要控制計算機就必須通過計算機語言向計算機發(fā)出命令。自從有了計算機,計算機程序設(shè)計語言就出現(xiàn)了,人們針對不同的應(yīng)用領(lǐng)域開發(fā)出了上千種編程語言。4.1.2程序設(shè)計語言計算機語言的發(fā)展經(jīng)歷了機器語言、匯編語言和高級語言三個階段。機器語言是計算機能直接執(zhí)行的二進制形式的語言。匯編語言的實質(zhì)和機器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標識符,更容易識別和記憶。高級語言更接近自然語言和數(shù)學(xué)語言,和匯編語言相比,它不但將許多相關(guān)的機器指令合成為單條指令,并且去掉了與具體操作有關(guān)但與完成工作無關(guān)的細節(jié),如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令,使程序員可以離開機器層次,在更抽象的層次上表達意圖,以接近問題本質(zhì)的方式去思考和描述問題。4.1.2程序設(shè)計語言高級語言所編制的程序不能直接被計算機識別,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行。高級語言并不是特指某種具體的語言,而是包括了很多種編程語言,如目前流行的VB、C++、Java、Perl等,這些語言的語法、命令格式都各不相同。高級語言的發(fā)展也經(jīng)歷了從早期語言到結(jié)構(gòu)化程序設(shè)計語言,從面向過程到面向?qū)ο蟪绦蛟O(shè)計語言的過程。相應(yīng)地,軟件的開發(fā)也由最初的個體手工作坊式的生產(chǎn),發(fā)展為產(chǎn)業(yè)化、流水線式的工業(yè)化生產(chǎn)。高級語言的下一個發(fā)展目標是面向應(yīng)用,只需要告訴程序你要干什么,程序就能自動生成算法,自動進行處理,也就是智能化的程序設(shè)計語言。4.1.3程序設(shè)計步驟(1)建立模型:從實際問題抽象出數(shù)學(xué)模型,即由物理模型到抽象模型,用形式化方法描述現(xiàn)實世界。(2)算法設(shè)計:給出解決問題的方法和步驟,即算法。同一個問題可以有不同的解決辦法,從中選取一種最合適的。(3)算法表達:選擇一種或幾種表達算法的工具,對算法進行清晰的表達。(4)編寫程序:選擇程序設(shè)計語言,把算法程序化。(5)程序測試和調(diào)試:對編寫好的程序進行測試,修改程序中的錯誤。(6)程序文檔編寫與程序維護:整理和編寫程序文檔,以便更好地維護程序。雞兔同籠問題雞兔同籠,看頭36個,看腳96只,問籠中有雞和兔各幾只?4.2模型與算法4.2.1建立模型4.2.2算法設(shè)計4.2.3算法表達4.2.1建立模型模型是對現(xiàn)實系統(tǒng)的一種描述,是對現(xiàn)實系統(tǒng)的抽象和簡化。模型由現(xiàn)實系統(tǒng)的有關(guān)元素組成,能夠反映這些元素之間的關(guān)系,從而反映現(xiàn)實系統(tǒng)的本質(zhì)。模型分為物理模型和數(shù)學(xué)模型兩大類。物理模型由物理元素構(gòu)成,又稱為形象模型。數(shù)學(xué)模型由關(guān)系、函數(shù)等數(shù)學(xué)對象符號組成,又稱為邏輯模型或抽象模型。4.2.1建立模型物理模型的建立:對客觀存在的事物進行形象的描述,列出已知的所有物理元素及其關(guān)系,明確需要解決的問題。物理模型中應(yīng)該忽略對解決問題沒有意義的客觀事實,如雞、兔的大小,籠子的大小等。數(shù)學(xué)模型的建立:在物理模型的基礎(chǔ)上,忽略不重要的細節(jié)(如在一個籠子里這個事實與要解決的問題無關(guān)),抓住本質(zhì)性的元素,對其符號化后,再用數(shù)學(xué)的方法描述出來。4.2.1建立模型模型是對現(xiàn)實系統(tǒng)的一種描述,是對現(xiàn)實系統(tǒng)的抽象和簡化。模型由現(xiàn)實系統(tǒng)的有關(guān)元素組成,能夠反映這些元素之間的關(guān)系,從而反映現(xiàn)實系統(tǒng)的本質(zhì)。模型分為物理模型和數(shù)學(xué)模型兩大類。物理模型由物理元素構(gòu)成,又稱為形象模型。數(shù)學(xué)模型由關(guān)系、函數(shù)等數(shù)學(xué)對象符號組成,又稱為邏輯模型或抽象模型。雞兔同籠問題的物理模型雞、兔放在同一籠子里,頭有36個,腳有96只,要計算出有雞和兔子各多少只。當然,要解決這個問題還要用到大家已熟知的事實:每只雞是1個頭2只腳,每只兔子是1個頭4只腳。雞兔同籠問題的數(shù)學(xué)模型對以上例子,設(shè)雞為x只,兔子為y只,則有:4.2.2算法設(shè)計算法是解決問題的方法和步驟。若待解決的問題比較復(fù)雜,可能需要將問題進行分解,即將復(fù)雜問題分解為簡單問題的集合。簡單問題對應(yīng)的算法較簡單,設(shè)計起來也就比較容易。這里講的算法設(shè)計,涉及程序功能的設(shè)計和數(shù)據(jù)結(jié)構(gòu)的設(shè)計等。雞兔同籠問題的算法設(shè)計雞兔同籠問題實際上是求二元一次方程組的解的問題,可以用加減消元法解決。考慮到算法的通用性,我們可以對一般二元一次方程組求解。雞兔同籠問題的算法設(shè)計若a1b2-a2b1≠0,方程組有唯一解。用加減消元法求得雞兔同籠問題的算法設(shè)計(1)輸入系數(shù)a1,b1,c1,a2,b2,c2;(2)計算d=a1b2-a2b1;(3)如果d=0,打印“方程組無解或有無窮組解”,轉(zhuǎn)(7);(4)計算x=(c1b2-c2b1)/d;(5)計算y=(a1c2-a2c1)/d;(6)輸出x,y;(7)輸入是否繼續(xù)解其他方程組的標記s(s=“Y”或s=“N”);(8)如果s=“Y”,轉(zhuǎn)(1);(9)結(jié)束。算法的評價對于同一個問題,可能有若干種不同的算法來解決。對于算法評價的基本的標準有兩個:時間標準(時間復(fù)雜度),簡單說來,即執(zhí)行這個算法需要多少時間,基本的原則是時間越短越好。對于同樣的問題,如果用算法A和B分別進行處理,結(jié)果算法A所用的時間更短,那么就認為算法A更好一些??臻g標準(空間復(fù)雜度),即執(zhí)行這個算法需要占用多少資源(可以理解為占用了多少計算機存儲單元),基本的原則是占用的資源越少越好。對于同樣的問題,如果用算法A和B分別進行處理,結(jié)果算法A占用的資源更少,那么就認為算法A更好一些。算法的評價隨著計算機技術(shù)的發(fā)展,硬件性能不斷提高,程序的規(guī)模越來越龐大,算法的清晰程度變成了一個非常重要的問題。對于一個比較復(fù)雜的問題來說,如果所給出的算法讓人無法讀懂,那么它也不能算是一個好的算法,因為按照這樣的算法所編制出來的程序非常難以維護。因此,算法的易懂性也是衡量算法好壞的一個重要指標。算法的評價設(shè)計算法時,還要注意以下幾點:通用性。一個算法總是針對某類問題設(shè)計的,所以對于求解某類問題中的任何一個問題應(yīng)該是有效的。例如,上面給出的解二元一次方程組的算法就有一定的通用性。確定性。算法中的每個步驟都是確定的,在什么情況下做什么也非常明確,沒有含糊不清的地方。有限性。一個算法在執(zhí)行時,必須經(jīng)過有限步后停下來,結(jié)束算法執(zhí)行,給出結(jié)果,而不能無限地執(zhí)行下去。盡管這里所說的有限步可能是幾十步或者幾百步,也可能是幾萬步或者幾億步,但它仍然是有限步(嚴格說來,這里所說的“有限”只是說明了它和“無限”的區(qū)別。在實際工作中還有一個更嚴格的限制,即實際工作所要求的時間的限制。算法和根據(jù)算法所編制的程序,必須在實際工作所規(guī)定的時間內(nèi)給出相應(yīng)的運算結(jié)果)。4.2.3算法表達為了提高算法表達的清晰程度,需要選擇一種合適的描述算法的工具。常用的描述工具有流程圖、N-S圖、PAD圖和偽碼等。這些工具不是程序設(shè)計語言,不能直接被計算機執(zhí)行,使用它們的目的就是把算法表述出來。流程圖流程圖(也稱為程序流程圖)是最常用的一種算法表示方法,它是描述計算機按一定步驟完成任務(wù)的圖表,能直觀地描述程序執(zhí)行的控制流程。流程圖中方框表示“處理”,所有處理步驟都可以用這個符號表示;菱形框表示“判斷”,需要對邏輯條件進行判斷并選擇下一步執(zhí)行的路線時用這個符號表示;圓角矩形框表示“開始”和“結(jié)束”;平行四邊形框表示“輸入”和“輸出”;有向線段表示“控制流”。雞兔同籠問題的流程圖偽碼偽碼表示法相當于算法的注釋系統(tǒng),由編程語言和自然語言混合而成。偽碼的語法通常沿用某種高級編程語言的語法規(guī)則,如關(guān)鍵字、控制結(jié)構(gòu)等。另外,在描述程序的處理功能時使用自然語言的語句。所以偽碼表示法是一種類高級編程語言,但它含有大量的自然語言的語句,計算機并不能執(zhí)行。用自然語言描述處理功能,易讀易寫,不必考慮語法規(guī)定,有利于設(shè)計人員把精力放在描述算法的邏輯上。雞兔同籠問題的偽碼表示PROCEDURE求解二元一次方程組

TYPEa1,b1,c1,a2,b2,c2,x,yISREALTYPEsISCHARDOWHILETRUE/*輸入方程組系數(shù)

READa1,b1,c1,a2,b2,c2d=a1*b2-a2*b1IFd=0THENWRITE'方程組無解或有無窮組解'ELSE/*求方程組的唯一解并輸出

BEGINx=?(c1*b2-c2*b1)?/dy=?(a1*c2-a2*c1)?/dWRITEx,yENDENDIF/*控制循環(huán)是否結(jié)束

INPUT'若繼續(xù)循環(huán)輸入Y,否則輸入N'TOsREADSIFs≠'Y'THENEXITENDIFENDDOEND4.3程序設(shè)計實現(xiàn)4.3.1程序舉例4.3.2編寫程序4.3.1程序舉例雞兔同籠問題的VFP程序?qū)崿F(xiàn)DOWHILE.T.CLEAR&&清屏

?'輸入方程組的系數(shù)'INPUT'a1='TOa1INPUT'b1='TOb1INPUT'c1='TOc1INPUT'a2='TOa2INPUT'b2='TOb2INPUT'c2='TOc2d=a1*b2-a2*b1IFd=0?'方程組無解或有無窮組解'ELSE*求方程組的唯一解并輸出

x=?(c1*b2-c2*b1)?/dy=?(a1*c2-a2*c1)?/d

?'?雞為?',x,'?只?','?兔為?',y,'?只?'ENDIF*控制循環(huán)是否結(jié)束

INPUT'若繼續(xù)循環(huán)輸入Y,否則輸入N'TOsIFupper?(s)?≠'Y'EXITENDIFENDDORETURN4.3.2編寫程序程序的編寫就是用程序設(shè)計語言實現(xiàn)算法的過程。程序編寫人員應(yīng)該根據(jù)算法的要求,選擇一種程序設(shè)計語言對算法進行編碼。對程序設(shè)計語言,必須要深刻地理解,熟練地掌握,正確地運用,這樣才能編出高質(zhì)量的程序代碼。4.3.2編寫程序編寫程序的基本要求:首先是保證語法的正確性。只有語法正確的程序才能通過編譯系統(tǒng)的語法檢查。其次是保證語義的正確性,也就是通過運行程序,得到需要的正確結(jié)果。但這一點對一個復(fù)雜的程序來說并不容易,通常需要經(jīng)過程序測試和修改才能達到。4.3.2編寫程序只做到以上兩點還稱不上高質(zhì)量的程序代碼,高質(zhì)量的程序還應(yīng)體現(xiàn)在以下四個方面:可靠性高、運行速度快、占用存儲空間小和易懂性。通常這四個方面不能同時滿足,要根據(jù)具體情況權(quán)衡利弊。4.3.2編寫程序在計算機速度越來越快,內(nèi)存越來越大的今天,程序的易懂性顯得更為重要。這是因為一個程序除了能在計算機上運行外,還要求人能夠看懂。只有看懂程序,才能對程序中出現(xiàn)的問題進行修改,才能根據(jù)需要擴充其功能和改善其性能。4.3.2編寫程序編寫容易讀懂的程序代碼,要求程序有良好的結(jié)構(gòu)性和程序設(shè)計風(fēng)格。所謂程序有良好的結(jié)構(gòu)性是指程序僅由三種基本的控制結(jié)構(gòu)構(gòu)造出來。順序控制結(jié)構(gòu)選擇控制結(jié)構(gòu)重復(fù)控制結(jié)構(gòu)所謂良好的程序設(shè)計風(fēng)格,是要求編寫的程序清晰明了,容易被人理解。順序控制結(jié)構(gòu)順序控制結(jié)構(gòu)含有多個連續(xù)的步驟,如右圖所示。在此控制結(jié)構(gòu)中的A和B是順序執(zhí)行的。順序控制結(jié)構(gòu)是最簡單的一種基本結(jié)構(gòu)。選擇控制結(jié)構(gòu)選擇控制結(jié)構(gòu)也稱為分支結(jié)構(gòu),計算機根據(jù)所列條件選擇執(zhí)行路徑,如右圖所示。在此控制結(jié)構(gòu)中有一個判斷框,它只能有兩個分支,根據(jù)條件P是否滿足而分別執(zhí)行A或B。重復(fù)控制結(jié)構(gòu)重復(fù)控制結(jié)構(gòu)又稱循環(huán)結(jié)構(gòu),可以重復(fù)執(zhí)行一條或多條指令,直到滿足退出條件。重復(fù)控制結(jié)構(gòu)主要有以下兩種:當型(WHILEDO型)循環(huán)結(jié)構(gòu) 直到型(UNTIL型)循環(huán)結(jié)構(gòu)當型(WHILEDO型)循環(huán)結(jié)構(gòu)當條件P滿足時,反復(fù)執(zhí)行A。一旦條件P不滿足就不再執(zhí)行A,而執(zhí)行它下面的操作。如果在開始時條件P就不滿足,則A一次也不執(zhí)行。直到型(UNTIL型)循環(huán)結(jié)構(gòu)先執(zhí)行A,然后判斷條件P是否滿足,如條件P不滿足,則反復(fù)執(zhí)行A,直到某一時刻,條件P滿足則停止循環(huán),執(zhí)行下面的操作??梢钥吹剑徽摋l件P是否滿足,至少執(zhí)行一次A。這三種基本控制結(jié)構(gòu)的共同特點(1)只有一個入口,如圖4-2至圖4-5中的a點。(2)只有一個出口,如圖4-2至圖4-5中的b點。(3)結(jié)構(gòu)內(nèi)的每一部分都有機會被執(zhí)行到。(4)結(jié)構(gòu)內(nèi)沒有死循環(huán)(無終止的循環(huán))。盡管在表達形式上不完全一樣,但各種編程語言都提供了對三種基本控制結(jié)構(gòu)的支持。不滿足基本要求的兩種情況B永遠執(zhí)行不到死循環(huán)良好的程序設(shè)計風(fēng)格1)文檔化(documentation)要有效、適當?shù)厥褂米⑨尅W⑨屨Z句是每種程序設(shè)計語言都要提供的語句。注釋語句對程序的執(zhí)行結(jié)果沒有影響,是用來幫助讀程序的人理解程序的。一些規(guī)范的程序中,注釋行的數(shù)量占到整個源程序的1/3到1/2,甚至更多。在程序的開頭可以添加對程序整體進行說明的注釋;在程序模塊(如子程序、函數(shù)、過程等)前添加解釋該模塊作用的注釋;在較難理解的語句前添加解釋該語句的注釋。要使用含義明確的符號名。符號名包括子程序名、函數(shù)名、變量名、常量名等。這些名字應(yīng)能反映它所代表的實際東西,有實際意義,使其能見名知意。例如,表示總量用Total,表示平均值用Average,表示和用Sum,等等。良好的程序設(shè)計風(fēng)格2)格式化(layout)盡量使程序布局合理、清晰、明了。一個程序如果寫得太密,沒有留出空白,往往是很難讀懂的。恰當?shù)乩每崭瘛⒖招泻涂s進可使程序清晰明了。自然程序段之間用空行分開??s進也稱為向右縮格或移行。程序中的各行不必左對齊,因為這樣做的話程序的層次關(guān)系就分不清了。對于選擇語句和循環(huán)語句,應(yīng)該把其中的程序段語句向右做階梯式移行。格式化可使程序的邏輯結(jié)構(gòu)更加清晰,層次更加分明。良好的程序設(shè)計風(fēng)格3)模塊化(modularization)把復(fù)雜的程序分解為功能獨立的程序模塊,每一個程序模塊只完成一個獨立的功能,盡量減少模塊之間的聯(lián)系。這樣,當我們讀一個復(fù)雜的程序時,只要分別去讀懂各個簡單的功能模塊即可。4.4程序的測試、調(diào)試與維護4.4.1程序測試4.4.2程序調(diào)試4.4.3程序維護4.4.1程序測試程序測試是為了發(fā)現(xiàn)程序錯誤而執(zhí)行程序的過程。測試時需要選擇測試數(shù)據(jù)作為輸入,運行程序后看是否會輸出預(yù)期的結(jié)果。如果沒有產(chǎn)生正確的結(jié)果,則程序員必須查找并修改程序中的錯誤,然后再測試修改后的程序,可能要經(jīng)過多次反復(fù),才能得出正確的結(jié)果。4.4.1程序測試對于一組測試數(shù)據(jù),即使程序產(chǎn)生了正確的結(jié)果,也還不能立即斷定程序是正確的,因為還不能保證輸入其他的數(shù)據(jù)時,程序會產(chǎn)生正確結(jié)果。但是這個“所有可能的數(shù)據(jù)”集合一般是非常大的,可能是幾十億個數(shù)據(jù)甚至更多,都測試一遍是不現(xiàn)實的,所以要求我們根據(jù)某些原則選擇有代表性的測試數(shù)據(jù)進行測試,以相對較少的測試次數(shù)發(fā)現(xiàn)程序中的錯誤黑盒測試法把程序看成一個“黑盒子”,測試人員完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,只考慮程序的功能,通過選擇一些測試數(shù)據(jù),看程序的功能是否都已實現(xiàn)。黑盒測試的測試數(shù)據(jù)選擇(雞兔同籠問題)把輸入的二元一次方程組的系數(shù)分為以下四類,每一類設(shè)計一個測試用例。合理的系數(shù):(1)方程組有唯一解:a1=1,b1=1,c1=1,a2=0,b2=1,c2=2(2)方程組無解:a1=1,b1=1,c1=1,a2=1,b2=1,c2=2(3)方程組有無窮組解:a1=1,b1=1,c1=1,a2=2,b2=2,c2=2不合理的系數(shù):(4)輸入的不全是數(shù)值:a1="a",b1=5,c1=0,a2=6,b2=8,c2=7選擇合理的輸入數(shù)據(jù)驗證程序的功能、性能是否符合設(shè)計的要求。選擇不合理的輸入數(shù)據(jù)對程序進行測試也非常重要,這是對程序可靠性的考驗。白測試的測試數(shù)據(jù)選擇(雞兔同籠問題)

為了讓程序中的每條語句至少執(zhí)行一次,使每個判斷條件取一次“真”或取一次“假”,選擇如下測試用例:(1)d=0,s=“Y”:a1=1,b1=1,c1=1,a2=2,b2=2,c2=2,s=“Y”(2)d≠0,s=“N”:a1=1,b1=0,c1=1,a2=0,b2=1,c2=2,s=“N”這兩個例子測試后,使得程序中的每條語句至少執(zhí)行了一次,每個判斷條件分別取了一次“真”和一次“假”。測試的步驟一個復(fù)雜的程序往往由若干個子程序模塊組成,要保證程序整體的正確性,不僅需要各個模塊是正確的,還要求各模塊之間的接口是正確的。測試工作要制定出測試規(guī)劃,包括測試的步驟、范圍、進度和所用的資源(硬件、軟件)等。測試工作先對每個模塊進行測試,一般采用白盒測試法保證每個程序模塊內(nèi)部的正確性,然后再把測試后的模塊組裝在一起進行整體測試,主要測試各模塊是否能正常配合工作,方法多采用黑盒測試法。對模塊的接口進行測試,適當輔以白盒測試法,以便對主要執(zhí)行路徑進行測試。

4.4.2程序調(diào)試調(diào)試的任務(wù)是進一步診斷和改正程序中的錯誤(一般是測試時發(fā)現(xiàn)的錯誤),它是在完成了測試之后進行的。調(diào)試活動首先確定程序中可疑錯誤的確切性質(zhì)和位置,然后對程序(設(shè)計、編碼)進行修改,排除錯誤。調(diào)試工作是一個具有很強技巧性的工作。軟件運行失效或出現(xiàn)問題,往往只是潛在錯誤的外部表現(xiàn),而外部表現(xiàn)與內(nèi)在原因之間常常沒有明顯的聯(lián)系,要找出真正的原因,排除潛在的錯誤,不是一件易事??梢哉f,調(diào)試是通過現(xiàn)象找出原因的分析過程。

調(diào)試步驟(1)對測試發(fā)現(xiàn)的錯誤現(xiàn)象進行分析,確定程序中的出錯位置;(2)研究有關(guān)部分的程序,找出錯誤的內(nèi)在原因(有的錯誤不一定是編碼錯誤,可能是設(shè)計錯誤);(3)修改設(shè)計或代碼,以排除這個錯誤;(4)重復(fù)進行暴露了這個錯誤的原始測試和其他有關(guān)測試。

調(diào)試步驟當在程序中發(fā)現(xiàn)一個錯誤時,它可能是語法錯誤,也可能是語義錯誤。語法錯誤是由于指令沒有按照程序設(shè)計語言的語法規(guī)則編寫所致。例如,要打印一個消息時,需要使用PRINT命令字。命令I(lǐng)FAGE=16THEN"Youcandrive."將產(chǎn)生語法錯誤,因為少了命令字PRINT。正確的寫法是IFAGE=16THENPRINT"Youcandrive."。在編譯執(zhí)行的系統(tǒng)中,編譯時就能檢查出語法錯誤。在解釋執(zhí)行的系統(tǒng)中,執(zhí)行到語法錯誤的語句時輸出錯誤信息。語法錯誤是比較容易發(fā)現(xiàn)和糾正的。語義錯誤是編寫的程序雖然能運行,但不能輸出正確的結(jié)果。出錯的原因可能是多方面的,模型的建立、算法的設(shè)計和表達、編碼各個過程都可能出錯,語義錯誤比語法錯誤更難檢查、修改。例如,把IFA>=100THENPRINTA中的“>”寫成了“<”,就屬于語義方面的錯誤。

4.4.3程序維護通常把程序的修改稱為程序維護。程序維護一般有三種類型改正性維護在程序測試時,有的錯誤沒被發(fā)現(xiàn),交付使用后,程序中某些錯誤暴露出來,此時就要對程序進行改正性維護。適應(yīng)性維護假如程序運行的外在環(huán)境(硬件配置和軟件配置等)發(fā)生了變化,為了使程序適應(yīng)這種環(huán)境變化而修改程序的過程叫適應(yīng)性維護。完善性維護在程序使用的過程中,用戶往往會對程序提出增加新功能或改善性能的要求,這就需要修改程序,使程序更加完善,這個過程稱為完善性維護。

4.4.3程序維護程序維護在軟件生命周期中占相當重要的地位,大約75%的費用都產(chǎn)生在程序維護階段。不管對程序進行哪種維護,都需要維護人員熟悉程序的工作過程和使用方法,讀懂原有的程序。修改程序的人員往往不是編寫程序的人員,有時候時間久了就是編寫程序的本人也記不清當時是怎樣編寫程序的。因此,為了能順利地進行維護,必須建立詳盡的程序文檔。程序文檔解釋了程序的工作過程及使用方法。創(chuàng)建的文檔為修改程序或使用程序提供幫助。

程序文檔程序文檔有兩種形式:插入到程序代碼中的注釋和專門制作的文檔。注釋是插入到計算機程序代碼行中的解釋性注解,它能為改寫程序的人閱讀程序、理解程序提供幫助。專門制作的文檔不屬于程序,它包含的是一些對程序員和用戶都有用的關(guān)于程序的信息。對程序員有用的文檔為程序手冊,對用戶有用的文檔為用戶參考手冊。程序手冊中包含問題描述、數(shù)學(xué)模型、算法及算法表達、程序代碼、測試程序的過程和記錄等,它是程序開發(fā)和維護的重要資料。用戶參考手冊中包含對程序的功能說明,操作程序的方法、步驟、故障分析與排除等,它是幫助用戶學(xué)會使用軟件的重要資料。用戶參考手冊還有電子版和在線幫助等形式。4.5程序設(shè)計語言應(yīng)用4.5.1程序設(shè)計語言的分類與選擇4.5.2軟件開發(fā)工具4.5.3VB程序設(shè)計語言4.5.1程序設(shè)計語言的分類與選擇通常根據(jù)程序設(shè)計語言發(fā)展的歷程將其劃分為四代。1)機器語言—第一代語言2)匯編語言—第二代語言3)高級程序設(shè)計語言—第三代語言4)智能語言—第四代語言4.5.1程序設(shè)計語言的分類與選擇1)機器語言—第一代語言機器語言是計算機能直接執(zhí)行的二進制形式的低級語言。它是由機器指令組成的語言,不同的機器有不同的機器語言。機器語言對人來說既難理解又難掌握,編出的程序不易查錯糾錯。計算機剛出現(xiàn)時用的就是機器語言。4.5.1程序設(shè)計語言的分類與選擇2)匯編語言—第二代語言匯編語言比機器語言直觀,它的每一條符號指令與相應(yīng)的機器指令有對應(yīng)關(guān)系,同時又增加了一些宏、符號地址等功能。存儲空間的安排可由機器解決,減少了程序員的工作量,也降低了出錯率。由于用匯編語言可以直接操縱處理器、寄存器和內(nèi)存地址等硬件資源,這對于編寫設(shè)備驅(qū)動程序、編譯程序和操作系統(tǒng)等系統(tǒng)軟件非常有用。不同指令集的處理器系統(tǒng)有自己相應(yīng)的匯編語言。如微機上常用的Microsoft的匯編語言MASM。匯編語言相對來講還是比較晦澀,所以也被列為低級語言。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言高級程序設(shè)計語言從20世紀50年代就開始出現(xiàn),它提供給程序員的指令更像人類語言,為計算機應(yīng)用的普及起到了重要作用。人們用高級程序設(shè)計語言編程直觀、方便,但計算機最終執(zhí)行的還是二進制表示的機器指令,這中間需要編譯程序或解釋程序來做翻譯工作。高級程序設(shè)計語言不再與具體的計算機硬件相對應(yīng),同一高級程序設(shè)計語言,只要給出不同的編譯程序或解釋程序,就可以應(yīng)用于不同類型的計算機上。這就是高級程序設(shè)計語言的通用性。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言高級程序設(shè)計語言種類很多,可以把它們分為過程性語言、面向?qū)ο蟮恼Z言、專用語言和腳本語言。這里僅就最典型的、用途最廣的幾種語言進行介紹。(1)過程性語言:(2)面向?qū)ο蟮恼Z言:(3)專用語言:(4)腳本語言:4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(1)過程性語言:過程性編程語言適合于順序執(zhí)行的算法。用過程性語言編寫的程序有一個起點和一個終點,程序的執(zhí)行是流水線式的,在一個模塊被執(zhí)行完成前,不能處理其他任務(wù),也無法動態(tài)地改變程序的執(zhí)行過程。BASIC,簡單易學(xué),包括GW-BASIC、QBASIC和TurboBASIC等。COBOL,適合于大型計算機系統(tǒng)上的事務(wù)處理。FORTRAN,廣泛應(yīng)用于科學(xué)和工程計算領(lǐng)域。PASCAL,主要用于結(jié)構(gòu)化程序設(shè)計的教學(xué)。C語言,功能強大且十分靈活,以其高效、簡潔、可移植性強。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(2)面向?qū)ο蟮恼Z言:面向?qū)ο蟮某绦蛟O(shè)計語言是建立在面向?qū)ο缶幊谭椒ǖ幕A(chǔ)上的。面向?qū)ο蟮某绦虮豢闯墒强梢赃M行相互通信的若干對象的集合。設(shè)計面向?qū)ο蟪绦蚓褪嵌x對象,建立對象間的通信關(guān)系。程序中的輸入即是對象間發(fā)消息(通信),而輸出則是程序中的對象向顯示器(或打印機)發(fā)消息(通信)的結(jié)果,程序運行的結(jié)果就是將對象集的初始狀態(tài)變成終結(jié)狀態(tài)(目標狀態(tài))。對象是程序中使用的實體。例如,在Windows環(huán)境下,我們習(xí)慣于用鼠標點擊按鈕,這里的按鈕就是一個對象。程序員可以使用面向?qū)ο蟮恼Z言來定義按鈕對象,在程序運行時把它表示出來。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(2)面向?qū)ο蟮恼Z言:20世紀70年代以來,盡管出現(xiàn)了多種面向?qū)ο蟮某绦蛟O(shè)計語言VB,綜合性的且功能強大的編程語言。C++,既融合了面向?qū)ο蟮哪芰Γ峙cC語言兼容。Java,非常適用于網(wǎng)絡(luò)應(yīng)用,是一種獨立于平臺的語言。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(3)專用語言:專用語言是為特殊應(yīng)用而設(shè)計的編程語言,它通常有特殊的語法形式,面向特定的問題,輸入結(jié)構(gòu)及詞匯表都與該問題密切相關(guān)。LISP、Prolog,適用于人工智能領(lǐng)域,特別是關(guān)于知識表示和專家系統(tǒng)構(gòu)造

APL,為數(shù)組和向量運算設(shè)計的簡潔而強有力的語言Forth,為開發(fā)微處理機軟件設(shè)計的語言,支持用戶自定義函數(shù)并以面向堆棧方式執(zhí)行,以提高速度和節(jié)省內(nèi)存專用語言針對特殊用途設(shè)計,一般應(yīng)用面窄,翻譯過程簡便、高效,但與通用語言相比,可移植性和可維護性較差。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(4)腳本語言:腳本語言是為了縮短傳統(tǒng)的編寫—編譯—鏈接—運行過程而創(chuàng)建的計算機編程語言。早期的腳本語言經(jīng)常被稱為批處理語言或工作控制語言。一個腳本通常是解釋運行而非編譯運行。腳本語言通常都有簡單、易學(xué)、易用的特性,目的就是希望能讓程序設(shè)計師快速完成程序的編寫工作。雖然許多腳本語言都超越了計算機簡單任務(wù)自動化的領(lǐng)域,可以用來編寫更加復(fù)雜的程序,但仍然被稱為腳本語言。在計算機的很多領(lǐng)域中都有腳本語言的存在,包括操作系統(tǒng)、計算機游戲、網(wǎng)絡(luò)應(yīng)用程序、字處理軟件等。在許多方面,高級編程語言和腳本語言互相交叉,二者之間并沒有明確的界限。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(4)腳本語言:許多腳本語言用來執(zhí)行一次性任務(wù),尤其是系統(tǒng)管理方面。它可以把服務(wù)組件粘合起來,因此被廣泛用于圖形用戶界面(GUI)創(chuàng)建或者命令行。操作系統(tǒng)通常提供一些默認的腳本語言,如所謂的Shell腳本語言。有些腳本是為了特定領(lǐng)域設(shè)計的,但有些腳本也可以用來編寫通用的程序。在大型項目中,經(jīng)常把腳本和其他低級編程語言一起使用,發(fā)揮各自優(yōu)勢解決特定問題。腳本經(jīng)常用于設(shè)計互動通信,它有許多可以單獨執(zhí)行的命令,可以做高級操作。這些命令可以簡化代碼編寫過程。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(4)腳本語言:腳本通常以文本形式(如ASCII)保存,只在被調(diào)用時進行解釋或編譯。腳本編程速度快,且腳本文件體積通常小于同類程序文件。這種靈活性是以執(zhí)行效率為代價的,腳本通常是解釋執(zhí)行的,速度可能很慢,且運行時更耗內(nèi)存。然而,腳本和傳統(tǒng)編程語言之間的界限越來越模糊。有經(jīng)驗的程序員可以對一些腳本語言進行大量優(yōu)化工作。在大多現(xiàn)代系統(tǒng)中通常有多種腳本語言可以選擇,所以推薦使用多種語言(包括C或匯編語言)編寫腳本。4.5.1程序設(shè)計語言的分類與選擇

3)高級程序設(shè)計語言—第三代語言(4)腳本語言:大多數(shù)腳本語言的共性是:良好的快速開發(fā),高效率的執(zhí)行,解釋而非編譯執(zhí)行,和其他語言編寫的程序組件之間通信功能很強大。常見的腳本語言有CShell、JavaScript、Perl、VBScript等。4.5.1程序設(shè)計語言的分類與選擇

4)智能語言—第四代語言從上面三代語言的發(fā)展來看,人們不斷尋求越來越抽象的形式表示程序,希望可以把程序員從繁雜的過程性細節(jié)中解放出來,第四代語言(4GL)上升到更高的一個抽象層次,盡管還在用不同的語法表示程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),但它已不再涉及太多的算法性細節(jié)。一般認為4GL具有簡單易學(xué),用戶界面良好,非過程化程度高,面向問題,只需告知計算機“做什么”,而不必告知計算機“怎么做”,用4GL編程使用的代碼量較少,并可成數(shù)量級地提高軟件生產(chǎn)率等特點。4.5.1程序設(shè)計語言的分類與選擇

4)智能語言—第四代語言目前,4GL主流產(chǎn)品基本上與人工智能技術(shù)無關(guān),但隨著4GL非過程化程度和語言抽象級的不斷提高,必然要求人工智能技術(shù)的支持。迄今,使用廣泛的第四代語言是數(shù)據(jù)庫查詢語言,它支持用戶以復(fù)雜的方式操作數(shù)據(jù)庫。流行的SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)支持數(shù)據(jù)庫的定義和操作,功能強大,簡單易學(xué)。程序生成器(ProgramGenerators)代表更為復(fù)雜的一類4GL,它不必依賴預(yù)先定義的數(shù)據(jù)庫,只需要很少的語句就可生成完整的語言程序。此外,一些決策支持語言(DecisionSupportLanguage)、原型語言(PrototypingLanguage)、形式化規(guī)格說明語言(FormalSpecificationLanguage)也被認為屬于4GL的范疇。4.5.1程序設(shè)計語言的分類與選擇通常情況下,一項任務(wù)可以用多種編程語言來實現(xiàn)。當為一項工程選擇程序設(shè)計語言時,應(yīng)主要考慮以下幾個因素:(1)應(yīng)用領(lǐng)域;(2)算法和計算復(fù)雜性;(3)數(shù)據(jù)結(jié)構(gòu)復(fù)雜性;(4)軟件運行環(huán)境;(5)性能方面的需要與實現(xiàn)的條件;(6)軟件開發(fā)組成員是否都精通這門語言。4.5.2軟件開發(fā)工具----分類

軟件開發(fā)工具根據(jù)其在軟件開發(fā)生命周期中不同的階段所起的作用可以分為以下幾種:(1)軟件建模工具。用于描述系統(tǒng)的需求。(2)軟件實施工具。用于程序設(shè)計、編碼和編譯,包括程序語言開發(fā)環(huán)境和集成開發(fā)環(huán)境。前者主要提供程序語言的預(yù)編譯、編譯、鏈接的工具,后者包括編輯器、代碼生成器、運行環(huán)境和調(diào)試器。(3)模擬運行平臺。用于模擬系統(tǒng)的實際運行環(huán)境。(4)軟件測試工具。用于對系統(tǒng)、子系統(tǒng)、模塊或單元進行測試。(5)軟件開發(fā)支撐工具。主要是軟件配置管理工具。包括進度管理、資源管理、費用管理和版本管理、文檔的編制或生成等。4.5.2軟件開發(fā)工具----性能軟件開發(fā)工具的性能由以下幾個方面決定:(1)表達能力或描述能力。表達能力或描述能力決定了軟件開發(fā)工具對軟件項目中各種不同情況的適應(yīng)程度。(2)保持信息一致性的能力。對某些大規(guī)模軟件系統(tǒng),保持信息一致性(包括各部分之間的一致性、代碼與文檔的一致性、功能與結(jié)構(gòu)的一致性)要求工具提供有效的支持。(3)使用的方便程度。人機界面良好、通俗易懂是衡量軟件開發(fā)工具性能的另一指標。(4)工具的可靠性。包括對重要信息的保護和抗干擾能力。(5)對硬件和軟件環(huán)境的要求。這對開發(fā)工具的適用范圍具有深遠影響。4.5.2軟件開發(fā)工具----集成開發(fā)環(huán)境軟件開發(fā)環(huán)境的主要組成部分是軟件開發(fā)工具。軟件開發(fā)環(huán)境中各種開發(fā)工具并不是各自封閉和分離的,而是以綜合、一致和整體連貫的形態(tài)來支持軟件的開發(fā)的,所以一般將軟件開發(fā)環(huán)境稱為集成開發(fā)環(huán)境(IDE,IntegratedDevelopmentEnvironment),它是一種輔助程序開發(fā)人員開發(fā)軟件的應(yīng)用軟件。IDE通常包括編程語言編輯器、編譯器/解釋器、自動建立工具,通常還包括調(diào)試器。有時還會包含版本控制系統(tǒng)和一些可以設(shè)計圖形用戶界面的工具。4.5.2軟件開發(fā)工具----集成開發(fā)環(huán)境雖然目前有一些IDE支持多種編程語言(如Eclipse、NetBeans、XCode、MicrosoftVisualStudio),但是一般而言,IDE主要還是針對某種編程語言(如VisualBasic)。IDE程序提供許多功能,如制作、修改、編譯、發(fā)布、調(diào)試。IDE可以把各種開發(fā)工具結(jié)合起來,提供一個抽象化的工具,可以減少學(xué)習(xí)編程語言的時間,增加開發(fā)人員的生產(chǎn)力,同時也可以將各種開發(fā)工作做更密切的整合,提高生產(chǎn)力。例如,在寫程序的時候就可以做編譯,一發(fā)現(xiàn)有語法上的錯誤就立即回應(yīng)。4.5.2軟件開發(fā)工具----集成開發(fā)環(huán)境集成開發(fā)環(huán)境有很多,這里僅就影響較大、流行較廣的微軟公司推出的Windows平臺應(yīng)用程序開發(fā)環(huán)境VisualStudio進行簡單介紹,以便大家具體了解軟件開發(fā)工具的功能和作用。VisualStudio97是最早的VisualStudio版本。包含面向Windows開發(fā)使用的VisualBasic5.0、VisualC++5.0,面向Java開發(fā)的VisualJ++和面向數(shù)據(jù)庫開發(fā)的VisualFoxPro,還包含面向網(wǎng)站開發(fā)的VisualInterDev。其中,VisualBasic和VisualFoxPro使用單獨的開發(fā)環(huán)境,其他的開發(fā)語言使用統(tǒng)一的開發(fā)環(huán)境。4.5.2軟件開發(fā)工具----集成開發(fā)環(huán)境1998年,微軟公司發(fā)布了VisualStudio6.0。所有開發(fā)語言的開發(fā)環(huán)境版本均升至6.0。這也是VisualBasic最后一次發(fā)布,從下一個版本(7.0)開始,MicrosoftVisualBasic進化成了一種新的面向?qū)ο蟮恼Z言—MicrosoftVisualBasic.NET。自微軟發(fā)布VisualStudio6.0以來,VisualStudio的IDE已經(jīng)成為軟件開發(fā)工具的標桿,很多其他的開發(fā)工具,甚至是其他用途的應(yīng)用程序,都在模仿VisualStudio的IDE。VisualStudio現(xiàn)在已經(jīng)逐漸將軟件開發(fā)環(huán)境擴展到軟件設(shè)計和協(xié)作、生命周期,以及更改管理系統(tǒng)等方面,VisualStudio2012版本提供了更為簡便優(yōu)化界面,實現(xiàn)輕松導(dǎo)航項目應(yīng)用程序;加入了針對Windows8項目的可視化的工具集,對于Web開發(fā),增加了最新的模板、工具以及對HTML5和CSS3等新標準的全面支持等。4.5.3VB程序設(shè)計語言----簡介VisualBasic提供了從設(shè)計新型的用戶界面到利用其他應(yīng)用程序的對象,從處理文字、圖像到使用數(shù)據(jù)庫,開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論