軟件工程第11章課件_第1頁(yè)
軟件工程第11章課件_第2頁(yè)
軟件工程第11章課件_第3頁(yè)
軟件工程第11章課件_第4頁(yè)
軟件工程第11章課件_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第11章 程序設(shè)計(jì)語(yǔ)言與編碼編碼——以詳細(xì)設(shè)計(jì)說(shuō)明書(shū)為輸入,將該輸入用某種程序設(shè)計(jì)語(yǔ)言翻譯成計(jì)算機(jī)可以理解并最終可運(yùn)行的代碼的過(guò)程。本章介紹程序設(shè)計(jì)語(yǔ)言的特點(diǎn)、發(fā)展和分類(lèi)、開(kāi)發(fā)時(shí)選擇程序設(shè)計(jì)語(yǔ)言的標(biāo)準(zhǔn)、編程質(zhì)量與程序設(shè)計(jì)語(yǔ)言的關(guān)系、編程標(biāo)準(zhǔn)和編程風(fēng)格,最后簡(jiǎn)單介紹目前程序設(shè)計(jì)的支持環(huán)境。第11章 程序設(shè)計(jì)語(yǔ)言與編碼編碼——以詳細(xì)設(shè)計(jì)說(shuō)明書(shū)為輸入,111.1程序設(shè)計(jì)語(yǔ)言

11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)

語(yǔ)言的幾種特性。1)一致性(Uniformity)指語(yǔ)言中采用的標(biāo)記(Token)法協(xié)調(diào)一致的程度。例如“”在C語(yǔ)言中即可以在聲明中表示其后的變量為指針變量,又可作間接訪問(wèn)運(yùn)算符,還可以作乘法運(yùn)算符,這種“一詞多用”、一致性不好的語(yǔ)言程序不僅可讀性差,而且在編寫(xiě)程序的過(guò)程中容易出錯(cuò)。11.1程序設(shè)計(jì)語(yǔ)言

11.1.1程序設(shè)計(jì)語(yǔ)言的特211.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。2)二義性(ambiguity)語(yǔ)言的二義性是指語(yǔ)言是否允許使用具有二義性的語(yǔ)句。允許使用二義性語(yǔ)句的語(yǔ)言在可理解性和可修改性上都要差一些。11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。311.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。3)緊致性(compactness)緊致性是指程序員寫(xiě)程序時(shí)必須記憶的關(guān)于語(yǔ)言的信息總量。決定緊致性的指標(biāo)包括:①語(yǔ)言對(duì)結(jié)構(gòu)化的支持程度。②關(guān)鍵字及操作符的數(shù)目,顯然關(guān)鍵字和操作符的數(shù)目越多,則緊致性越差。③標(biāo)準(zhǔn)函數(shù)的個(gè)數(shù)及復(fù)雜程度。通常緊致性和一致性是矛盾的。在選擇程序語(yǔ)言時(shí),必須在這兩者之間找到平衡點(diǎn)。11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。411.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。4)局部性(locality)局部性是指語(yǔ)言的模塊化和信息隱藏特性。一個(gè)局部性差的語(yǔ)言必然會(huì)導(dǎo)致程序的復(fù)雜性增加。比如,一種不具有塊機(jī)制的語(yǔ)言,那么信息的作用域必然是全局的,程序的走向也是全局的,從而導(dǎo)致程序的復(fù)雜性增加,可讀性、可修改性和可維護(hù)性都會(huì)相應(yīng)降低。11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。5程序設(shè)計(jì)語(yǔ)言其他連帶的特性:1)將設(shè)計(jì)翻譯成代碼的難易程度設(shè)計(jì)階段的輸出是編碼階段的輸入,因此以設(shè)計(jì)說(shuō)明書(shū)為輸入編寫(xiě)代碼時(shí)程序語(yǔ)言對(duì)設(shè)計(jì)概念的支持程度就決定了翻譯過(guò)程的難易。如果在分析階段和設(shè)計(jì)階段采用的是面向?qū)ο蟮姆椒ǎ诰幋a階段采用的是面向過(guò)程的語(yǔ)言,那么這種翻譯就比較困難。程序設(shè)計(jì)語(yǔ)言其他連帶的特性:1)將設(shè)計(jì)翻譯成代碼的難易程度6程序設(shè)計(jì)語(yǔ)言其他連帶的特性:2)編譯器所生成代碼的效率對(duì)于實(shí)時(shí)或時(shí)間關(guān)鍵性的項(xiàng)目來(lái)說(shuō),除在設(shè)計(jì)和編碼時(shí)對(duì)效率進(jìn)行充分的考慮外,高效率的編譯器也是必須的。好的編譯器會(huì)對(duì)程序作最佳的性能優(yōu)化。不同語(yǔ)言生成的目標(biāo)系統(tǒng)的效率不同,即使是同一種語(yǔ)言,采用不同的編譯器,目標(biāo)系統(tǒng)的效率也會(huì)不同。程序設(shè)計(jì)語(yǔ)言其他連帶的特性:2)編譯器所生成代碼的效率7程序設(shè)計(jì)語(yǔ)言其他連帶的特性:3)源代碼的可移植性選擇一種可移植性強(qiáng)的語(yǔ)言可以為代碼的重用和項(xiàng)目的移植奠定好的基礎(chǔ)。源代碼的可移植性也是選擇開(kāi)發(fā)語(yǔ)言要考慮的因素。4)配套的開(kāi)發(fā)工具主流的語(yǔ)言都有良好的集成開(kāi)發(fā)環(huán)境(IDE)。其中不僅包括源代碼的編輯器、編譯和連接器、調(diào)試器,同時(shí)還包含配置管理工具、安裝部署工具以及代碼的轉(zhuǎn)換工具。程序設(shè)計(jì)語(yǔ)言其他連帶的特性:3)源代碼的可移植性811.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第一代:機(jī)器語(yǔ)言和匯編語(yǔ)言,也稱(chēng)為低級(jí)語(yǔ)言。第二代:第一代和第三代的過(guò)渡語(yǔ)言。這代語(yǔ)言是50年代末至60年代初出現(xiàn)的,這些語(yǔ)言應(yīng)用面廣,有大量成熟的程序庫(kù)。這代語(yǔ)言包括FORTRAN、COBOL、BASIC等。11.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第一代:機(jī)器語(yǔ)言和匯911.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第三代語(yǔ)言:高級(jí)語(yǔ)言。高級(jí)語(yǔ)言通常被分成三類(lèi):1)通用高級(jí)語(yǔ)言。Algol60,C、Pascal,PL/1,Modula-2和Ada等。2)面向?qū)ο蟮恼Z(yǔ)言,如C++、Java、Smalltalk等。3)專(zhuān)用語(yǔ)言,專(zhuān)用語(yǔ)言只用于特定的領(lǐng)域。LISP和Prolog適用于人工智能領(lǐng)域;APL是為數(shù)組和向量運(yùn)算設(shè)計(jì)的語(yǔ)言;而Forth則用于開(kāi)發(fā)微處理器軟件。專(zhuān)用語(yǔ)言可移植性和可維護(hù)性較差。11.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第三代語(yǔ)言:高級(jí)語(yǔ)言1011.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第四代語(yǔ)言(4GL)4GL還局限在某些領(lǐng)域內(nèi),如數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言。程序生成器代表了更為通用的一類(lèi)4GL,程序生成器可以將更為自然的語(yǔ)言描述翻譯成第三代語(yǔ)言程序,進(jìn)而更好地消除設(shè)計(jì)和代碼之間的語(yǔ)義斷層。11.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第四代語(yǔ)言(4GL)1111.1.3程序設(shè)計(jì)語(yǔ)言的選擇標(biāo)準(zhǔn)選擇語(yǔ)言時(shí)要考慮的因素:1)項(xiàng)目的應(yīng)用領(lǐng)域2)項(xiàng)目中算法和計(jì)算的復(fù)雜性3)項(xiàng)目中數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性4)用戶(hù)的性能需求5)軟件運(yùn)行的環(huán)境6)軟件開(kāi)發(fā)人員開(kāi)發(fā)水平。7)可用的編譯器和交叉編譯器。11.1.3程序設(shè)計(jì)語(yǔ)言的選擇標(biāo)準(zhǔn)選擇語(yǔ)言時(shí)要考慮的因素1211.2編程質(zhì)量與程序設(shè)計(jì)語(yǔ)言程序的可靠性、可維護(hù)性和效率通常由程序設(shè)計(jì)語(yǔ)言、源代碼的質(zhì)量、和語(yǔ)言的實(shí)現(xiàn)機(jī)制決定的。11.2.1程序設(shè)計(jì)語(yǔ)言與可靠性

程序設(shè)計(jì)語(yǔ)言的可靠性是指程序設(shè)計(jì)語(yǔ)言本身不出錯(cuò)或?qū)﹀e(cuò)誤的糾正能力。如:JAVA由于其拋棄了指針和動(dòng)態(tài)存儲(chǔ)分配等易于出錯(cuò)的語(yǔ)言特性。從而具有較高的可靠性。11.2編程質(zhì)量與程序設(shè)計(jì)語(yǔ)言程序的可靠性、可維護(hù)性和效1311.2.2程序設(shè)計(jì)語(yǔ)言與可維護(hù)性程序設(shè)計(jì)語(yǔ)言的可維護(hù)性通常指這種語(yǔ)言編寫(xiě)的程序被理解,被修改及調(diào)整和改進(jìn)的難易程度。程序設(shè)計(jì)語(yǔ)言的可維護(hù)性一般由下面幾個(gè)因素決定:①程序設(shè)計(jì)語(yǔ)言的一致性和緊致性一致性刻畫(huà)了語(yǔ)言標(biāo)記的語(yǔ)義單義性,因此一致性好的語(yǔ)言的可維護(hù)性要好于一致性差的語(yǔ)言。②程序設(shè)計(jì)語(yǔ)言的語(yǔ)法規(guī)則語(yǔ)法規(guī)則的嚴(yán)格程度也影響語(yǔ)言的可維護(hù)性和可讀性,語(yǔ)法要求嚴(yán)格的語(yǔ)言要比語(yǔ)法自由的語(yǔ)言的可維護(hù)性差些。因?yàn)樾薷暮屠斫庹Z(yǔ)法嚴(yán)格的語(yǔ)言要困難些。比如FORTRAN和Perl語(yǔ)言,其語(yǔ)法要求很?chē)?yán)格。因此其可維護(hù)性與C/C++等語(yǔ)法較自由的語(yǔ)言相比要差些。11.2.2程序設(shè)計(jì)語(yǔ)言與可維護(hù)性程序設(shè)計(jì)語(yǔ)言的可維護(hù)性1411.2.3程序設(shè)計(jì)語(yǔ)言與效率不同程序設(shè)計(jì)語(yǔ)言在程序的效率上的差異很大。程序設(shè)計(jì)語(yǔ)言的效率由下面因素決定:①程序設(shè)計(jì)語(yǔ)言的實(shí)現(xiàn)機(jī)制;解釋性程序(如解釋BASIC)和編譯成中間語(yǔ)言然后又解釋執(zhí)行的語(yǔ)言(如JAVA)的效率一般要遠(yuǎn)遠(yuǎn)低于編譯語(yǔ)言。②程序語(yǔ)言對(duì)系統(tǒng)底層的訪問(wèn)和控制能力;設(shè)計(jì)良好的低級(jí)語(yǔ)言程序效率最高。③編譯器的效率;11.2.3程序設(shè)計(jì)語(yǔ)言與效率不同程序設(shè)計(jì)語(yǔ)言在程序的效1511.3編程標(biāo)準(zhǔn)編碼的依據(jù)是詳細(xì)設(shè)計(jì)說(shuō)明書(shū)。編碼的任務(wù)就是按照詳細(xì)設(shè)計(jì)說(shuō)明的要求寫(xiě)出滿(mǎn)足要求的代碼。設(shè)計(jì)階段的成果基本上決定了系統(tǒng)的可修改性和可維護(hù)性。在編碼階段,遵循下述原則,將有助于編寫(xiě)清晰、緊湊、高效的程序。從而進(jìn)一步提高程序的可修改性、可維護(hù)性和可測(cè)試性。11.3編程標(biāo)準(zhǔn)編碼的依據(jù)是詳細(xì)設(shè)計(jì)說(shuō)明書(shū)。編碼的任務(wù)就16編碼原則1)編寫(xiě)易于修改和維護(hù)的代碼編碼階段,在設(shè)計(jì)基礎(chǔ)上對(duì)程序進(jìn)行進(jìn)一步的數(shù)據(jù)和操作的分離有利于代碼和數(shù)據(jù)的單獨(dú)改變。2)編寫(xiě)易于測(cè)試的代碼在編碼階段對(duì)代碼的可測(cè)試性進(jìn)行考慮可以減少測(cè)試階段的工作量。以條件編譯和注釋的方法融入源代碼中,是一種有效的增加代碼可測(cè)試性的手段。編碼原則1)編寫(xiě)易于修改和維護(hù)的代碼17編碼原則3)編寫(xiě)詳細(xì)的程序文檔程序文檔一般指以注釋的形式嵌入程序中的代碼描述。程序文檔應(yīng)該與程序保持高度一致。程序文檔應(yīng)該包括下列內(nèi)容①代碼的功能;②代碼的完成者;③代碼在整個(gè)軟件系統(tǒng)中的位置;④代碼編制、復(fù)審時(shí)間;⑤保留代碼的原因;⑥代碼中如何使用數(shù)據(jù)結(jié)構(gòu)和算法。編碼原則3)編寫(xiě)詳細(xì)的程序文檔18程序文檔的例子/************************************************Modualname:gameserverFunction:gameserverforrealtimegameinformationprocessAuthor:chejinhuiCreatedate:2003/11/12Platform:IA32,WindowsModifylist:2003/11/14line28">"shouldbe">="2003/11/15line29......***********************************************/程序文檔的例子/**********************19程序文檔的例子/*----------------------------------------------------------includestdio&socketlibarary-----------------------------------------------------------*/#include<iostream.h>#include<winsock2.h>

/*----------------------------------------------------------Globalvararea-----------------------------------------------------------*/

intiUserCount;程序文檔的例子/*---------------------20程序文檔的例子/*---------------------------------------------------InitializeSocketSubsysteminput:noneoutput:DLLinitializeresult0:faultother:success---------------------------------------------------*/程序文檔的例子/*---------------------21程序文檔的例子intInitSockInterface(){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(2,2);//startsocketsubsystemerr=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return0;}程序文檔的例子intInitSockInterface(22程序文檔的例子//seeifsocketversionmeetourrequest(mustbe2.2)if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){WSACleanup();return0;}}/*---thisistheendofprogramdocumentdemo---*/程序文檔的例子//seeifsocketversion23編碼原則4)編程中采用統(tǒng)一的標(biāo)準(zhǔn)和約定,降低程序的復(fù)雜性軟件組織通常會(huì)制定一份“編碼規(guī)范”,程序員在編寫(xiě)代碼時(shí)。必須嚴(yán)格按照“編碼規(guī)范”編寫(xiě)代碼。表13-1是軟件組織“編碼規(guī)范”的通用格式和內(nèi)容。編碼原則4)編程中采用統(tǒng)一的標(biāo)準(zhǔn)和約定,降低程序的復(fù)雜性24表13-1編碼規(guī)范規(guī)范項(xiàng)規(guī)范內(nèi)容1排版排版格式,如縮進(jìn)、塊語(yǔ)句、分行等2注釋規(guī)范注釋的格式3標(biāo)識(shí)符命名規(guī)范標(biāo)識(shí)符的命名規(guī)則4可讀性為提高可讀性所作的規(guī)范,如禁止使用技巧性高的語(yǔ)句5變量、結(jié)構(gòu)規(guī)范變量和結(jié)構(gòu)的定義,如禁止局部與全局變量同名等6函數(shù)、過(guò)程規(guī)范函數(shù)的定義,如“不要設(shè)計(jì)多用途面面俱到的函數(shù)”7可測(cè)性為提高可測(cè)性的規(guī)范,如“用斷言確認(rèn)函數(shù)的參數(shù)”等8程序效率為程序效率所作的規(guī)范,如“循環(huán)體內(nèi)工作量最小化”9質(zhì)量保證為提高軟件質(zhì)量所作的規(guī)范,如“防止內(nèi)存操作越界”表13-1編碼規(guī)范規(guī)范項(xiàng)規(guī)范內(nèi)容1排版排版格式,如縮進(jìn)25編碼原則5)分離功能獨(dú)立的代碼塊形成新的模塊將功能獨(dú)立的代碼塊獨(dú)立出來(lái)形成新的模塊,增加模塊的內(nèi)聚度,有利于代碼的重用和可修改性。編碼原則5)分離功能獨(dú)立的代碼塊形成新的模塊2611.4編程風(fēng)格不同的程序員可能具有不同的編程風(fēng)格,有時(shí)候很難說(shuō)哪種風(fēng)格好,哪種風(fēng)格不好,比如在分支語(yǔ)句之后的語(yǔ)句塊,一些程序員可能習(xí)慣這樣:if(a>b){.......}而另外的程序員喜歡這樣:if(a>b){......}11.4編程風(fēng)格不同的程序員可能具有不同的編程風(fēng)格,有時(shí)2711.4編程風(fēng)格一般的軟件組織允許程序員在不影響代碼的可讀性、可修改性、可測(cè)試性、可維護(hù)性的基礎(chǔ)上使用自己的風(fēng)格編寫(xiě)程序。但是有些規(guī)則則是所有程序員必須遵守的。11.4編程風(fēng)格一般的軟件組織允許程序員在不影響代碼的可28好的編程風(fēng)格應(yīng)遵循的規(guī)則1)節(jié)簡(jiǎn)化(economy)①不使用不必要的變量和函數(shù)②避免變量重名,變量重名可導(dǎo)致很難被發(fā)現(xiàn)的錯(cuò)誤。③盡量減小代碼量。④盡量減少代碼的執(zhí)行時(shí)間,提高執(zhí)行效率。⑤避免功能冗余的模塊。⑥盡量不使用全局變量。好的編程風(fēng)格應(yīng)遵循的規(guī)則1)節(jié)簡(jiǎn)化(economy)29好的編程風(fēng)格應(yīng)遵循的規(guī)則2)模塊化(Modularity)①確保物理和邏輯功能密切相關(guān)。②限定一個(gè)模塊完成一個(gè)獨(dú)立的功能,提高模塊的內(nèi)聚度。③檢查代碼的重復(fù)率,重復(fù)多的代碼,要抽出來(lái)作為一個(gè)單獨(dú)的模塊。好的編程風(fēng)格應(yīng)遵循的規(guī)則2)模塊化(Modularity)30好的編程風(fēng)格應(yīng)遵循的規(guī)則3)簡(jiǎn)單化(Simplicity)①采用直接了當(dāng)?shù)乃惴?,避免使用技巧性高和難懂的代碼。②使用簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),避免使用多維數(shù)組、指針和復(fù)雜的表。③注意對(duì)象命名的一致性。④以手工的方式簡(jiǎn)化算術(shù)和邏輯表達(dá)式。好的編程風(fēng)格應(yīng)遵循的規(guī)則3)簡(jiǎn)單化(Simplicity)31好的編程風(fēng)格應(yīng)遵循的規(guī)則4)結(jié)構(gòu)化①按標(biāo)準(zhǔn)化的次序說(shuō)明數(shù)據(jù);②按字母順序說(shuō)明對(duì)象名③使用讀者明了的結(jié)構(gòu)化程序部件;④采用直截了當(dāng)?shù)乃惴?;⑤根?jù)應(yīng)用背景排列程序各個(gè)部分;好的編程風(fēng)格應(yīng)遵循的規(guī)則4)結(jié)構(gòu)化32好的編程風(fēng)格應(yīng)遵循的規(guī)則4)結(jié)構(gòu)化(structure)⑥不隨意為效率而犧牲程序的清晰度和可讀性;⑦讓機(jī)器多做煩瑣的工作,如重復(fù)、庫(kù)函數(shù);⑧用公共函數(shù)調(diào)用代替重復(fù)出現(xiàn)的表達(dá)式;⑨避免循環(huán)、分支的嵌套層數(shù)過(guò)高;⑩單入口單出口。好的編程風(fēng)格應(yīng)遵循的規(guī)則4)結(jié)構(gòu)化(structure)33好的編程風(fēng)格應(yīng)遵循的規(guī)則5)文檔化(documentation)①有效、適當(dāng)?shù)厥褂米⑨尅"趨f(xié)調(diào)使用程序塊注釋和程序行注釋。③保持文檔和程序的同步。好的編程風(fēng)格應(yīng)遵循的規(guī)則5)文檔化(documentatio34好的編程風(fēng)格應(yīng)遵循的規(guī)則6)格式化(layout)①始終采用統(tǒng)一縮進(jìn)規(guī)則;②適當(dāng)插入括號(hào)表明運(yùn)算次序、排除二義性;③有效地使用空格符以區(qū)別程序的不同意群。好的編程風(fēng)格應(yīng)遵循的規(guī)則6)格式化(layout)3511.5程序設(shè)計(jì)支持環(huán)境(PSE)PSE,programmingsupportenvironment即編程所使用的集成開(kāi)發(fā)環(huán)境:IDE,integrateddevelopmentenvironmentPSE完成程序編輯、編譯、調(diào)試、配置管理、項(xiàng)目管理等一組任務(wù)。11.5程序設(shè)計(jì)支持環(huán)境(PSE)PSE,program3611.5程序設(shè)計(jì)支持環(huán)境(PSE)好的PSE應(yīng)該具有如下的特性:1)通用性。適用于不同的語(yǔ)言、不同的應(yīng)用領(lǐng)域和開(kāi)發(fā)方法。2)適應(yīng)性。通過(guò)設(shè)置,可以配置出滿(mǎn)足不同需要的PSE實(shí)例。3)開(kāi)放性。能方便的增加新工具。4)支持重用。能支持可重用組件的查詢(xún)、存儲(chǔ)和使用。11.5程序設(shè)計(jì)支持環(huán)境(PSE)好的PSE應(yīng)該具有如下3711.5程序設(shè)計(jì)支持環(huán)境(PSE)5)自控性。保證自身操作的正確性和協(xié)調(diào)。6)自帶數(shù)據(jù)庫(kù)。提供數(shù)據(jù)庫(kù)用于管理已開(kāi)發(fā)軟件產(chǎn)品7)保證質(zhì)量。有助于提高所開(kāi)發(fā)軟件的質(zhì)量。8)吸引用戶(hù)。用戶(hù)愿意使用。9)有競(jìng)爭(zhēng)力。PSE能真正提高軟件的生產(chǎn)率。11.5程序設(shè)計(jì)支持環(huán)境(PSE)5)自控性。保證自身操38微軟的VS.Net微軟的VS.Net集成了上述全部的特性,該環(huán)境不僅包含了開(kāi)發(fā)軟件所需的全部工具,還包括項(xiàng)目安裝部署工具。通用性:VS.Net可以使用的語(yǔ)言包括C/C++,C#VB.Net等,它不僅支持面向?qū)ο蟮拈_(kāi)發(fā)方法,也支持面向過(guò)程的開(kāi)發(fā)方法。如圖13-5-1所示。微軟的VS.Net微軟的VS.Net集成了上述全部的特性,該39圖13-5-1VS.Net的通用性圖13-5-1VS.Net的通用性40適應(yīng)性:VS.Net可提供多種界面和操作風(fēng)格以迎合具有不同編程背景的程序員。圖13-5-2VS.Net的適應(yīng)性適應(yīng)性:VS.Net可提供多種界面和操作風(fēng)格以迎合具有不41開(kāi)放性:VS.Net提供了開(kāi)放工具的方法圖13-5-3VS.Net的開(kāi)放性開(kāi)放性:VS.Net提供了開(kāi)放工具的方法圖13-5-342支持重用:VS.Net對(duì)組件的操作提供了完全的支持圖13-5-4VS.Net的支持重用開(kāi)放性支持重用:VS.Net對(duì)組件的操作提供了完全的支持圖1343第11章 程序設(shè)計(jì)語(yǔ)言與編碼編碼——以詳細(xì)設(shè)計(jì)說(shuō)明書(shū)為輸入,將該輸入用某種程序設(shè)計(jì)語(yǔ)言翻譯成計(jì)算機(jī)可以理解并最終可運(yùn)行的代碼的過(guò)程。本章介紹程序設(shè)計(jì)語(yǔ)言的特點(diǎn)、發(fā)展和分類(lèi)、開(kāi)發(fā)時(shí)選擇程序設(shè)計(jì)語(yǔ)言的標(biāo)準(zhǔn)、編程質(zhì)量與程序設(shè)計(jì)語(yǔ)言的關(guān)系、編程標(biāo)準(zhǔn)和編程風(fēng)格,最后簡(jiǎn)單介紹目前程序設(shè)計(jì)的支持環(huán)境。第11章 程序設(shè)計(jì)語(yǔ)言與編碼編碼——以詳細(xì)設(shè)計(jì)說(shuō)明書(shū)為輸入,4411.1程序設(shè)計(jì)語(yǔ)言

11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)

語(yǔ)言的幾種特性。1)一致性(Uniformity)指語(yǔ)言中采用的標(biāo)記(Token)法協(xié)調(diào)一致的程度。例如“”在C語(yǔ)言中即可以在聲明中表示其后的變量為指針變量,又可作間接訪問(wèn)運(yùn)算符,還可以作乘法運(yùn)算符,這種“一詞多用”、一致性不好的語(yǔ)言程序不僅可讀性差,而且在編寫(xiě)程序的過(guò)程中容易出錯(cuò)。11.1程序設(shè)計(jì)語(yǔ)言

11.1.1程序設(shè)計(jì)語(yǔ)言的特4511.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。2)二義性(ambiguity)語(yǔ)言的二義性是指語(yǔ)言是否允許使用具有二義性的語(yǔ)句。允許使用二義性語(yǔ)句的語(yǔ)言在可理解性和可修改性上都要差一些。11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。4611.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。3)緊致性(compactness)緊致性是指程序員寫(xiě)程序時(shí)必須記憶的關(guān)于語(yǔ)言的信息總量。決定緊致性的指標(biāo)包括:①語(yǔ)言對(duì)結(jié)構(gòu)化的支持程度。②關(guān)鍵字及操作符的數(shù)目,顯然關(guān)鍵字和操作符的數(shù)目越多,則緊致性越差。③標(biāo)準(zhǔn)函數(shù)的個(gè)數(shù)及復(fù)雜程度。通常緊致性和一致性是矛盾的。在選擇程序語(yǔ)言時(shí),必須在這兩者之間找到平衡點(diǎn)。11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。4711.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。4)局部性(locality)局部性是指語(yǔ)言的模塊化和信息隱藏特性。一個(gè)局部性差的語(yǔ)言必然會(huì)導(dǎo)致程序的復(fù)雜性增加。比如,一種不具有塊機(jī)制的語(yǔ)言,那么信息的作用域必然是全局的,程序的走向也是全局的,從而導(dǎo)致程序的復(fù)雜性增加,可讀性、可修改性和可維護(hù)性都會(huì)相應(yīng)降低。11.1.1程序設(shè)計(jì)語(yǔ)言的特點(diǎn)語(yǔ)言的幾種特性。48程序設(shè)計(jì)語(yǔ)言其他連帶的特性:1)將設(shè)計(jì)翻譯成代碼的難易程度設(shè)計(jì)階段的輸出是編碼階段的輸入,因此以設(shè)計(jì)說(shuō)明書(shū)為輸入編寫(xiě)代碼時(shí)程序語(yǔ)言對(duì)設(shè)計(jì)概念的支持程度就決定了翻譯過(guò)程的難易。如果在分析階段和設(shè)計(jì)階段采用的是面向?qū)ο蟮姆椒?,而在編碼階段采用的是面向過(guò)程的語(yǔ)言,那么這種翻譯就比較困難。程序設(shè)計(jì)語(yǔ)言其他連帶的特性:1)將設(shè)計(jì)翻譯成代碼的難易程度49程序設(shè)計(jì)語(yǔ)言其他連帶的特性:2)編譯器所生成代碼的效率對(duì)于實(shí)時(shí)或時(shí)間關(guān)鍵性的項(xiàng)目來(lái)說(shuō),除在設(shè)計(jì)和編碼時(shí)對(duì)效率進(jìn)行充分的考慮外,高效率的編譯器也是必須的。好的編譯器會(huì)對(duì)程序作最佳的性能優(yōu)化。不同語(yǔ)言生成的目標(biāo)系統(tǒng)的效率不同,即使是同一種語(yǔ)言,采用不同的編譯器,目標(biāo)系統(tǒng)的效率也會(huì)不同。程序設(shè)計(jì)語(yǔ)言其他連帶的特性:2)編譯器所生成代碼的效率50程序設(shè)計(jì)語(yǔ)言其他連帶的特性:3)源代碼的可移植性選擇一種可移植性強(qiáng)的語(yǔ)言可以為代碼的重用和項(xiàng)目的移植奠定好的基礎(chǔ)。源代碼的可移植性也是選擇開(kāi)發(fā)語(yǔ)言要考慮的因素。4)配套的開(kāi)發(fā)工具主流的語(yǔ)言都有良好的集成開(kāi)發(fā)環(huán)境(IDE)。其中不僅包括源代碼的編輯器、編譯和連接器、調(diào)試器,同時(shí)還包含配置管理工具、安裝部署工具以及代碼的轉(zhuǎn)換工具。程序設(shè)計(jì)語(yǔ)言其他連帶的特性:3)源代碼的可移植性5111.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第一代:機(jī)器語(yǔ)言和匯編語(yǔ)言,也稱(chēng)為低級(jí)語(yǔ)言。第二代:第一代和第三代的過(guò)渡語(yǔ)言。這代語(yǔ)言是50年代末至60年代初出現(xiàn)的,這些語(yǔ)言應(yīng)用面廣,有大量成熟的程序庫(kù)。這代語(yǔ)言包括FORTRAN、COBOL、BASIC等。11.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第一代:機(jī)器語(yǔ)言和匯5211.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第三代語(yǔ)言:高級(jí)語(yǔ)言。高級(jí)語(yǔ)言通常被分成三類(lèi):1)通用高級(jí)語(yǔ)言。Algol60,C、Pascal,PL/1,Modula-2和Ada等。2)面向?qū)ο蟮恼Z(yǔ)言,如C++、Java、Smalltalk等。3)專(zhuān)用語(yǔ)言,專(zhuān)用語(yǔ)言只用于特定的領(lǐng)域。LISP和Prolog適用于人工智能領(lǐng)域;APL是為數(shù)組和向量運(yùn)算設(shè)計(jì)的語(yǔ)言;而Forth則用于開(kāi)發(fā)微處理器軟件。專(zhuān)用語(yǔ)言可移植性和可維護(hù)性較差。11.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第三代語(yǔ)言:高級(jí)語(yǔ)言5311.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第四代語(yǔ)言(4GL)4GL還局限在某些領(lǐng)域內(nèi),如數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言。程序生成器代表了更為通用的一類(lèi)4GL,程序生成器可以將更為自然的語(yǔ)言描述翻譯成第三代語(yǔ)言程序,進(jìn)而更好地消除設(shè)計(jì)和代碼之間的語(yǔ)義斷層。11.1.2程序設(shè)計(jì)語(yǔ)言的發(fā)展和分類(lèi)第四代語(yǔ)言(4GL)5411.1.3程序設(shè)計(jì)語(yǔ)言的選擇標(biāo)準(zhǔn)選擇語(yǔ)言時(shí)要考慮的因素:1)項(xiàng)目的應(yīng)用領(lǐng)域2)項(xiàng)目中算法和計(jì)算的復(fù)雜性3)項(xiàng)目中數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性4)用戶(hù)的性能需求5)軟件運(yùn)行的環(huán)境6)軟件開(kāi)發(fā)人員開(kāi)發(fā)水平。7)可用的編譯器和交叉編譯器。11.1.3程序設(shè)計(jì)語(yǔ)言的選擇標(biāo)準(zhǔn)選擇語(yǔ)言時(shí)要考慮的因素5511.2編程質(zhì)量與程序設(shè)計(jì)語(yǔ)言程序的可靠性、可維護(hù)性和效率通常由程序設(shè)計(jì)語(yǔ)言、源代碼的質(zhì)量、和語(yǔ)言的實(shí)現(xiàn)機(jī)制決定的。11.2.1程序設(shè)計(jì)語(yǔ)言與可靠性

程序設(shè)計(jì)語(yǔ)言的可靠性是指程序設(shè)計(jì)語(yǔ)言本身不出錯(cuò)或?qū)﹀e(cuò)誤的糾正能力。如:JAVA由于其拋棄了指針和動(dòng)態(tài)存儲(chǔ)分配等易于出錯(cuò)的語(yǔ)言特性。從而具有較高的可靠性。11.2編程質(zhì)量與程序設(shè)計(jì)語(yǔ)言程序的可靠性、可維護(hù)性和效5611.2.2程序設(shè)計(jì)語(yǔ)言與可維護(hù)性程序設(shè)計(jì)語(yǔ)言的可維護(hù)性通常指這種語(yǔ)言編寫(xiě)的程序被理解,被修改及調(diào)整和改進(jìn)的難易程度。程序設(shè)計(jì)語(yǔ)言的可維護(hù)性一般由下面幾個(gè)因素決定:①程序設(shè)計(jì)語(yǔ)言的一致性和緊致性一致性刻畫(huà)了語(yǔ)言標(biāo)記的語(yǔ)義單義性,因此一致性好的語(yǔ)言的可維護(hù)性要好于一致性差的語(yǔ)言。②程序設(shè)計(jì)語(yǔ)言的語(yǔ)法規(guī)則語(yǔ)法規(guī)則的嚴(yán)格程度也影響語(yǔ)言的可維護(hù)性和可讀性,語(yǔ)法要求嚴(yán)格的語(yǔ)言要比語(yǔ)法自由的語(yǔ)言的可維護(hù)性差些。因?yàn)樾薷暮屠斫庹Z(yǔ)法嚴(yán)格的語(yǔ)言要困難些。比如FORTRAN和Perl語(yǔ)言,其語(yǔ)法要求很?chē)?yán)格。因此其可維護(hù)性與C/C++等語(yǔ)法較自由的語(yǔ)言相比要差些。11.2.2程序設(shè)計(jì)語(yǔ)言與可維護(hù)性程序設(shè)計(jì)語(yǔ)言的可維護(hù)性5711.2.3程序設(shè)計(jì)語(yǔ)言與效率不同程序設(shè)計(jì)語(yǔ)言在程序的效率上的差異很大。程序設(shè)計(jì)語(yǔ)言的效率由下面因素決定:①程序設(shè)計(jì)語(yǔ)言的實(shí)現(xiàn)機(jī)制;解釋性程序(如解釋BASIC)和編譯成中間語(yǔ)言然后又解釋執(zhí)行的語(yǔ)言(如JAVA)的效率一般要遠(yuǎn)遠(yuǎn)低于編譯語(yǔ)言。②程序語(yǔ)言對(duì)系統(tǒng)底層的訪問(wèn)和控制能力;設(shè)計(jì)良好的低級(jí)語(yǔ)言程序效率最高。③編譯器的效率;11.2.3程序設(shè)計(jì)語(yǔ)言與效率不同程序設(shè)計(jì)語(yǔ)言在程序的效5811.3編程標(biāo)準(zhǔn)編碼的依據(jù)是詳細(xì)設(shè)計(jì)說(shuō)明書(shū)。編碼的任務(wù)就是按照詳細(xì)設(shè)計(jì)說(shuō)明的要求寫(xiě)出滿(mǎn)足要求的代碼。設(shè)計(jì)階段的成果基本上決定了系統(tǒng)的可修改性和可維護(hù)性。在編碼階段,遵循下述原則,將有助于編寫(xiě)清晰、緊湊、高效的程序。從而進(jìn)一步提高程序的可修改性、可維護(hù)性和可測(cè)試性。11.3編程標(biāo)準(zhǔn)編碼的依據(jù)是詳細(xì)設(shè)計(jì)說(shuō)明書(shū)。編碼的任務(wù)就59編碼原則1)編寫(xiě)易于修改和維護(hù)的代碼編碼階段,在設(shè)計(jì)基礎(chǔ)上對(duì)程序進(jìn)行進(jìn)一步的數(shù)據(jù)和操作的分離有利于代碼和數(shù)據(jù)的單獨(dú)改變。2)編寫(xiě)易于測(cè)試的代碼在編碼階段對(duì)代碼的可測(cè)試性進(jìn)行考慮可以減少測(cè)試階段的工作量。以條件編譯和注釋的方法融入源代碼中,是一種有效的增加代碼可測(cè)試性的手段。編碼原則1)編寫(xiě)易于修改和維護(hù)的代碼60編碼原則3)編寫(xiě)詳細(xì)的程序文檔程序文檔一般指以注釋的形式嵌入程序中的代碼描述。程序文檔應(yīng)該與程序保持高度一致。程序文檔應(yīng)該包括下列內(nèi)容①代碼的功能;②代碼的完成者;③代碼在整個(gè)軟件系統(tǒng)中的位置;④代碼編制、復(fù)審時(shí)間;⑤保留代碼的原因;⑥代碼中如何使用數(shù)據(jù)結(jié)構(gòu)和算法。編碼原則3)編寫(xiě)詳細(xì)的程序文檔61程序文檔的例子/************************************************Modualname:gameserverFunction:gameserverforrealtimegameinformationprocessAuthor:chejinhuiCreatedate:2003/11/12Platform:IA32,WindowsModifylist:2003/11/14line28">"shouldbe">="2003/11/15line29......***********************************************/程序文檔的例子/**********************62程序文檔的例子/*----------------------------------------------------------includestdio&socketlibarary-----------------------------------------------------------*/#include<iostream.h>#include<winsock2.h>

/*----------------------------------------------------------Globalvararea-----------------------------------------------------------*/

intiUserCount;程序文檔的例子/*---------------------63程序文檔的例子/*---------------------------------------------------InitializeSocketSubsysteminput:noneoutput:DLLinitializeresult0:faultother:success---------------------------------------------------*/程序文檔的例子/*---------------------64程序文檔的例子intInitSockInterface(){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(2,2);//startsocketsubsystemerr=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return0;}程序文檔的例子intInitSockInterface(65程序文檔的例子//seeifsocketversionmeetourrequest(mustbe2.2)if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){WSACleanup();return0;}}/*---thisistheendofprogramdocumentdemo---*/程序文檔的例子//seeifsocketversion66編碼原則4)編程中采用統(tǒng)一的標(biāo)準(zhǔn)和約定,降低程序的復(fù)雜性軟件組織通常會(huì)制定一份“編碼規(guī)范”,程序員在編寫(xiě)代碼時(shí)。必須嚴(yán)格按照“編碼規(guī)范”編寫(xiě)代碼。表13-1是軟件組織“編碼規(guī)范”的通用格式和內(nèi)容。編碼原則4)編程中采用統(tǒng)一的標(biāo)準(zhǔn)和約定,降低程序的復(fù)雜性67表13-1編碼規(guī)范規(guī)范項(xiàng)規(guī)范內(nèi)容1排版排版格式,如縮進(jìn)、塊語(yǔ)句、分行等2注釋規(guī)范注釋的格式3標(biāo)識(shí)符命名規(guī)范標(biāo)識(shí)符的命名規(guī)則4可讀性為提高可讀性所作的規(guī)范,如禁止使用技巧性高的語(yǔ)句5變量、結(jié)構(gòu)規(guī)范變量和結(jié)構(gòu)的定義,如禁止局部與全局變量同名等6函數(shù)、過(guò)程規(guī)范函數(shù)的定義,如“不要設(shè)計(jì)多用途面面俱到的函數(shù)”7可測(cè)性為提高可測(cè)性的規(guī)范,如“用斷言確認(rèn)函數(shù)的參數(shù)”等8程序效率為程序效率所作的規(guī)范,如“循環(huán)體內(nèi)工作量最小化”9質(zhì)量保證為提高軟件質(zhì)量所作的規(guī)范,如“防止內(nèi)存操作越界”表13-1編碼規(guī)范規(guī)范項(xiàng)規(guī)范內(nèi)容1排版排版格式,如縮進(jìn)68編碼原則5)分離功能獨(dú)立的代碼塊形成新的模塊將功能獨(dú)立的代碼塊獨(dú)立出來(lái)形成新的模塊,增加模塊的內(nèi)聚度,有利于代碼的重用和可修改性。編碼原則5)分離功能獨(dú)立的代碼塊形成新的模塊6911.4編程風(fēng)格不同的程序員可能具有不同的編程風(fēng)格,有時(shí)候很難說(shuō)哪種風(fēng)格好,哪種風(fēng)格不好,比如在分支語(yǔ)句之后的語(yǔ)句塊,一些程序員可能習(xí)慣這樣:if(a>b){.......}而另外的程序員喜歡這樣:if(a>b){......}11.4編程風(fēng)格不同的程序員可能具有不同的編程風(fēng)格,有時(shí)7011.4編程風(fēng)格一般的軟件組織允許程序員在不影響代碼的可讀性、可修改性、可測(cè)試性、可維護(hù)性的基礎(chǔ)上使用自己的風(fēng)格編寫(xiě)程序。但是有些規(guī)則則是所有程序員必須遵守的。11.4編程風(fēng)格一般的軟件組織允許程序員在不影響代碼的可71好的編程風(fēng)格應(yīng)遵循的規(guī)則1)節(jié)簡(jiǎn)化(economy)①不使用不必要的變量和函數(shù)②避免變量重名,變量重名可導(dǎo)致很難被發(fā)現(xiàn)的錯(cuò)誤。③盡量減小代碼量。④盡量減少代碼的執(zhí)行時(shí)間,提高執(zhí)行效率。⑤避免功能冗余的模塊。⑥盡量不使用全局變量。好的編程風(fēng)格應(yīng)遵循的規(guī)則1)節(jié)簡(jiǎn)化(economy)72好的編程風(fēng)格應(yīng)遵循的規(guī)則2)模塊化(Modularity)①確保物理和邏輯功能密切相關(guān)。②限定一個(gè)模塊完成一個(gè)獨(dú)立的功能,提高模塊的內(nèi)聚度。③檢查代碼的重復(fù)率,重復(fù)多的代碼,要抽出來(lái)作為一個(gè)單獨(dú)的模塊。好的編程風(fēng)格應(yīng)遵循的規(guī)則2)模塊化(Modularity)73好的編程風(fēng)格應(yīng)遵循的規(guī)則3)簡(jiǎn)單化(Simplicity)①采用直接了當(dāng)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論