第7章 軟件實現(xiàn)-編碼_第1頁
第7章 軟件實現(xiàn)-編碼_第2頁
第7章 軟件實現(xiàn)-編碼_第3頁
第7章 軟件實現(xiàn)-編碼_第4頁
第7章 軟件實現(xiàn)-編碼_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

承上啟下詳細(xì)設(shè)計方法詳細(xì)設(shè)計過程3/5/20240軟件工程

第七章實現(xiàn)--軟件編碼3/5/20241

軟件的詳細(xì)設(shè)計完成,就表示完成了軟件的過程性的描述,進(jìn)入軟件編碼階段。

在軟件生命期中,程序經(jīng)常需要被人閱讀和理解,如何提高程序的可讀性(Readability)?使程序“簡單”和“清晰”,進(jìn)而使程序具有良好的可靠性、可維護(hù)性,這是非常重要的。

編碼(Coding)階段的任務(wù)簡單說,是為每個模塊編寫程序。即是將詳細(xì)設(shè)計的結(jié)果轉(zhuǎn)換為用某種計算機(jī)語言寫的程序——源程序代碼。引言3/5/20242本單元不是介紹如何編寫程序,而是從如何提高軟件的質(zhì)量和可維護(hù)性的角度,討論在編碼階段所要解決的主要問題:

程序設(shè)計語言的特性及選擇的原則

編碼風(fēng)格引言3/5/20243引言編程的工作包括哪些?“學(xué)什么編程語言最好?”沒有最好的,只有最適合的?團(tuán)隊項目你們選用了哪種編程語言?你是怎么寫程序的?如何協(xié)作編程?3/5/20244本章要點一、關(guān)于編碼的一些理念二、編程語言的選擇三、編碼標(biāo)準(zhǔn)和規(guī)范四、案例分析3/5/20245

什么是軟件編碼?Programming?=Coding一種觀點軟件編碼是將軟件設(shè)計模型機(jī)械地轉(zhuǎn)換成源程序代碼,這是一種低水平的、缺乏創(chuàng)造性的工作。軟件程序員是所謂的“軟件藍(lán)領(lǐng)”。問題:你是否認(rèn)同這種觀點?如果不認(rèn)同,你如何看待軟件編碼?關(guān)于編碼的一些理念3/5/20246什么是軟件編碼?ProfessionalProgrammer=SoftwareEngineer正確觀點軟件編碼是一個復(fù)雜而迭代的過程,包括程序設(shè)計和程序?qū)崿F(xiàn)。軟件編碼要求正確地理解用戶需求和軟件設(shè)計思想正確地根據(jù)設(shè)計模型進(jìn)行程序設(shè)計正確地而高效率地編寫和測試源代碼軟件編碼是設(shè)計的繼續(xù),會影響軟件質(zhì)量和可維護(hù)性。軟件編碼要考慮重用和重構(gòu)

關(guān)于編碼的一些理念3/5/20247軟件編碼的工作程序設(shè)計理解軟件的需求說明和設(shè)計模型補(bǔ)充遺漏的或剩余的詳細(xì)設(shè)計設(shè)計程序代碼的結(jié)構(gòu)設(shè)計審查檢查設(shè)計結(jié)果記錄發(fā)現(xiàn)的設(shè)計缺陷(類型、來源、嚴(yán)重性)編寫代碼應(yīng)用編碼規(guī)范進(jìn)行代碼編寫所編寫代碼應(yīng)該是易驗證的關(guān)于編碼的一些理念3/5/20248軟件編碼的工作代碼走查確認(rèn)所寫代碼完成了所要求的工作發(fā)現(xiàn)的代碼缺陷(類型、來源、嚴(yán)重性)編譯代碼修改代碼的語法錯誤測試所寫代碼對代碼進(jìn)行單元測試調(diào)試代碼修改錯誤關(guān)于編碼的一些理念3/5/20249程序員應(yīng)具備的能力?基礎(chǔ)知識英語的功底數(shù)學(xué)基礎(chǔ)(算法分析與設(shè)計)計算機(jī)科學(xué)基礎(chǔ)知識基本技能認(rèn)識事務(wù)的能力(抽象、模型、結(jié)構(gòu)、層次)做事的邏輯性和條理性溝通技能、演講技巧和團(tuán)隊協(xié)作能力學(xué)習(xí)新知識和新技術(shù)的能力職業(yè)化訓(xùn)練和實踐經(jīng)驗關(guān)于編碼的一些理念3/5/202410本章要點一、關(guān)于編碼的一些理念二、編程語言的選擇三、編碼標(biāo)準(zhǔn)和規(guī)范四、案例分析3/5/202411問題在哪個階段選擇編程語言?是需求階段確定還是在設(shè)計階段確定,主要看客戶有無具體編程環(huán)境要求。如果客戶提出:在Linux和Windows系統(tǒng)上都能運(yùn)行,則不能VC++,VB.net等語言。若采用Linux做服務(wù)器,那就不能采用ASP語言作為后臺程序的開發(fā)語言??蛇xJava和PHP.我們要對程序語言本身的特點進(jìn)行了解3/5/202412程序語言的分類從計算機(jī)發(fā)展角度:分為4代1代:機(jī)器語言2代:匯編語言3代:高級程序設(shè)計語言4代:例如;SQL編程語言的選擇3/5/202413程序語言的分類從應(yīng)用角度:腳本語言匯編語言面向過程的高級語言面向?qū)ο蟮母呒壵Z言。編程語言的選擇3/5/202414一、腳本語言:以簡單的方式快速完成復(fù)雜任務(wù)。語法結(jié)構(gòu)簡單,使用方便。不需要編譯。運(yùn)行效率略顯不足。代表:JavaScript:由Netscape開發(fā),在客戶機(jī)上執(zhí)行,專門為制作Web網(wǎng)頁而量身定做。PHP:是一種HTML內(nèi)嵌式語言。是在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言。其風(fēng)格類似于c語言。被許多網(wǎng)站編程人員采用。Perl:用來完成大量不同任務(wù)的腳本語言。例如,打印報告,將一個文本文件轉(zhuǎn)換成另一種格式。能在絕大多數(shù)操作系統(tǒng)環(huán)境下運(yùn)行。編程語言的選擇3/5/202415二、面向過程的高級語言特點:具有很強(qiáng)的過程功能和數(shù)據(jù)結(jié)構(gòu)功能,并提供結(jié)構(gòu)化的邏輯構(gòu)造。代表:PASCAL、PL/1、C編程語言的選擇3/5/202416三、面向?qū)ο蟮母呒壵Z言編程語言的選擇Smalltalk

首先實現(xiàn)真正的面向?qū)ο蟮某绦蛟O(shè)計,支持程序部件的“可復(fù)用性”。C++

既融合了面向?qū)ο蟮哪芰?,又與C語言兼容,保留了C的許多重要特性。維護(hù)了大量已開發(fā)的C庫、工具及C源程序的完整性。代表:TurboC++;BorlandC++;MicrosoftC++Java

是一種簡單的面向?qū)ο蟮姆植际降恼Z言。功能強(qiáng)大、高效安全,與結(jié)構(gòu)無關(guān),易于移植,是多線程的動態(tài)語言。增加了ObjectiveC的擴(kuò)充,提供更多的動態(tài)解決辦法。3/5/202417

如何選擇程序設(shè)計語言?關(guān)系到程序的效率和質(zhì)量。應(yīng)根據(jù)軟件系統(tǒng)的應(yīng)用特點,語言的內(nèi)在特點等選擇程序設(shè)計語言。

(1)項目的應(yīng)用領(lǐng)域:應(yīng)盡量選取適合某個應(yīng)用領(lǐng)域的語言。

(2)算法和計算復(fù)雜性:要根據(jù)不同語言的特點,選取能夠適應(yīng)軟件項目算法和計算復(fù)雜性的語言。

(3)軟件的執(zhí)行環(huán)境:要選取機(jī)器上能運(yùn)行且具有相應(yīng)支持軟件的語言。

編程語言的選擇一、語言選擇的一般準(zhǔn)則3/5/202418

(4)性能因素:應(yīng)結(jié)合工程具體性能來考慮,例如實時系統(tǒng)要求速度,就應(yīng)選擇匯編語言。

(5)數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性:要根據(jù)不同語言構(gòu)造數(shù)據(jù)結(jié)構(gòu)類型的能力選取合適的語言。

(6)軟件開發(fā)人員的知識水平以及心理因素。知識水平包括:專業(yè)知識,程序設(shè)計能力。心理因素:如對某種語言或工具的熟悉程度。受外界的影響(盲目追求高、新)。編程語言的選擇3/5/202419本章要點一、關(guān)于編碼的一些理念二、編程語言的選擇三、編碼標(biāo)準(zhǔn)和規(guī)范四、案例分析3/5/202420在軟件生命期中,程序經(jīng)常需要被人閱讀和理解,如何提高程序的可讀性(Readability)?使程序“簡單”和“清晰”,進(jìn)而使程序具有良好的可靠性、可維護(hù)性,這是非常重要的。編碼標(biāo)準(zhǔn)和規(guī)范3/5/202421編碼標(biāo)準(zhǔn)和規(guī)范標(biāo)準(zhǔn)是建立起來和必須遵守的規(guī)則規(guī)范是建議最佳做法,推薦更好方式。例如注釋變量格式文件目錄約定……3/5/202422編碼標(biāo)準(zhǔn)和規(guī)范作為一個開發(fā)團(tuán)隊,沒有一套規(guī)范,大家就會各自為政,為了提高代碼質(zhì)量,不僅需要有很好的程序設(shè)計風(fēng)格,而且需要大家遵守一致的編程規(guī)范。3/5/202423編碼的風(fēng)格程序?qū)嶋H上也是一種供人閱讀的文章,有一個文章的風(fēng)格問題。應(yīng)該使程序具有良好的風(fēng)格。從20世紀(jì)70年代以來,編碼的目標(biāo)從強(qiáng)調(diào)效率轉(zhuǎn)變?yōu)閺?qiáng)調(diào)清晰。與此相應(yīng),編碼的風(fēng)格從追求“聰明”和“技巧”,變?yōu)樘岢昂喢鳌焙汀爸苯印薄H藗冎饾u認(rèn)識到,良好的編碼風(fēng)格能在一定程度上彌補(bǔ)語言存在的缺點,反之,不注意風(fēng)格,即使使用了結(jié)構(gòu)化的現(xiàn)代語言,也很難寫出高質(zhì)量的程序。當(dāng)多個程序員合作編寫一個大的程序時,尤其需要強(qiáng)調(diào)良好的和一致的風(fēng)格,以利于相互通信,減少因不協(xié)調(diào)而引起的問題。編碼標(biāo)準(zhǔn)和規(guī)范3/5/202424

源程序文檔化

數(shù)據(jù)說明

輸入/輸出

效率 使用標(biāo)準(zhǔn)的控制結(jié)構(gòu)

語句結(jié)構(gòu)編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/2024251、使用標(biāo)準(zhǔn)的控制結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計主要包括兩方面:在編寫程序時,使用幾種基本控制結(jié)構(gòu),通過組合嵌套,形成程序的控制結(jié)構(gòu)。盡可能避免使用GOTO語句。在程序設(shè)計過程中,盡量采用自頂向下和逐步細(xì)化的原則,由粗到細(xì),一步步展開。編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/202426編碼標(biāo)準(zhǔn)和規(guī)范1、使用標(biāo)準(zhǔn)的控制結(jié)構(gòu)–禁止使用GOTO(C語言)語句。–用IF語句來強(qiáng)調(diào)只執(zhí)行兩組語句中的一組,禁止ELSEGOTO和ELSERETURN。–避免從循環(huán)中引出多個出口,應(yīng)保留函數(shù)(方法)只有一個出口。?問題:以下示例有什么問題?如何修改?p=(char*)malloc(300);if(cond1>0)strcpy(p,str);elsereturn;free(p);編碼的風(fēng)格3/5/2024272、源程序文檔化

標(biāo)識符的命名

安排注釋

程序的視覺組織

編碼的風(fēng)格編碼標(biāo)準(zhǔn)和規(guī)范3/5/2024282、源程序文檔化標(biāo)識符的命名符號名即標(biāo)識符,包括模塊名、變量名、常量名、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。這些名字應(yīng)能反映它所代表的實際東西,應(yīng)有一定實際意義。例如,表示次數(shù)的量用Times,表示總量的用Total,表示平均值的用Average,表示和的量用Sum等。編碼的風(fēng)格編碼標(biāo)準(zhǔn)和規(guī)范3/5/2024292、源程序文檔化標(biāo)識符的命名名字不是越長越好,應(yīng)當(dāng)選擇精煉的意義明確的名字。必要時可使用縮寫名字,但這時要注意縮寫規(guī)則要一致,并且要給每一個名字加注釋。同時,在一個程序中,一個變量只應(yīng)用于一種用途。例如,在一個程序中定義了一個變量temp,它在程序的前半段代表“Temperature”,在程序的后半段則代表“Temporary”,這使程序閱讀者不知所措。編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/2024302、源程序文檔化標(biāo)識符的命名通用規(guī)則:標(biāo)識符的命名應(yīng)當(dāng)直觀,可以望文知義。長度符合最小長度下的最大信息。變量名應(yīng)當(dāng)使用“名詞”或“形容詞+名詞”函數(shù)名應(yīng)當(dāng)使用“動詞”或者“動詞+名詞”的形式類和接口名首字母要大寫常量名全大寫,在單詞間用單下劃線分隔變量名和參數(shù)名第一個單詞首字母小寫,而后面的單詞首字母大寫。。。。。。編碼的風(fēng)格編碼標(biāo)準(zhǔn)和規(guī)范3/5/2024312、源程序文檔化標(biāo)識符的命名命名規(guī)則規(guī)范舉例(1)類名和接口名

classCourseOffering;interfaceStoring;(2)常量名

publicstaticfinalintMAX_VALUE=10;(3)全局變量

int

g_numStudents;編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/2024322、源程序文檔化標(biāo)識符的命名命名規(guī)則規(guī)范舉例(4)局部變量名

floatmyWidth;

一般禁止使用單字符變量名,局部循環(huán)可以使用。比如:inti,j,k;編碼的風(fēng)格編碼標(biāo)準(zhǔn)和規(guī)范3/5/2024332、源程序文檔化程序的注釋夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。注釋決不是可有可無的。一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個源程序的1/3到1/2,甚至更多。注釋分為序言性注釋和功能性注釋。編碼的風(fēng)格編碼標(biāo)準(zhǔn)和規(guī)范3/5/2024342、源程序文檔化程序的注釋--序言性注釋通常置于每個程序模塊的開頭部分,它應(yīng)當(dāng)給出程序的整體說明,對于理解程序本身具有引導(dǎo)作用。有些軟件開發(fā)部門對序言性注釋做了明確而嚴(yán)格的規(guī)定,要求程序編制者逐項列出。編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/202435程序頭的注釋模板

/************************************************************Copyright@2003-2008xxx公司技術(shù)開發(fā)部**創(chuàng)建人:xx**日期:xxxxxxxx**修改人:xx**日期:xxxxxxxx**描述:****版本:*************************************************************/序言性注釋舉例編碼標(biāo)準(zhǔn)和規(guī)范3/5/202436下面是一個描述程序開頭的功能及其他程序接口的例子/**********************************************************************************模塊功能:尋找兩條直線的交點。 ****模塊名稱:FindDPT ****代碼編寫者:張青 ****版本:1.1 ****日期:2006.10.12 **** ****過程調(diào)用:CallFindDPT(A1,B1,C1,A2,B2,C2,XS,YS,Flag) ****輸入?yún)?shù):A1,B1,C1,A2,B2,C2 ****(直線一:A1*X+B1*Y+C1=0 ****直線二:A2*X+B2*Y+C2=0) ****輸出參數(shù):如果兩條直線平行,F(xiàn)lag=1,否則Flag=0并且 ****兩條直線的交點是(xs,ys)編碼標(biāo)準(zhǔn)和規(guī)范3/5/2024372、源程序文檔化程序的注釋--功能性注釋功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會怎么樣。而不要解釋下面怎么做。例如,

/*ADDAMOUNTTOTOTAL*/

TOTAL=AMOUNT+TOTAL

不好

編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/2024382、源程序文檔化程序的注釋--功能性注釋如果注明把月銷售額計入年度總額,便使讀者理解了下面語句的意圖:

/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/

TOTAL=AMOUNT+TOTAL要點描述一段程序,而不是每一個語句;用縮進(jìn)和空行,使程序與注釋容易區(qū)別;注釋要正確。編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/2024392、源程序文檔化程序的視覺組織恰當(dāng)?shù)乩每崭瘢梢酝怀鲞\(yùn)算的優(yōu)先性,避免發(fā)生運(yùn)算的錯誤。例如,將表達(dá)式

(A<-17)ANDNOT(B<=49)ORC

寫成

(A<-17)ANDNOT(B<=49)ORC自然的程序段之間可用空行隔開可參見相關(guān)語言編碼規(guī)范編碼標(biāo)準(zhǔn)和規(guī)范編碼的風(fēng)格3/5/202440本章要點一、關(guān)于編碼的一些理念二、編程語言的選擇三、編碼標(biāo)準(zhǔn)和規(guī)范四、案例分析3/5/202441案例分析例1:程序注釋?程序注釋的原則–注釋應(yīng)當(dāng)淺顯、明白–注釋不是程序員指南–注釋不是標(biāo)準(zhǔn)庫函數(shù)參考手冊–注釋的主要任務(wù)是答疑解惑而不是增加程序的行數(shù)–好的注釋是對設(shè)計思想的精確表述和清晰展現(xiàn)?問題:–例1的程序注釋存在什么問題?–按照上述原則,如何修改例1的程序注釋?3/5/202442案例分析?例2所示的程序風(fēng)格如何?你能夠容易理解嗎??編程人員的理由–使用z打頭的變量名、函數(shù)名、宏定義名就像是為自己的旅行箱貼標(biāo)簽–將void,int,float等基本數(shù)據(jù)類型重新命名,可以在最大程度上保證代碼的可移植性–使用宏定義表示一些基本的功能運(yùn)算可以大幅度減少源程序的行數(shù),也可以被后者方便地復(fù)用–使用高度簡練的縮寫可以加強(qiáng)源代碼的保密程度?你是否認(rèn)同上述理由?為什么?3/5/202443案例分析?例3所示的程序運(yùn)行時會崩潰,其中有四處足以讓程序崩潰的錯誤,找

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論