版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章軟件工程6.1 程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言特性程序設(shè)計(jì)語(yǔ)言特性 1. 心理特性心理特性 程序設(shè)計(jì)語(yǔ)言經(jīng)常要求程序員改變處理問(wèn)題的方法,使這種處理方法適合于語(yǔ)言的語(yǔ)法規(guī)定。而程序是人設(shè)計(jì)的,人的因素在設(shè)計(jì)程序時(shí)是至關(guān)重要的。語(yǔ)言的心理特性指影響程序員心理的語(yǔ)言性能,許多這類(lèi)特性是作為程序設(shè)計(jì)的結(jié)果而出現(xiàn)的,雖不能用定量的方法來(lái)度量,但可以認(rèn)識(shí)到它在語(yǔ)言中的表現(xiàn)形式如下: (1) 歧義性: 指程序設(shè)計(jì)語(yǔ)言通常是無(wú)二義性的, 編譯程序總是根據(jù)語(yǔ)法,按一種固定方法來(lái)解釋語(yǔ)句的,但有些語(yǔ)法規(guī)則容易使人用不同的方式來(lái)解釋語(yǔ)言, 這就產(chǎn)生了心理上的二義性。 如:X=X1/X2X3,編
2、譯系統(tǒng)只有一種解釋?zhuān)?但人們卻有不同的理解,有人理解為X=(X1/X2)X3,而另一個(gè)人可能理解為X=X1/(X2X3)。 又如 FORTRAN語(yǔ)言中變量的類(lèi)型有顯式定義和隱式定義兩種,用REAL K顯式說(shuō)明K是實(shí)型變量, 但按隱含類(lèi)型定義,K是整型變量。在程序較長(zhǎng)時(shí),不可能每次都查類(lèi)型定義,容易產(chǎn)生錯(cuò)誤。若程序語(yǔ)言具有這些使人心理上容易產(chǎn)生歧義性的特征,則易使編程出錯(cuò),而且可讀性也差。 (2) 簡(jiǎn)潔性:指人們必須記住的語(yǔ)言成分的數(shù)量。 人們要掌握一種語(yǔ)言,就要記住語(yǔ)句的種類(lèi)、各種數(shù)據(jù)類(lèi)型、各種運(yùn)算符、 各種內(nèi)部函數(shù)和內(nèi)部過(guò)程,這些成分?jǐn)?shù)量越多,簡(jiǎn)潔性越差,人們?cè)诫y以掌握。但特別簡(jiǎn)潔也不好,有
3、的語(yǔ)言(如APL)為了簡(jiǎn)潔,提供功能強(qiáng)但形式簡(jiǎn)明的運(yùn)算符,允許用最少的代碼去實(shí)現(xiàn)很多的算術(shù)和邏輯運(yùn)算??墒沁@樣使程序難以理解,一致性差。所以既要簡(jiǎn)潔又要易讀易理解。 (3) 局部性和順序性:指人的記憶特性有兩方面即聯(lián)想方式和順序方式。人的聯(lián)想力使人能整體地記住和辨別某件事情, 如一下子就能識(shí)別一個(gè)人的面孔,而不是一部分一部分地看過(guò)之后才認(rèn)得出;順序記憶提供了回憶序列中下一個(gè)元素的手段,如唱歌,依次一句一句地唱出, 而不必思索。 人的記憶特性對(duì)使用語(yǔ)言的方式有很大的影響。局部性指語(yǔ)言的聯(lián)想性,在編碼過(guò)程中, 由語(yǔ)句組合成模塊,由模塊組裝成系統(tǒng)結(jié)構(gòu),并在組裝過(guò)程中實(shí)現(xiàn)模塊的高內(nèi)聚,低耦合, 使局部
4、性得到加強(qiáng),提供異常處理的語(yǔ)言特性,則消弱了局部性。若在程序中多采用順序序列, 則使人易理解,如果存在大量分支或循環(huán), 則不利于人們的理解。 (4) 傳統(tǒng)性:指人們習(xí)慣于已掌握的語(yǔ)種,而傳統(tǒng)性容易影響人們學(xué)習(xí)新語(yǔ)種的積極性,若新語(yǔ)種的結(jié)構(gòu)、形式與原來(lái)的類(lèi)似,還容易接受,若風(fēng)格根本不同,則難以接受,如習(xí)慣用Pascal或C的編程人員,用Lisp和Prolog編程, 就要用更多的時(shí)間來(lái)學(xué)習(xí)。 2. 工程特性工程特性 從軟件工程的觀(guān)點(diǎn)、程序設(shè)計(jì)語(yǔ)言的特性著重考慮軟件開(kāi)發(fā)項(xiàng)目的需要,因此對(duì)程序編碼有如下要求: (1) 可移植性:指程序從一個(gè)計(jì)算機(jī)環(huán)境移植到另一個(gè)計(jì)算機(jī)環(huán)境的容易程度,計(jì)算機(jī)環(huán)境是指不同
5、機(jī)型、不同的操作系統(tǒng)版本及不同的應(yīng)用軟件包。要增加可移植性,應(yīng)考慮以下幾點(diǎn):在設(shè)計(jì)時(shí)模塊與操作系統(tǒng)特性不應(yīng)有高度聯(lián)系; 要使用標(biāo)準(zhǔn)的語(yǔ)言,要使用標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)操作,盡量不使用擴(kuò)充結(jié)構(gòu); 對(duì)程序中各種可變信息,均應(yīng)參數(shù)化,以便于修改。 (2) 開(kāi)發(fā)工具的可利用性:指有效的軟件開(kāi)發(fā)工具可以縮短編碼時(shí)間,改進(jìn)源代碼的質(zhì)量。目前,許多編程語(yǔ)言都嵌入到一套完整的軟件開(kāi)發(fā)環(huán)境里。這些開(kāi)發(fā)工具為:交互式調(diào)試器、交叉編譯器、屏幕格式定義工具、報(bào)表格式定義工具、圖形開(kāi)發(fā)環(huán)境、菜單系統(tǒng)和宏處理程序等。 (3) 軟件的可重用性:指編程語(yǔ)言能否提供可重用的軟件成分,如模塊子程序可通過(guò)源代碼剪貼、包含和繼承等方式實(shí)現(xiàn)軟件
6、重用??芍赜密浖诮M裝時(shí),從接口到算法都可能調(diào)整, 需考慮額外代價(jià)。 (4) 可維護(hù)性:指源程序的可維護(hù)性對(duì)復(fù)雜的軟件開(kāi)發(fā)項(xiàng)目的重要性,如易于把詳細(xì)設(shè)計(jì)翻譯為源程序、易于修改需要變化的源程序。因此,源程序的可讀性、語(yǔ)言的文檔化特性對(duì)軟件的可維護(hù)性具有重大的影響。 3. 技術(shù)特性技術(shù)特性 語(yǔ)言的技術(shù)特性對(duì)軟件工程各階段有一定的影響, 特別是確定了軟件需求之后,程序設(shè)計(jì)語(yǔ)言的特性就顯得非常重要了, 要根據(jù)項(xiàng)目的特性選擇相應(yīng)特性的語(yǔ)言,有的要求提供復(fù)雜的數(shù)據(jù)結(jié)構(gòu),有的要求實(shí)時(shí)處理能力強(qiáng),有的要求能方便地進(jìn)行數(shù)據(jù)庫(kù)的操作。軟件設(shè)計(jì)階段的設(shè)計(jì)質(zhì)量一般與語(yǔ)言的技術(shù)特性關(guān)系不大(面向?qū)ο笤O(shè)計(jì)例外),但將軟件
7、設(shè)計(jì)轉(zhuǎn)化為程序代碼時(shí), 轉(zhuǎn)化的質(zhì)量往往受語(yǔ)言性能的影響,可能會(huì)影響到設(shè)計(jì)方法。如Ada, Smalltalk, C+等支持抽象類(lèi)型的概念,Pascal, C等允許用戶(hù)自定義數(shù)據(jù)類(lèi)型,并能提供鏈表和其他數(shù)據(jù)結(jié)構(gòu)的類(lèi)型。 這些語(yǔ)言特性為設(shè)計(jì)者進(jìn)行概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)提供了很大的方便。在有些情況下,僅在語(yǔ)言具有某種特性時(shí), 設(shè)計(jì)需求才能滿(mǎn)足。如要實(shí)現(xiàn)彼此通信和協(xié)調(diào)的并發(fā)分布式處理, 要用并發(fā)Pascal, Ada, Modula-2等語(yǔ)言才能用于這樣的設(shè)計(jì)。 語(yǔ)言的特性對(duì)軟件的測(cè)試與維護(hù)也有一定的影響。支持結(jié)構(gòu)化構(gòu)造的語(yǔ)言有利于減少程序環(huán)路的復(fù)雜性,使程序易測(cè)試、 易維護(hù)。程序設(shè)計(jì)語(yǔ)言的選擇程序設(shè)計(jì)語(yǔ)
8、言的選擇 1. 項(xiàng)目的應(yīng)用領(lǐng)域項(xiàng)目的應(yīng)用領(lǐng)域項(xiàng)目應(yīng)用領(lǐng)域是選擇語(yǔ)言的關(guān)鍵因素, 有下列幾種類(lèi)型。 為開(kāi)發(fā)一個(gè)特定項(xiàng)目選擇程序設(shè)計(jì)語(yǔ)言時(shí),必須從技術(shù)特性、工程特性和心理特性幾方面考慮。在選擇語(yǔ)言時(shí),從問(wèn)題入手,確定它的要求是什么,以及這些要求的相對(duì)重要性。由于一種語(yǔ)言不可能同時(shí)滿(mǎn)足它的各種需求,所以要對(duì)各種要求進(jìn)行權(quán)衡,比較各種可用語(yǔ)言的適用程度,最后選擇認(rèn)為是最適用的語(yǔ)言。1) 科學(xué)工程計(jì)算 該計(jì)算需要大量的標(biāo)準(zhǔn)庫(kù)函數(shù), 以便處理復(fù)雜的數(shù)值計(jì)算, 可供選用的語(yǔ)言有:FORTRAN語(yǔ)言: 是世界上第一個(gè)被正式推廣應(yīng)用的計(jì)算機(jī)語(yǔ)言,產(chǎn)生于1954年,經(jīng)過(guò)FORTRAN 0到FORTRAN , 又相
9、繼擴(kuò)展為FORTRAN 77,F(xiàn)ORTRAN 90,通過(guò)幾個(gè)版本不斷的更新,使它不僅面向科學(xué)計(jì)算,數(shù)據(jù)處理能力也極強(qiáng)。(2) Pascal語(yǔ)言: 產(chǎn)生于60年代末, 具有很強(qiáng)的數(shù)據(jù)和過(guò)程結(jié)構(gòu)化的能力,它是第一個(gè)體現(xiàn)結(jié)構(gòu)化編程思想的語(yǔ)言, 由于它語(yǔ)言簡(jiǎn)明、數(shù)據(jù)類(lèi)型豐富、程序結(jié)構(gòu)嚴(yán)謹(jǐn),許多算法都用類(lèi)Pascal來(lái)概括。用Pascal語(yǔ)言寫(xiě)程序,也有助于培養(yǎng)良好的編程風(fēng)格。 (3) C語(yǔ)言:產(chǎn)生于70年代初,最初用于描述UNIX操作系統(tǒng)及其上層軟件,后來(lái)發(fā)展成具有很強(qiáng)功能的語(yǔ)言,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu), 可大量運(yùn)用指針,具有豐富靈活的操作運(yùn)算符及數(shù)據(jù)處理操作符。此外還具有匯編語(yǔ)言的某些特性,使程序運(yùn)行效
10、率高。 (4) PL/1語(yǔ)言: 是一個(gè)適用性非常廣泛的語(yǔ)言, 能夠適用于多種不同的應(yīng)用領(lǐng)域,但由于太龐大,難以推廣使用,目前一些PL/1的子集被廣泛使用。 2) 數(shù)據(jù)處理與數(shù)據(jù)庫(kù)應(yīng)用 數(shù)據(jù)處理與數(shù)據(jù)庫(kù)應(yīng)用可供選用的語(yǔ)言如下: (1) Cobol語(yǔ)言: 產(chǎn)生于 50 年代末, 是廣泛用于商業(yè)數(shù)據(jù)處理的語(yǔ)言,它具有極強(qiáng)的數(shù)據(jù)定義能力,程序說(shuō)明與硬件環(huán)境說(shuō)明分開(kāi), 數(shù)據(jù)描述與算法描述分開(kāi),結(jié)構(gòu)嚴(yán)謹(jǐn)層次分明, 說(shuō)明采用類(lèi)英語(yǔ)的語(yǔ)法結(jié)構(gòu),可讀性強(qiáng)。 (2) SQL語(yǔ)言: 最初是為IBM公司開(kāi)發(fā)的數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言, 目前不同的軟件開(kāi)發(fā)公司有了不同的擴(kuò)充版本, 如 80 年代后期我國(guó)引入Informix-SQ
11、L, Microsoft-SQL可以方便地對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取管理。 (3) 4GL語(yǔ)言: 稱(chēng)為第4代語(yǔ)言,隨著信息系統(tǒng)的飛速發(fā)展, 原來(lái)的第2代語(yǔ)言(如FORTRAN,Cobol)第3代語(yǔ)言(如Pascal, C等)受硬件和操作系統(tǒng)的局限,其開(kāi)發(fā)工具不能滿(mǎn)足新技術(shù)發(fā)展的需求,因此,在70年代末,提出了第4代語(yǔ)言的概念, 4GL的主要特征是: 友好的用戶(hù)界面: 指操作簡(jiǎn)單, 使非計(jì)算機(jī)專(zhuān)業(yè)人員也能方便地使用它。 兼有過(guò)程性和非過(guò)程性雙重特性:非過(guò)程性指語(yǔ)言的抽象層次又提高到一個(gè)新的高度,只需告訴計(jì)算機(jī)“做什么”, 而不必描述“怎么做”,“怎么做”的工作由語(yǔ)言系統(tǒng)運(yùn)用它的專(zhuān)門(mén)領(lǐng)域的知識(shí)來(lái)填充過(guò)程細(xì)節(jié)
12、。 高效的程序代碼: 指能縮短開(kāi)發(fā)周期, 并減少維護(hù)的代價(jià)。 完備的數(shù)據(jù)庫(kù): 指在4GL中實(shí)現(xiàn)數(shù)據(jù)庫(kù)功能, 不再把DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng))看成是語(yǔ)言以外的成分。 應(yīng)用程序生成器:能提供一些常用的程序來(lái)完成文件維護(hù)、屏幕管理、報(bào)表生成和查詢(xún)等任務(wù), 從而有效提高軟件生產(chǎn)率。 目前流行的Fox公司的FoxPro, Uniface公司的Uniface, Powersoft公司的Power Builder, Informix公司的Informix-4GL以及各種擴(kuò)充版本的SQL等都不同程度地具有上述特征。 3) 實(shí)時(shí)處理 實(shí)時(shí)處理軟件一般對(duì)性能的要求很高, 可選用的語(yǔ)言有: (1) 匯編語(yǔ)言:是面向
13、機(jī)器的,它可以完成高級(jí)語(yǔ)言無(wú)法滿(mǎn)足要求的特殊功能,如與外部設(shè)備之間的一些接口操作。 (2) Ada語(yǔ)言:是美國(guó)國(guó)防部出資開(kāi)發(fā)的,主要用于適時(shí)、 并發(fā)和嵌入系統(tǒng)的語(yǔ)言。Ada語(yǔ)言是在Pascal基礎(chǔ)上開(kāi)發(fā)出來(lái)的,但其功能更強(qiáng)、更復(fù)雜。它提供了一組豐富的實(shí)時(shí)特性, 包括多任務(wù)處理、中斷處理、任務(wù)間同步與通信等, 它還提供了許多程序包供程序員選擇。通過(guò)修訂,已成為安全、高效和靈活的面向?qū)ο蟮木幊陶Z(yǔ)言。5) 人工智能4) 系統(tǒng)軟件 如果編寫(xiě)操作系統(tǒng)、編譯系統(tǒng)等系統(tǒng)軟件時(shí),可選用匯編語(yǔ)言、C語(yǔ)言、Pascal語(yǔ)言和Ada語(yǔ)言。 如果要完成知識(shí)庫(kù)系統(tǒng)、專(zhuān)家系統(tǒng)、決策支持系統(tǒng)、推理工程、語(yǔ)言識(shí)別、模式識(shí)別、
14、機(jī)器人視角及自然語(yǔ)言處理等人工智能領(lǐng)域內(nèi)的系統(tǒng), 應(yīng)選擇的語(yǔ)言如下: (1) Lisp: 是一種函數(shù)型語(yǔ)言,產(chǎn)生于60年代初,它特別適用于組合問(wèn)題中的符號(hào)運(yùn)算和表處理,因此用于定理證明、樹(shù)的搜索和其他問(wèn)題的求解。近年來(lái)Lisp廣泛應(yīng)用于專(zhuān)家系統(tǒng)的開(kāi)發(fā), 對(duì)于定義知識(shí)庫(kù)系統(tǒng)中的事實(shí)、規(guī)則和相應(yīng)的推理相對(duì)要容易一些。 (2) Prolog: 是一種邏輯型語(yǔ)言,產(chǎn)生于70年代初,它提供了支持知識(shí)表示的特性,每一個(gè)程序由一組表示事實(shí)、規(guī)則和推理的子句組成, 比較接近于自然語(yǔ)言,符合人的思維方式。 以上討論的語(yǔ)言,一般適用于相應(yīng)的應(yīng)用領(lǐng)域,但要根據(jù)具體情況靈活掌握。有的語(yǔ)言功能強(qiáng),適用的范圍較廣,但比較
15、龐大。2 軟件開(kāi)發(fā)的方法軟件開(kāi)發(fā)的方法 有時(shí)編程語(yǔ)言的選擇依賴(lài)于開(kāi)發(fā)的方法,如果要用快速原型模型來(lái)開(kāi)發(fā),要求能快速實(shí)現(xiàn)原型,因此宜采用4GL。如果是面向?qū)ο蠓椒ǎ瞬捎妹嫦驅(qū)ο蟮恼Z(yǔ)言編程。近年來(lái),推出了許多面向?qū)ο蟮恼Z(yǔ)言,這里主要介紹以下幾種: (1) C+:是由美國(guó)AT&T公司的Bell實(shí)驗(yàn)室最先設(shè)計(jì)和實(shí)現(xiàn)的語(yǔ)言,它提供了面向?qū)ο箢?lèi)的定義、繼承、封裝和消息傳遞等概念實(shí)現(xiàn)的手段,又與C語(yǔ)言兼容,保留了C語(yǔ)言的許多特性, 維護(hù)了大量已開(kāi)發(fā)的C庫(kù)、C工具以及C源程序的完整性,使編程人員不必放棄自己熟悉的C語(yǔ)言,只需補(bǔ)充學(xué)習(xí)C+提供的那些面向?qū)ο蟮母拍睿蚨鴱腃過(guò)渡到C+比較容易,加之它的運(yùn)
16、行性能較高, 成為當(dāng)今最受歡迎的對(duì)象語(yǔ)言之一。 目前, 除了常用的AT&T C+, Turbo C+, Borland C+及Microsoft C+等版本外,又推出了Microsoft Visual C+, 充分發(fā)揮Windows和Web的功能。 (2) Java: 是由Sun公司開(kāi)發(fā)的一種面向?qū)ο蟮摹⒎植际降摹?安全的、 高效的及易移植的語(yǔ)言,它的基本功能類(lèi)似于C+, 但做了重大修改, 不再支持運(yùn)算符重載、多繼承及許多易于混淆和較少使用的特性,增加了內(nèi)存空間自動(dòng)垃圾收集的功能, 使程序員不必考慮內(nèi)存管理問(wèn)題。Java應(yīng)用程序可利用語(yǔ)言提供的例程庫(kù),能夠自由地打開(kāi)和訪(fǎng)問(wèn)網(wǎng)絡(luò)上的對(duì)象。
17、 3. 軟件執(zhí)行的環(huán)境軟件執(zhí)行的環(huán)境 良好的編程環(huán)境不但有效提高軟件生產(chǎn)率, 同時(shí)能減少錯(cuò)誤,有效提高軟件質(zhì)量。近幾年推出了許多可視化的軟件開(kāi)發(fā)環(huán)境, 如Visual BASIC, Visual C, Visual FoxPro及Delphi(面向?qū)ο蟮腜ascal)等,都提供了強(qiáng)有力的調(diào)試工具, 幫助你快速形成高質(zhì)量的軟件。4. 算法和數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性算法和數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性 科學(xué)計(jì)算、實(shí)時(shí)處理和人工智能領(lǐng)域中的問(wèn)題算法較復(fù)雜, 而數(shù)據(jù)處理、數(shù)據(jù)庫(kù)應(yīng)用和系統(tǒng)軟件領(lǐng)域內(nèi)的問(wèn)題,數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,因此選擇語(yǔ)言時(shí)可考慮是否有完成復(fù)雜算法的能力, 或者有構(gòu)造復(fù)雜數(shù)據(jù)結(jié)構(gòu)的能力。 5. 軟件開(kāi)發(fā)人員的知
18、識(shí)軟件開(kāi)發(fā)人員的知識(shí) 有時(shí)編程語(yǔ)言的選擇與軟件開(kāi)發(fā)人員的知識(shí)水平及心理因素有關(guān),新的語(yǔ)言雖然有吸引力,但軟件開(kāi)發(fā)人員若熟悉某種語(yǔ)言, 而且有類(lèi)似項(xiàng)目的開(kāi)發(fā)經(jīng)驗(yàn),往往愿選擇原有的語(yǔ)言。 開(kāi)發(fā)人員應(yīng)仔細(xì)地分析軟件項(xiàng)目的類(lèi)型, 敢于學(xué)習(xí)新知識(shí),掌握新技術(shù)。6.2 程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格 隨著計(jì)算機(jī)技術(shù)的發(fā)展,軟件的規(guī)模增大了,軟件的復(fù)雜性也增強(qiáng)了。為了保證軟件的質(zhì)量,要加強(qiáng)軟件測(cè)試。為了延長(zhǎng)軟件的生存期,就要經(jīng)常進(jìn)行軟件維護(hù)。不論測(cè)試與維護(hù),都必須要閱讀程序。因此,讀程序是軟件維護(hù)和開(kāi)發(fā)過(guò)程中的一個(gè)重要組成部分。有時(shí)讀程序的時(shí)間比寫(xiě)程序的時(shí)間還要多。同樣一個(gè)題目,為什么有人編的程序容易讀懂,而有人
19、編的程序不易讀懂呢?這就存在一個(gè)程序設(shè)計(jì)的風(fēng)格問(wèn)題。程序設(shè)計(jì)風(fēng)格指一個(gè)人編制程序時(shí)所表現(xiàn)出來(lái)的特點(diǎn)、習(xí)慣及邏輯思路等。良好的編程風(fēng)格可以減少編碼的錯(cuò)誤,減少讀程序的時(shí)間,從而提高軟件的開(kāi)發(fā)效率。因此本節(jié)主要討論與編程風(fēng)格有關(guān)的因素。 1. 源程序文檔化源程序文檔化 編寫(xiě)源程序文檔化的原則為: (1) 標(biāo)識(shí)符應(yīng)按意取名。若是幾個(gè)單詞組成的標(biāo)識(shí)符, 每個(gè)單詞第一個(gè)字母用大寫(xiě),或者之間用下劃線(xiàn)分開(kāi),這便于理解。 如某個(gè)標(biāo)識(shí)符取名為rowofscreen, 若寫(xiě)成RowOfScreen或row-of-screen就容易理解了。但名字也不是越長(zhǎng)越好,太長(zhǎng)了,書(shū)寫(xiě)與輸入都易出錯(cuò),必要時(shí)用縮寫(xiě)名字,但縮寫(xiě)規(guī)
20、則要一致。 (2) 程序應(yīng)加注釋。 注釋是程序員與讀者之間通信的重要工具,用自然語(yǔ)言或偽碼描述。它說(shuō)明了程序的功能,特別在維護(hù)階段, 對(duì)理解程序提供了明確指導(dǎo)。注釋分序言性注釋和功能性注釋。 序言性注釋?xiě)?yīng)置于每個(gè)模塊的起始部分, 主要內(nèi)容有: 說(shuō)明每個(gè)模塊的用途、 功能。 說(shuō)明模塊的接口即調(diào)用形式、 參數(shù)描述及從屬模塊的清單。 數(shù)據(jù)描述: 指重要數(shù)據(jù)的名稱(chēng)、 用途、 限制、 約束及其他信息。 開(kāi)發(fā)歷史: 指設(shè)計(jì)者、 審閱者姓名及日期, 修改說(shuō)明及日期。 功能性注釋嵌入在源程序內(nèi)部,說(shuō)明程序段或語(yǔ)句的功能以及數(shù)據(jù)的狀態(tài)。注意以下幾點(diǎn): 注釋用來(lái)說(shuō)明程序段, 而不是每一行程序都要加注釋。 使用空行
21、或縮進(jìn)或括號(hào), 以便很容易區(qū)分注釋和程序。 修改程序也應(yīng)修改注釋。 2. 數(shù)據(jù)說(shuō)明數(shù)據(jù)說(shuō)明 為了使數(shù)據(jù)定義更易于理解和維護(hù),有以下指導(dǎo)原則: (1) 數(shù)據(jù)說(shuō)明順序應(yīng)規(guī)范,使數(shù)據(jù)的屬性更易于查找, 從而有利于測(cè)試、糾錯(cuò)與維護(hù)。例如按常量說(shuō)明、類(lèi)型說(shuō)明、 全程量說(shuō)明及局部量說(shuō)明順序。 (2) 一個(gè)語(yǔ)句說(shuō)明多個(gè)變量時(shí), 各變量名按字典序排列。 (3) 對(duì)于復(fù)雜的數(shù)據(jù)結(jié)構(gòu), 要加注釋?zhuān)?說(shuō)明在程序?qū)崿F(xiàn)時(shí)的特點(diǎn)。 3. 語(yǔ)句構(gòu)造語(yǔ)句構(gòu)造 語(yǔ)句構(gòu)造的原則為:簡(jiǎn)單直接,不能為了追求效率而使代碼復(fù)雜化。為了便于閱讀和理解,不要一行多個(gè)語(yǔ)句。不同層次的語(yǔ)句采用縮進(jìn)形式,使程序的邏輯結(jié)構(gòu)和功能特征更加清晰。 要避
22、免復(fù)雜的判定條件,避免多重的循環(huán)嵌套。表達(dá)式中使用括號(hào)以提高運(yùn)算次序的清晰度等。 4. 輸入和輸出輸入和輸出 在編寫(xiě)輸入和輸出程序時(shí)考慮以下原則: (1) 輸入操作步驟和輸入格式盡量簡(jiǎn)單。 (2) 應(yīng)檢查輸入數(shù)據(jù)的合法性、 有效性, 報(bào)告必要的輸入狀態(tài)信息及錯(cuò)誤信息。 (3) 輸入一批數(shù)據(jù)時(shí), 使用數(shù)據(jù)或文件結(jié)束標(biāo)志, 而不要用計(jì)數(shù)來(lái)控制。 (4) 交互式輸入時(shí), 提供可用的選擇和邊界值。 (5) 當(dāng)程序設(shè)計(jì)語(yǔ)言有嚴(yán)格的格式要求時(shí), 應(yīng)保持輸入格式的一致性。 (6) 輸出數(shù)據(jù)表格化、 圖形化。 輸入、 輸出風(fēng)格還受其他因素的影響, 如輸入、 輸出設(shè)備,用戶(hù)經(jīng)驗(yàn)及通信環(huán)境等。5. 效率效率 效率
23、指處理機(jī)時(shí)間和存儲(chǔ)空間的使用, 對(duì)效率的追求明確以下幾點(diǎn): (1)效率是一個(gè)性能要求, 目標(biāo)在需求分析給出。 (2) 追求效率建立在不損害程序可讀性或可靠性基礎(chǔ)之上, 要先使程序正確,再提高程序效率;先使程序清晰,再提高程序效率。 (3) 提高程序效率的根本途徑在于選擇良好的設(shè)計(jì)方法、 良好的數(shù)據(jù)結(jié)構(gòu)與算法,而不是靠編程時(shí)對(duì)程序語(yǔ)句做調(diào)整。 總之,在編碼階段,要善于積累編程經(jīng)驗(yàn),培養(yǎng)和學(xué)習(xí)良好的編程風(fēng)格,使編出的程序清晰易懂,易于測(cè)試與維護(hù), 從而提高軟件的質(zhì)量。6.3 程序設(shè)計(jì)方法程序設(shè)計(jì)方法6.3.1 關(guān)于關(guān)于GOTO語(yǔ)句的爭(zhēng)論語(yǔ)句的爭(zhēng)論 早在1963年,針對(duì)當(dāng)時(shí)流行的ALGOL語(yǔ)言,Pe
24、ter Naur指出,在程序中大量地、沒(méi)有節(jié)制地使用GOTO語(yǔ)句,會(huì)使程序結(jié)構(gòu)變得非?;靵y。但是很多人還不太注意這一問(wèn)題,以至于許多人寫(xiě)出來(lái)的程序仍然是紛亂如麻的。1965年,在一次會(huì)議上提出,應(yīng)當(dāng)把GOTO語(yǔ)句從高級(jí)語(yǔ)言中取消,并提出,程序的質(zhì)量于程序中包含的GOTO語(yǔ)句的數(shù)量成反比。在這種思想的影響下,當(dāng)時(shí)新開(kāi)發(fā)的幾種高級(jí)程序設(shè)計(jì)語(yǔ)言都取消了GOTO語(yǔ)句。1966年,Bohm與Jacopini證明了任何單入口單出口的沒(méi)有“死循環(huán)”的程序都能由三種最基本的控制結(jié)構(gòu)構(gòu)造出來(lái)。 1968年,Dijkstra在寫(xiě)給雜志編輯部的信中再次建議從一切高級(jí)語(yǔ)言中取消GOTO語(yǔ)句,只使用三種基本控制結(jié)構(gòu)編寫(xiě)
25、程序。他的建議引起了激烈爭(zhēng)論。爭(zhēng)論集中在如何看待GOTO語(yǔ)句的問(wèn)題上。贊成取消GOTO語(yǔ)句的一方認(rèn)為,GOTO語(yǔ)句對(duì)程序清晰性有很大破壞作用,凡是使用GOTO語(yǔ)句多的程序,其控制流時(shí)而GOTO向前,時(shí)而GOTO向后,常常使程序變得很難理解,從而增加差錯(cuò)和維護(hù)的困難,降低程序的可維護(hù)性。但另一方認(rèn)為,GOTO語(yǔ)句雖然存在著破壞程序清晰性的問(wèn)題,但不應(yīng)完全禁止。因?yàn)镚OTO語(yǔ)句概念簡(jiǎn)單,使用方便,在某些情況下,保留GOTO語(yǔ)句反能使寫(xiě)出的程序更加簡(jiǎn)潔,并且GOTO語(yǔ)句可直接得到硬件指令的支持。 經(jīng)過(guò)爭(zhēng)論,人們認(rèn)識(shí)到,不是簡(jiǎn)單的去掉GOTO語(yǔ)句的問(wèn)題,而是要?jiǎng)?chuàng)立一種新的程序設(shè)計(jì)思想、方法和風(fēng)格,以顯
26、著提高軟件生產(chǎn)率和軟件質(zhì)量,降低軟件維護(hù)的成本。6.3.2 結(jié)構(gòu)化程序設(shè)計(jì)的原則結(jié)構(gòu)化程序設(shè)計(jì)的原則 綜合在圍繞GOTO語(yǔ)句的爭(zhēng)論中眾多學(xué)者的意見(jiàn),對(duì)結(jié)構(gòu)化程序設(shè)計(jì)的概念逐漸清晰起來(lái)。其主要的原則有:使用語(yǔ)言中的順序、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序邏輯。選用的控制結(jié)構(gòu)只準(zhǔn)許有一個(gè)入口和一個(gè)出口。程序語(yǔ)句組成容易識(shí)別的塊(Block),每塊只有一個(gè)入口和一個(gè)出口。復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)進(jìn)行組合嵌套來(lái)實(shí)現(xiàn)。語(yǔ)言中沒(méi)有的控制結(jié)構(gòu),可用一段等價(jià)的程序段模擬,但要求該程序段在整個(gè)系統(tǒng)中應(yīng)前后一致。嚴(yán)格控制GOTO語(yǔ)句,僅在下列情形才可使用:用一個(gè)非結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言去實(shí)現(xiàn)一個(gè)結(jié)構(gòu)化的構(gòu)造。
27、在某種可以改善而不是損害程序可讀性的情況下。例:設(shè)在閉區(qū)間a.b上函數(shù)F(X)有唯一的一個(gè)零點(diǎn),如圖所示。下面給出一個(gè)用C語(yǔ)言寫(xiě)出的程序段,用二分法求方程F(X)0在區(qū)間a.b中的根。程序段中X0、X1是當(dāng)前求根區(qū)間X0.X1的下上界,Xm是該區(qū)間的中點(diǎn),eps是一個(gè)給定的很小正數(shù),用于迭代收斂的判斷。在程序上采取了用goto語(yǔ)句和標(biāo)號(hào)finish控制在循環(huán)中途轉(zhuǎn)出循環(huán)。程序段程序段1這類(lèi)循環(huán)結(jié)構(gòu)出現(xiàn)了兩個(gè)循環(huán)出口。一個(gè)是for循環(huán)的正常出口:當(dāng)循環(huán)控制變量i超出了循環(huán)終值n時(shí)退出循環(huán);另一個(gè)是for循環(huán)的非正常出口:當(dāng)某種條件滿(mǎn)足時(shí),從循環(huán)中間某處轉(zhuǎn)出循環(huán),執(zhí)行循環(huán)后面的語(yǔ)句。它不滿(mǎn)足結(jié)構(gòu)化
28、的要求。作為對(duì)照,再看下面的兩個(gè)程序段: 這段程序仍然不是結(jié)構(gòu)化的程序,利用了C語(yǔ)言中的一個(gè)語(yǔ)句break,它的功能是將控制轉(zhuǎn)移到它所在循環(huán)的后面第一個(gè)后續(xù)語(yǔ)句處。它與【程序段1】完成的工作相同,由于將轉(zhuǎn)移語(yǔ)句與轉(zhuǎn)出條件的判斷直接聯(lián)系在一起,可讀性較好。再看【程序段3】,它利用了一個(gè)布爾變量finished,該變量的初值為false,當(dāng)循環(huán)中求到了要求的結(jié)果時(shí),將此變量的值改變?yōu)閠rue,表示循環(huán)應(yīng)結(jié)束,while循環(huán)測(cè)試到finished為true,就自動(dòng)退出循環(huán),執(zhí)行后續(xù)的語(yǔ)句。此程序段中各種結(jié)構(gòu)均為單入口與單出口,且沒(méi)有GOTO語(yǔ)句,可以說(shuō)它是一個(gè)結(jié)構(gòu)化程序。它的結(jié)構(gòu)很簡(jiǎn)單,只有一重循環(huán)
29、,但由于引入一個(gè)布爾變量來(lái)控制循環(huán)結(jié)束,可讀性比【程序段1】與【程序段2】要差。在只有一重循環(huán)的情形,差的程度還不很明顯,在多重循環(huán)的情形,引入多個(gè)布爾變量,可讀性就很差了。理解程序的時(shí)間差幾倍到幾十倍不止。因此,對(duì)于這種單入口多出口的循環(huán),用GOTO可以得到較好的清晰性。6.3.3 程序設(shè)計(jì)自頂向下,逐步求精程序設(shè)計(jì)自頂向下,逐步求精 關(guān)于逐步細(xì)化的方法,曾做過(guò)如下說(shuō)明:“我們對(duì)付一個(gè)復(fù)雜問(wèn)題的最重要的方法就是抽象。因此,對(duì)于一個(gè)復(fù)雜的問(wèn)題,不要基于馬上用計(jì)算機(jī)指令、數(shù)字和邏輯符號(hào)來(lái)表示它,而應(yīng)當(dāng)先用較自然的抽象的語(yǔ)句來(lái)表示,從而得到抽象的程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)類(lèi)型進(jìn)行某些特定的運(yùn)算,并
30、用一些合適的記號(hào)(可以是自然語(yǔ)言)來(lái)表示。下一步對(duì)抽象程序再做分解,進(jìn)入下一個(gè)抽象的層次。這樣的細(xì)化過(guò)程一直進(jìn)行下去,直到程序能被計(jì)算機(jī)接受為止。此時(shí)的程序已經(jīng)用某種高級(jí)語(yǔ)言或及其指令書(shū)寫(xiě)的了?!?例如,要求用篩選法求100以?xún)?nèi)的素?cái)?shù)。篩選法就是從2到100中去掉2,3,9,10的倍數(shù),剩下的就是100以?xún)?nèi)的素?cái)?shù)。 為了解決這個(gè)問(wèn)題,可先按程序功能寫(xiě)出一個(gè)框架。上述框架中每一個(gè)加工語(yǔ)句都可進(jìn)一步細(xì)化成一個(gè)循環(huán)語(yǔ)句。 下一步繼續(xù)對(duì)和細(xì)化下去,直到最后每一個(gè)語(yǔ)句都能直接用程序設(shè)計(jì)語(yǔ)言來(lái)表示為止。6.3.3 語(yǔ)句結(jié)構(gòu)語(yǔ)句結(jié)構(gòu) 在設(shè)計(jì)階段確定了軟件的邏輯結(jié)構(gòu),但構(gòu)造單個(gè)語(yǔ)句則是編碼階段的任務(wù)。語(yǔ)句構(gòu)造
31、力求簡(jiǎn)單,直接,不能為了片面追求效率而使語(yǔ)句復(fù)雜化。(1)在一行內(nèi)只寫(xiě)一條語(yǔ)句,并采取適當(dāng)?shù)目s進(jìn)格式,使程序的邏輯和功能變得更加明確。例如,許多程序設(shè)計(jì)語(yǔ)言允許在一行內(nèi)寫(xiě)多條語(yǔ)句,但這種方式會(huì)使程序的可讀性變得很差。例如有一段排序程序如下: 上例程序由于一行中包括了多個(gè)語(yǔ)句,掩蓋了程序的循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu),使其可讀性變得很差,這里,將此程序段改成如下形式:(2)程序編寫(xiě)應(yīng)首先考慮清晰性,不要可以追求技巧性,使程序編寫(xiě)得過(guò)于緊湊。隨著硬件技術(shù)的發(fā)展,軟件人員的開(kāi)發(fā)環(huán)境越來(lái)越優(yōu)越,在大容量和高速度的條件下,開(kāi)發(fā)人員不必在程序中精心設(shè)置技巧。與此相反,軟件工程技術(shù)要求軟件生產(chǎn)工程化、規(guī)范化,為了提高程序的可讀性,減少出錯(cuò)的可能性,提高測(cè)試和維護(hù)的效率,要求把程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 局衛(wèi)生管理工作制度匯編
- 街道辦環(huán)境衛(wèi)生管理制度
- 醫(yī)療衛(wèi)生室管理制度
- 街道各衛(wèi)生管理制度
- 怎樣水衛(wèi)生管理制度
- 衛(wèi)生院老年病科管理制度
- 衛(wèi)生院平安建設(shè)制度
- 衛(wèi)生室冷藏藥品制度
- 衛(wèi)生院完整規(guī)章制度
- 衛(wèi)生院藥房工作管理制度
- 十年(2016-2025年)高考數(shù)學(xué)真題分類(lèi)匯編:專(zhuān)題26 導(dǎo)數(shù)及其應(yīng)用解答題(原卷版)
- 2025年江蘇省常熟市中考物理試卷及答案詳解(名校卷)
- 靜脈輸液巡視制度課件
- 旅游景區(qū)商戶(hù)管理辦法
- 2025年甘肅省中考物理、化學(xué)綜合試卷真題(含標(biāo)準(zhǔn)答案)
- DLT5210.1-2021電力建設(shè)施工質(zhì)量驗(yàn)收規(guī)程第1部分-土建工程
- 機(jī)械設(shè)備租賃服務(wù)方案
- 樂(lè)理考試古今音樂(lè)對(duì)比試題及答案
- 電影放映年度自查報(bào)告
- 水泥窯協(xié)同處置危廢可行性研究報(bào)告
- 心內(nèi)介入治療護(hù)理
評(píng)論
0/150
提交評(píng)論