第4章 軟件編碼_第1頁
第4章 軟件編碼_第2頁
第4章 軟件編碼_第3頁
第4章 軟件編碼_第4頁
第4章 軟件編碼_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章軟件編碼

4.1程序設計語言的特性及選擇4.2程序設計風格4.3小結習題4.1程序設計語言的特性及選擇 4.1.1程序設計語言特性 1.心理特性 程序設計語言經(jīng)常要求程序員改變處理問題的方法,使這種處理方法適合于語言的語法規(guī)定。而程序是人設計的,人的因素在設計程序時是至關重要的。語言的心理特性指影響程序員心理的語言性能,許多這類特性是作為程序設計的結果而出現(xiàn)的,雖不能用定量的方法來度量,但可以認識到它在語言中的表現(xiàn)形式如下: (1)歧義性:指程序設計語言通常是無二義性的,編譯程序總是根據(jù)語法,按一種固定方法來解釋語句的,但有些語法規(guī)則容易使人用不同的方式來解釋語言,這就產(chǎn)生了心理上的二義性。 如:X=X1/X2·X3,編譯系統(tǒng)只有一種解釋,但人們卻有不同的理解,有人理解為X=(X1/X2)·X3,而另一個人可能理解為X=X1/(X2·X3)。又如FORTRAN語言中變量的類型有顯式定義和隱式定義兩種,用REALK顯式說明K是實型變量,但按隱含類型定義,K是整型變量。在程序較長時,不可能每次都查類型定義,容易產(chǎn)生錯誤。若程序語言具有這些使人心理上容易產(chǎn)生歧義性的特征,則易使編程出錯,而且可讀性也差。 (2)簡潔性:指人們必須記住的語言成分的數(shù)量。人們要掌握一種語言,就要記住語句的種類、各種數(shù)據(jù)類型、各種運算符、各種內(nèi)部函數(shù)和內(nèi)部過程,這些成分數(shù)量越多,簡潔性越差,人們越難以掌握。但特別簡潔也不好,有的語言(如APL)為了簡潔,提供功能強但形式簡明的運算符,允許用最少的代碼去實現(xiàn)很多的算術和邏輯運算。可是這樣使程序難以理解,一致性差。所以既要簡潔又要易讀易理解。 (3)局部性和順序性:指人的記憶特性有兩方面即聯(lián)想方式和順序方式。人的聯(lián)想力使人能整體地記住和辨別某件事情,如一下子就能識別一個人的面孔,而不是一部分一部分地看過之后才認得出;人的順序記憶提供了回憶序列中下一個元素的手段,如唱歌,依次一句一句地唱出,而不必思索。人的記憶特性對使用語言的方式有很大的影響。局部性指語言的聯(lián)想性,在編碼過程中,由語句組合成模塊,由模塊組裝成系統(tǒng)結構,并在組裝過程中實現(xiàn)模塊的高內(nèi)聚,低耦合,使局部性得到加強,提供異常處理的語言特性,則消弱了局部性。若在程序中多采用順序序列,則使人易理解,如果存在大量分支或循環(huán),則不利于人們的理解。

(4)傳統(tǒng)性:指人們習慣于已掌握的語種,而傳統(tǒng)性容易影響人們學習新語種的積極性,若新語種的結構、形式與原來的類似,還容易接受,若風格根本不同,則難以接受,如習慣用Pascal或C的編程人員,用Lisp和Prolog編程,就要用更多的時間來學習。 2.工程特性 從軟件工程的觀點、程序設計語言的特性著重考慮軟件開發(fā)項目的需要,因此對程序編碼有如下要求:

(1)可移植性:指程序從一個計算機環(huán)境移植到另一個計算機環(huán)境的容易程度,計算機環(huán)境是指不同機型、不同的操作系統(tǒng)版本及不同的應用軟件包。要增加可移植性,應考慮以下幾點:在設計時模塊與操作系統(tǒng)特性不應有高度聯(lián)系;要使用標準的語言,要使用標準的數(shù)據(jù)庫操作,盡量不使用擴充結構;對程序中各種可變信息,均應參數(shù)化,以便于修改。 (2)開發(fā)工具的可利用性:指有效的軟件開發(fā)工具可以縮短編碼時間,改進源代碼的質量。目前,許多編程語言都嵌入到一套完整的軟件開發(fā)環(huán)境里。這些開發(fā)工具為:交互式調試器、交叉編譯器、屏幕格式定義工具、報表格式定義工具、圖形開發(fā)環(huán)境、菜單系統(tǒng)和宏處理程序等。 (3)軟件的可重用性:指編程語言能否提供可重用的軟件成分,如模塊子程序可通過源代碼剪貼、包含和繼承等方式實現(xiàn)軟件重用。可重用軟件在組裝時,從接口到算法都可能調整,需考慮額外代價。

(4)可維護性:指源程序的可維護性對復雜的軟件開發(fā)項目的重要性,如易于把詳細設計翻譯為源程序、易于修改需要變化的源程序。因此,源程序的可讀性、語言的文檔化特性對軟件的可維護性具有重大的影響。 3.技術特性 語言的技術特性對軟件工程各階段有一定的影響,特別是確定了軟件需求之后,程序設計語言的特性就顯得非常重要了,要根據(jù)項目的特性選擇相應特性的語言,有的要求提供復雜的數(shù)據(jù)結構,有的要求實時處理能力強,有的要求能方便地進行數(shù)據(jù)庫的操作。軟件設計階段的設計質量一般與語言的技術特性關系不大(面向對象設計例外),但將軟件設計轉化為程序代碼時,轉化的質量往往受語言性能的影響,可能會影響到設計方法。

如Ada,Smalltalk,C++等支持抽象類型的概念,Pascal,C等允許用戶自定義數(shù)據(jù)類型,并能提供鏈表和其他數(shù)據(jù)結構的類型。這些語言特性為設計者進行概要設計和詳細設計提供了很大的方便。在有些情況下,僅在語言具有某種特性時,設計需求才能滿足。如要實現(xiàn)彼此通信和協(xié)調的并發(fā)分布式處理,要用并發(fā)Pascal,Ada,Modula_2等語言才能用于這樣的設計。語言的特性對軟件的測試與維護也有一定的影響。支持結構化構造的語言有利于減少程序環(huán)路的復雜性,使程序易測試、易維護。 4.1.2程序設計語言的選擇 為開發(fā)一個特定項目,選擇程序設計語言時,必須從技術特性、工程特性和心理特性幾方面考慮。在選擇語言時,從問題入手,確定它的要求是什么,以及這些要求的相對重要性。由于一種語言不可能同時滿足它的各種需求,所以要對各種要求進行權衡,比較各種可用語言的適用程度,最后選擇認為是最適用的語言。 1.項目的應用領域 項目的應用領域是選擇語言的關鍵因素,有下列幾種類型。

1)科學工程計算 該計算需要大量的標準庫函數(shù),以便處理復雜的數(shù)值計算,可供選用的語言有: (1)FORTRAN語言:是世界上第一個被正式推廣應用的計算機語言,產(chǎn)生于1954年,經(jīng)過FORTRAN0到FORTRANⅣ,又相繼擴展為FORTRAN77,F(xiàn)ORTRAN90,通過幾個版本不斷的更新,使它不僅面向科學計算,數(shù)據(jù)處理能力也極強。 (2)Pascal語言:產(chǎn)生于20世紀60年代末,具有很強的數(shù)據(jù)和過程結構化的能力,它是第一個體現(xiàn)結構化編程思想的語言,由于它語言簡明、數(shù)據(jù)類型豐富、程序結構嚴謹,許多算法都用類Pascal來概括。用Pascal語言寫程序,也有助于培養(yǎng)良好的編程風格。 (3)C語言:產(chǎn)生于20世紀70年代初,最初用于描述UNIX操作系統(tǒng)及其上層軟件,后來發(fā)展成具有很強功能的語言,支持復雜的數(shù)據(jù)結構,可大量運用指針,具有豐富靈活的操作運算符及數(shù)據(jù)處理操作符。此外還具有匯編語言的某些特性,使程序運行效率高。 (4)PL/1語言:是一個適用性非常廣泛的語言,能夠適用于多種不同的應用領域,但由于太龐大,難以推廣使用,目前一些PL/1的子集被廣泛使用。 2)數(shù)據(jù)處理與數(shù)據(jù)庫應用 數(shù)據(jù)處理與數(shù)據(jù)庫應用可供選用的語言如下: (1)Cobol語言:產(chǎn)生于20世紀50年代末,是廣泛用于商業(yè)數(shù)據(jù)處理的語言,它具有極強的數(shù)據(jù)定義能力,程序說明與硬件環(huán)境說明分開,數(shù)據(jù)描述與算法描述分開,結構嚴謹,層次分明,說明采用類英語的語法結構,可讀性強。 (2)SQL語言:最初是為IBM公司開發(fā)的數(shù)據(jù)庫查詢語言,目前不同的軟件開發(fā)公司有了不同的擴充版本,如20世紀80年代后期我國引入Informix_SQL,Microsoft_SQL可以方便地對數(shù)據(jù)庫進行存取管理。 (3)4GL語言:稱為第4代語言,隨著信息系統(tǒng)的飛速發(fā)展,原來的第2代語言(如FORTRAN,Cobol)第3代語言(如Pascal,C等)受硬件和操作系統(tǒng)的局限,其開發(fā)工具不能滿足新技術發(fā)展的需求,因此,在20世紀70年代末,提出了第4代語言的概念,4GL的主要特征是: ①友好的用戶界面:操作簡單,非計算機專業(yè)人員也能方便地使用它。 ②兼有過程性和非過程性雙重特性:非過程性指語言的抽象層次又提高到一個新的高度,只需告訴計算機“做什么”,而不必描述“怎么做”,“怎么做”的工作由語言系統(tǒng)運用它的專門領域的知識來填充過程細節(jié)。 ③高效的程序代碼:能縮短開發(fā)周期,并減少維護的代價。 ④完備的數(shù)據(jù)庫:在4GL中實現(xiàn)數(shù)據(jù)庫功能,不再把DBMS(數(shù)據(jù)庫管理系統(tǒng))看成是語言以外的成分。 ⑤應用程序生成器:能提供一些常用的程序來完成文件維護、屏幕管理、報表生成和查詢等任務,從而有效提高軟件生產(chǎn)率。 目前流行的Fox公司的FoxPro,Uniface公司的Uniface,Powersoft公司的PowerBuilder,Informix公司的Informix_4GL以及各種擴充版本的SQL等都不同程度地具有上述特征。 3)實時處理 實時處理軟件一般對性能的要求很高,可選用的語言有: (1)匯編語言:是面向機器的,它可以完成高級語言無法滿足要求的特殊功能,如與外部設備之間的一些接口操作。 (2)Ada語言:是美國國防部出資開發(fā)的,主要用于實時、并發(fā)和嵌入系統(tǒng)的語言。Ada語言是在Pascal基礎上開發(fā)出來的,但其功能更強、更復雜。它提供了一組豐富的實時特性,包括多任務處理、中斷處理、任務間同步與通信等,它還提供了許多程序包供程序員選擇。通過修訂,已成為安全、高效和靈活的面向對象的編程語言。 4)系統(tǒng)軟件 如果編寫操作系統(tǒng)、編譯系統(tǒng)等系統(tǒng)軟件時,可選用匯編語言、C語言、Pascal語言和Ada語言。 5)人工智能 如果要完成知識庫系統(tǒng)、專家系統(tǒng)、決策支持系統(tǒng)、推理工程、語言識別、模式識別、機器人視角及自然語言處理等人工智能領域內(nèi)的系統(tǒng),應選擇的語言如下: (1)Lisp:是一種函數(shù)型語言,產(chǎn)生于20世紀60年代初,它特別適用于組合問題中的符號運算和表處理,因此用于定理證明、樹的搜索和其他問題的求解。近年來Lisp廣泛應用于專家系統(tǒng)的開發(fā),對于定義知識庫系統(tǒng)中的事實、規(guī)則和相應的推理相對要容易一些。 (2)Prolog:是一種邏輯型語言,產(chǎn)生于20世紀70年代初,它提供了支持知識表示的特性,每一個程序由一組表示事實、規(guī)則和推理的子句組成,比較接近于自然語言,符合人的思維方式。 以上討論的語言,一般適用于相應的應用領域,但要根據(jù)具體情況靈活掌握。有的語言功能強,適用的范圍較廣,但比較龐大。

2.軟件開發(fā)的方法 有時編程語言的選擇依賴于開發(fā)的方法,如果要用快速原型模型來開發(fā)(詳見第7章),要求能快速實現(xiàn)原型,因此宜采用4GL。如果是面向對象方法,宜采用面向對象的語言編程。近年來,推出了許多面向對象的語言,這里主要介紹以下幾種: (1)C++:是由美國AT&T公司的Bell實驗室最先設計和實現(xiàn)的語言,它提供了面向對象類的定義、繼承、封裝和消息傳遞等概念實現(xiàn)的手段,又與C語言兼容,保留了C語言的許多特性,維護了大量已開發(fā)的C庫、C工具以及C源程序的完整性,使編程人員不必放棄自己熟悉的C語言,只需補充學習C++提供的那些面向對象的概念,因而從C過渡到C++比較容易,加之它的運行性能較高,成為當今最受歡迎的對象語言之一。 目前,除了常用的AT&TC++,TurboC++,BorlandC++及MicrosoftC++等版本外,又推出了MicrosoftVisualC++,充分發(fā)揮Windows和Web的功能。 (2)Java:是由Sun公司開發(fā)的一種面向對象的、分布式的、安全的、高效的及易移植的語言,它的基本功能類似于C++,但做了重大修改,不再支持運算符重載、多繼承及許多易于混淆和較少使用的特性,增加了內(nèi)存空間自動垃圾收集的功能,使程序員不必考慮內(nèi)存管理問題。Java應用程序可利用語言提供的例程庫,能夠自由地打開和訪問網(wǎng)絡上的對象。 3.軟件執(zhí)行的環(huán)境 良好的編程環(huán)境不但有效提高軟件生產(chǎn)率,同時能減少錯誤,有效提高軟件質量。近幾年推出了許多可視化的軟件開發(fā)環(huán)境,如VisualBASIC,VisualC,VisualFoxPro及Delphi(面向對象的Pascal)等,都提供了強有力的調試工具,幫助你快速形成高質量的軟件。 4.算法和數(shù)據(jù)結構的復雜性 科學計算、實時處理和人工智能領域中的問題算法較復雜,而數(shù)據(jù)處理、數(shù)據(jù)庫應用和系統(tǒng)軟件領域內(nèi)的問題,數(shù)據(jù)結構比較復雜,因此選擇語言時可考慮是否有完成復雜算法的能力,或者有構造復雜數(shù)據(jù)結構的能力。 5.軟件開發(fā)人員的知識 有時編程語言的選擇與軟件開發(fā)人員的知識水平及心理因素有關,新的語言雖然有吸引力,但軟件開發(fā)人員若熟悉某種語言,而且有類似項目的開發(fā)經(jīng)驗,往往愿選擇原有的語言。開發(fā)人員應仔細地分析軟件項目的類型,敢于學習新知識,掌握新技術。4.2程序設計風格 1.源程序文檔化 編寫源程序文檔化的原則為: (1)標識符應按意取名。若是幾個單詞組成的標識符,每個單詞第一個字母用大寫,或者之間用下劃線分開,這便于理解。如某個標識符取名為rowofscreen,若寫成RowOfScreen或row_of_screen就容易理解了。但名字也不是越長越好,太長了,書寫與輸入都易出錯,必要時用縮寫名字,但縮寫規(guī)則要一致。 (2)程序應加注釋。注釋是程序員與讀者之間通信的重要工具,用自然語言或偽碼描述。它說明了程序的功能,特別在維護階段,對理解程序提供了明確指導。注釋分序言性注釋和功能性注釋。 序言性注釋應置于每個模塊的起始部分,主要內(nèi)容有: ①說明每個模塊的用途、功能。 ②說明模塊的接口即調用形式、參數(shù)描述及從屬模塊的清單。 ③數(shù)據(jù)描述:指重要數(shù)據(jù)的名稱、用途、限制、約束及其他信息。 ④開發(fā)歷史:指設計者、審閱者姓名及日期,修改說明及日期。 功能性注釋嵌入在源程序內(nèi)部,說明程序段或語句的功能以及數(shù)據(jù)的狀態(tài)。注意以下幾點: ①注釋用來說明程序段,而不是每一行程序都要加注釋。 ②使用空行或縮進或括號,以便很容易區(qū)分注釋和程序。 ③修改程序也應修改注釋。 2.數(shù)據(jù)說明 為了使數(shù)據(jù)定義更易于理解和維護,有以下指導原則: (1)數(shù)據(jù)說明順序應規(guī)范,使數(shù)據(jù)的屬性更易于查找,從而有利于測試、糾錯與維護。例如按常量說明、類型說明、全程量說明及局部量說明順序。 (2)一個語句說明多個變量時,各變量名按字典序排列。 (3)對于復雜的數(shù)據(jù)結構,要加注釋,說明在程序實現(xiàn)時的特點。 3.語句構造 語句構造的原則為:簡單直接,不能為了追求效率而使代碼復雜化。為了便于閱讀和理解,不要一行多個語句。不同層次的語句采用縮進形式,使程序的邏輯結構和功能特征更加清晰。要避免復雜的判定條件,避免多重的循環(huán)嵌套。表達式中使用括號以提高運算次序的清晰度等。

4.輸入和輸出 在編寫輸入和輸出程序時考慮以下原則: (1)輸入操作步驟和輸入格式盡量簡單。 (2)應檢查輸入數(shù)據(jù)的合法性、有效性,報告必要的輸入狀態(tài)信息及錯誤信息。 (3)輸入一批數(shù)據(jù)時,使用數(shù)據(jù)或文件結束標志,而不要用計數(shù)來控制。 (4)交互式輸入時,提供可用的選擇和邊界值。

溫馨提示

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

評論

0/150

提交評論