軟件設(shè)計(jì)規(guī)范_第1頁(yè)
軟件設(shè)計(jì)規(guī)范_第2頁(yè)
軟件設(shè)計(jì)規(guī)范_第3頁(yè)
軟件設(shè)計(jì)規(guī)范_第4頁(yè)
軟件設(shè)計(jì)規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

工作文件

文件名稱(chēng):軟件設(shè)計(jì)規(guī)范

文件編號(hào):版號(hào):A

編制:日期:

審核:日期:

批準(zhǔn):日期:

受控狀態(tài):

生效日期:

分發(fā)號(hào):

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

1目的

2本規(guī)范是對(duì)項(xiàng)目軟件設(shè)計(jì)的一份規(guī)范性文件,對(duì)軟件設(shè)計(jì)過(guò)程中的活動(dòng)進(jìn)行總體規(guī)

范,以有效保證軟件產(chǎn)品的質(zhì)量。

3范圍

本規(guī)范適用于公司研制的全部軟件產(chǎn)品。

4設(shè)計(jì)流程

a)軟件設(shè)計(jì)流程按照《軟件設(shè)計(jì)和開(kāi)發(fā)控制程序》中規(guī)定執(zhí)行,軟件開(kāi)發(fā)過(guò)程可包

括以下活動(dòng):

b)需求分析;

c)軟件開(kāi)發(fā);

d)軟件測(cè)試;

e)項(xiàng)目驗(yàn)收;

0客服支持。

5前期準(zhǔn)備

6軟件開(kāi)發(fā)人員對(duì)系統(tǒng)開(kāi)發(fā)前期進(jìn)行充分的用戶調(diào)研、需求分析和系統(tǒng)體系結(jié)構(gòu)的設(shè)

計(jì)準(zhǔn)備工作。軟件開(kāi)發(fā)人員以及業(yè)務(wù)需求人員共同組建項(xiàng)目組,一名或兩名項(xiàng)目經(jīng)

理負(fù)責(zé)監(jiān)控項(xiàng)目的整體實(shí)施,共同參與系統(tǒng)的全面設(shè)計(jì)、開(kāi)發(fā),并針對(duì)業(yè)務(wù)提出進(jìn)

一步開(kāi)發(fā)需求,開(kāi)展軟件用戶化工作,制定二次開(kāi)發(fā)方案,參與設(shè)計(jì)業(yè)務(wù)系統(tǒng)與其

它軟件的接口。

7實(shí)施過(guò)程

整個(gè)開(kāi)發(fā)過(guò)程將經(jīng)歷獲取需求、需求分析、系統(tǒng)設(shè)計(jì)、編碼、測(cè)試等階段。

5.1獲取需求

a)軟件在進(jìn)入正式開(kāi)發(fā)之前,提供準(zhǔn)確的書(shū)面《需求規(guī)格說(shuō)明書(shū)》其中包括:

b)對(duì)現(xiàn)有系統(tǒng)的分析。

c)待開(kāi)發(fā)系統(tǒng)的詳細(xì)需求。

d)功能需求,使用范圍,業(yè)務(wù)流程,用戶界面,輸出要求,故障處理。

網(wǎng)絡(luò)環(huán)境,硬件環(huán)境,軟件環(huán)境,與其他系統(tǒng)的關(guān)系,安全與保密。

第1頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

技術(shù)可行性分析,經(jīng)濟(jì)可行性分析,人員可行性分析,影響待開(kāi)發(fā)系統(tǒng)的主要因

素。

軟件項(xiàng)目分為專(zhuān)用軟件和通用軟件兩大類(lèi)。

5.2對(duì)于專(zhuān)用軟件,在進(jìn)入開(kāi)發(fā)之前必須與用戶進(jìn)行比較具體的交流和討論,了解清

楚用戶理想的產(chǎn)品究竟是什么樣子,這里最好就采用原型化的方法作出一個(gè)簡(jiǎn)單的框架

給用戶看。

5.3對(duì)于通用軟件,在開(kāi)發(fā)之前必須做一定的市場(chǎng)調(diào)查工作,一方面是從經(jīng)濟(jì)效益考

慮,調(diào)查產(chǎn)品的潛在市場(chǎng)有多大,一方面是從技術(shù)的角度,了解清楚潛在用戶對(duì)軟件的

各種技術(shù)上的要求,另一方面是確定軟件的定位,即我們軟件具體是為哪一些用戶群體

服務(wù)的。然后對(duì)該群體用戶現(xiàn)有硬件配置,軟件配置,網(wǎng)絡(luò)使用情況,數(shù)據(jù)庫(kù)使用情況,

計(jì)算機(jī)熟悉程度做一定的調(diào)研,根據(jù)調(diào)查的統(tǒng)計(jì)結(jié)果決定即將開(kāi)發(fā)的軟件的一些技術(shù)指

標(biāo)。

5.4需求分析

開(kāi)發(fā)人員構(gòu)思、確立系統(tǒng)目標(biāo)、劃分業(yè)務(wù)領(lǐng)域、現(xiàn)行業(yè)務(wù)分析、建立業(yè)務(wù)模型、信

息需求分析、用戶視圖規(guī)范化、數(shù)據(jù)元素標(biāo)準(zhǔn)化與一致性控制等。

在項(xiàng)目組和用戶充分交互、理解的基礎(chǔ)上,提出系統(tǒng)的技術(shù)構(gòu)架,對(duì)系統(tǒng)功能、性能等

主要指標(biāo)作描述,對(duì)實(shí)現(xiàn)方法項(xiàng)目實(shí)施人員應(yīng)有一個(gè)比較清晰的輪廓及整體設(shè)計(jì)思路,

對(duì)有疑問(wèn)的地方及時(shí)與業(yè)務(wù)需求人員進(jìn)行溝通交流,最終達(dá)成共識(shí)。

綜合對(duì)該用戶群體現(xiàn)有硬件配置,軟件配置,網(wǎng)絡(luò)使用情況,數(shù)據(jù)庫(kù)使用情況,計(jì)

算機(jī)熟悉程度做一定的調(diào)研,根據(jù)調(diào)杳的統(tǒng)計(jì)結(jié)果決定即將開(kāi)發(fā)的一些軟件適用指標(biāo)。

這個(gè)階段需要出三樣?xùn)|西,用戶視圖,數(shù)據(jù)詞典和用戶操作手冊(cè)。

用戶視圖是該軟件用戶(包括終端用戶和管理用戶)所能看到的頁(yè)面樣式,這里面

包含了很多操作方面的流程和條件。

數(shù)據(jù)詞典是指明數(shù)據(jù)邏輯關(guān)系并加以整理,完成了數(shù)據(jù)詞典,數(shù)據(jù)庫(kù)的設(shè)計(jì)就完成

了一半多。

用戶操作手冊(cè)是指明了操作流程的說(shuō)明書(shū)。

5.5軟件開(kāi)發(fā)

第2頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

5.3.1系統(tǒng)結(jié)構(gòu)建立

確定軟件服務(wù)器的硬件配置及用戶硬件資源配置。

確定用戶軟件平臺(tái)的統(tǒng)一協(xié)調(diào)。

5.3.2軟件設(shè)計(jì)

5.3.3軟件設(shè)計(jì)階段的工作包括對(duì)模塊進(jìn)行必要的修改,同時(shí)可能需要對(duì)某些結(jié)構(gòu)做一

些修改,確定界面定義、月戶服務(wù)層、業(yè)務(wù)邏輯層、數(shù)據(jù)庫(kù)服務(wù)層和具體數(shù)據(jù)庫(kù),確定

軟件開(kāi)發(fā)工具。這一階段還將完成更詳細(xì)的功能和業(yè)務(wù)需求調(diào)研,制作系統(tǒng)中最符合用

戶需要的文檔。

5.3.4根據(jù)應(yīng)用系統(tǒng)對(duì)安全的要求,同步進(jìn)行安全保密設(shè)計(jì)。

5.3.5軟件編碼

5.3.5.1確定軟件的界面風(fēng)格、使用功能、編程語(yǔ)言、數(shù)據(jù)庫(kù)結(jié)構(gòu)和具體數(shù)據(jù)等工作,并

開(kāi)始進(jìn)入程序編寫(xiě)階段。

5.3.5.2開(kāi)發(fā)人員進(jìn)入設(shè)置和編碼工作之后,應(yīng)先確定編碼的風(fēng)格在開(kāi)發(fā)過(guò)程中保持

一致,工作過(guò)程中如發(fā)現(xiàn)前面分析或設(shè)計(jì)階段的某些錯(cuò)誤,應(yīng)返回到前面的

階段進(jìn)行必要的修改,同時(shí)主要開(kāi)發(fā)人員之間應(yīng)相互緊密配合。編碼語(yǔ)言除用

戶特別要求外應(yīng)盡量使用常用語(yǔ)言,詳細(xì)語(yǔ)言編碼規(guī)范參考《C++編碼規(guī)范》

(附件A)和《C#編碼規(guī)范》(附件B)。

5.3.5.3代碼規(guī)范

有些不易理解的變量或函數(shù)應(yīng)作注釋?zhuān)y懂的代碼要有注解,在文件的開(kāi)始處有該

文件的用途描述。一定要保持注釋的一致性。

代碼組織要清晰,{,},(,),if,else,do,while,for,case等要對(duì)應(yīng)整齊,少用空格,縮進(jìn)全部

用Tab鍵。變量的定義要集中,函數(shù)間要有空行分開(kāi),一個(gè)程序中的空行數(shù)目最好占

8%-16%o多態(tài)函數(shù)和功能相近的函數(shù)集中放在一起,

代碼應(yīng)該簡(jiǎn)潔、清楚并講述了所發(fā)生的一切。某些公用代碼要注意多平臺(tái)易移植,最

好使用標(biāo)準(zhǔn)C。

5.3.5.4代碼的重用要仔細(xì),要將相關(guān)的代碼也拷貝過(guò)來(lái),注意那段代碼是否適合需

求的應(yīng)用場(chǎng)合。

第3頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

5.3.5.5刪掉從來(lái)沒(méi)有用過(guò)的函數(shù)或變量,大篇幅注釋掉的代碼行也應(yīng)刪除,以免使

程序混亂難讀。

5.3.5.6工程文件組織規(guī)范

一個(gè)工程往往包含很多很多文件資源文件等),向工程中加入

文件或刪除工程中的文件要慎重,避免把工程損壞。工程中不起作用的文件或類(lèi)應(yīng)刪除,

工程目錄下的非工程文件也應(yīng)該移走,保持工程的清潔,避免混淆難于管理。工程文件

如果很多,應(yīng)歸類(lèi)。

在VC環(huán)境下,建議將常用的頭文件全部放入sidafx.h中,而在每個(gè)cpp開(kāi)始處嵌入

stdafx.ho避免頭文件的交叉引用,如果有嚴(yán)重的交叉引用,適當(dāng)使用類(lèi)的聲明。

將獨(dú)立性比較強(qiáng)的模塊抽出來(lái),做成DLL,控件或COM組件,該模塊可單獨(dú)編寫(xiě)

和測(cè)試,也增強(qiáng)了其可重用性。

一個(gè)比較大的工程應(yīng)留有一定的消息接口或插件接口等。

工程的版本控制要嚴(yán)格,版本格式為xx.xx.xx,必要時(shí)使用Build次數(shù)或日期。高版

本盡量兼容低版本的用法、數(shù)據(jù)或協(xié)議。

工程的編譯宏定義和工程參數(shù)設(shè)置應(yīng)正確,每作一個(gè)新工程時(shí)應(yīng)檢查工程參數(shù)是否

正確。

建議字節(jié)對(duì)齊方式為1字節(jié)對(duì)齊。

5.3.5.7工程文件應(yīng)經(jīng)常備份,備份時(shí)注明備份日期和主要增加的功能。

5.3.5.8類(lèi)組織規(guī)范

類(lèi)一般有兩個(gè)文件,一個(gè)頭文件,一個(gè)實(shí)現(xiàn)體CPPo

5.3.5.9類(lèi)力求封裝好,嚴(yán)格區(qū)分public,private,protect等作用域,如果一個(gè)函數(shù)與本

類(lèi)有莫大的關(guān)系,可以作為該類(lèi)的靜態(tài)成員函數(shù),不用或少用友元函數(shù)等破

壞類(lèi)封裝性的方法和技巧。如果一些結(jié)構(gòu)或宏僅與本類(lèi)有關(guān),可在類(lèi)頭文件

中定義。

5.3.5.10類(lèi)的成員變量在構(gòu)造函數(shù)或初始化函數(shù)中應(yīng)賦初值。指針在構(gòu)造函數(shù)中賦

NULL,析構(gòu)時(shí)DEL_EMPTY它,以免內(nèi)存泄露。

5.3.5.11用戶界面規(guī)范

第4頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

有四大類(lèi)型的用戶界面:對(duì)話框、單文檔界面、多文檔界面、其它界面。

對(duì)話框要易用且簡(jiǎn)潔,字體和控件的組織搭配要得體,能簡(jiǎn)單不復(fù)雜,各控件的焦

點(diǎn)、Tab順序等要講究,視應(yīng)用場(chǎng)合要適當(dāng)支持鍵盤(pán)。在簡(jiǎn)潔易用的前提下,力求個(gè)性

化,設(shè)計(jì)得更加友好。程序各對(duì)話框的風(fēng)格要保持一致。

單文檔和多文檔界面的程序功能強(qiáng),也便于擴(kuò)充和管理。其中菜單、工具欄、狀態(tài)

欄等設(shè)計(jì)要有特色。菜單按一定的分類(lèi)彈出,必要時(shí)設(shè)計(jì)成多套菜單,在重要的窗口或

區(qū)域應(yīng)能彈出右鍵,實(shí)現(xiàn)常見(jiàn)操作。工具欄上放最常用的操作按鈕,必要時(shí)動(dòng)態(tài)更換按

鈕。狀態(tài)欄顯示足夠多的有用信息。

5.6消息主控在Mainframe中,單文檔的主控也可在View中,所有的對(duì)話框的彈出或

非模態(tài)對(duì)話框的控制都在主控窗口中完成,具體的數(shù)據(jù)處理放在單獨(dú)的文件中或設(shè)計(jì)成

類(lèi)。在App類(lèi)中實(shí)現(xiàn)Ini讀寫(xiě),各數(shù)據(jù)對(duì)象的定義和析構(gòu),全局變量的賦值和初始計(jì)算,

存盤(pán)退出等。各視圖的OnDraw和GDI畫(huà)圖盡量使用內(nèi)存位圖的方式,以免閃爍。

5.7其它還有ATL,控制臺(tái),嵌入式程序界面等,也有作為其它容器如IE中的插件等,

此類(lèi)程序可能不用MFC,而采用COM組件等方法實(shí)現(xiàn)。

5.8軟件測(cè)試

5.9測(cè)試時(shí)系統(tǒng)投入使用前最關(guān)鍵的一個(gè)步驟,由開(kāi)發(fā)人員之間、業(yè)務(wù)需求人員交叉測(cè)

試或由軟件測(cè)試工程師測(cè)試。開(kāi)發(fā)人員將對(duì)在測(cè)試過(guò)程中發(fā)現(xiàn)的問(wèn)題提出可行建議進(jìn)行

改進(jìn)。測(cè)試方法、測(cè)試類(lèi)型及測(cè)試結(jié)果判斷規(guī)范參考《軟件測(cè)試規(guī)范》。

5.10項(xiàng)目驗(yàn)收

5.5.1建設(shè)工程包括多個(gè)方面的工作和任務(wù),每一項(xiàng)任務(wù)的完成、每一個(gè)文檔的提交、

每一個(gè)設(shè)備、軟件或應(yīng)用系統(tǒng)的交付,都有相應(yīng)的完成標(biāo)志和測(cè)試、評(píng)估和驗(yàn)收

標(biāo)準(zhǔn)。對(duì)于系統(tǒng)、網(wǎng)絡(luò)和應(yīng)用這種重大的工作里程碑事件,測(cè)試驗(yàn)收工徑更為嚴(yán)

謹(jǐn)和充分,計(jì)劃更為周密。

5.5.2按照系統(tǒng)集成服務(wù)的程序和行業(yè)慣例,整個(gè)項(xiàng)目實(shí)施過(guò)程中要對(duì)不同的交付項(xiàng)目

進(jìn)行如下各類(lèi)測(cè)試和驗(yàn)收中的一種或幾種,具體進(jìn)行哪種或哪些測(cè)試驗(yàn)收工作依

交付項(xiàng)目的性質(zhì)不同而不同。

5.5.3審議確認(rèn)

第5頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

5.5.4這是一種采用對(duì)交付件內(nèi)容進(jìn)行閱讀、講解、評(píng)議、問(wèn)題與回答的形式進(jìn)行評(píng)審,

并作出接受或拒絕決定的方法。對(duì)于交付的項(xiàng)目管理文檔、設(shè)計(jì)文檔、測(cè)試報(bào)告、

技術(shù)資料等交付項(xiàng)目,通常采用這種方法。

5.5.5安裝測(cè)試

5.5.6采用標(biāo)準(zhǔn)的測(cè)試程序(如硬件設(shè)備開(kāi)機(jī)自檢)和操作方法,對(duì)交付件進(jìn)行測(cè)試的方

法。通常用于對(duì)硬件設(shè)備和系統(tǒng)軟件的驗(yàn)收。

5.5.7初始安裝測(cè)試

5.5.8類(lèi)似于安裝測(cè)試,通常用于對(duì)最終提交結(jié)果進(jìn)行安裝測(cè)試。典型的情況是系統(tǒng)軟

件的初始安裝測(cè)試,此時(shí)安裝的是用于進(jìn)行設(shè)計(jì)開(kāi)發(fā)的平臺(tái)或工具,而不是直接

提交客戶作生產(chǎn)目的。

5.5.9用戶驗(yàn)收測(cè)試

用戶驗(yàn)收測(cè)試是用戶根據(jù)自己的業(yè)務(wù)處理要求,在實(shí)際系統(tǒng)上進(jìn)行的類(lèi)似于系統(tǒng)集

成測(cè)試的過(guò)程。這種測(cè)試的目的是檢驗(yàn)交付系統(tǒng)是否達(dá)到設(shè)計(jì)要求,是否可以投入業(yè)務(wù)

運(yùn)行。與系統(tǒng)集成測(cè)試的不同在于,用戶驗(yàn)收測(cè)試更加著重從業(yè)務(wù)功能方面的測(cè)試,時(shí)

間也相對(duì)短。

驗(yàn)收測(cè)試計(jì)劃確立了對(duì)系統(tǒng)進(jìn)行測(cè)試驗(yàn)收的方式和標(biāo)準(zhǔn)。公司將指導(dǎo)用戶制訂驗(yàn)收

測(cè)試計(jì)戈U(在驗(yàn)收測(cè)試開(kāi)始前兩周)。

a)測(cè)試計(jì)劃將包括:

b)測(cè)試目標(biāo)

c)角色和職責(zé)

d)測(cè)試環(huán)境

e)要測(cè)試的功能和外觀特征

0測(cè)試手段

g)測(cè)試案例及預(yù)期結(jié)果

5.5.10當(dāng)所有功能和外觀特征經(jīng)測(cè)試達(dá)到驗(yàn)收測(cè)試計(jì)劃所說(shuō)明的完成標(biāo)志,客戶將接收

該系統(tǒng)。在測(cè)試過(guò)程中,任一項(xiàng)沒(méi)有達(dá)到完成標(biāo)志,開(kāi)發(fā)商將負(fù)責(zé)修正然后再進(jìn)

行測(cè)試。某些測(cè)試失敗可能由于對(duì)項(xiàng)目實(shí)施目標(biāo)的誤解而導(dǎo)致,對(duì)這些誤解進(jìn)行

第6頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

分析。如果是開(kāi)發(fā)商的責(zé)任,將做必要的修正并再進(jìn)行測(cè)試。

5.5.11人員培訓(xùn)

5.5.12對(duì)用戶人員進(jìn)行技術(shù)培訓(xùn)是工程成功的重要因素,是整個(gè)項(xiàng)目能否順利實(shí)施的重

要保證。針對(duì)設(shè)備或軟件系統(tǒng)的業(yè)務(wù)和技術(shù)特點(diǎn)及要求,我們將提供必要的技術(shù)

培訓(xùn),并可就客戶的其它具體要求提供其它方面的培訓(xùn)。

5.5.13資料文檔

a)為保證系統(tǒng)的建設(shè)和正常運(yùn)行,我們可以提供如下設(shè)計(jì)類(lèi)、計(jì)劃類(lèi)、測(cè)試類(lèi)資

料和文檔,各項(xiàng)目根據(jù)自身情況進(jìn)行剪切。

b)軟件需求規(guī)格說(shuō)明

c)系統(tǒng)設(shè)計(jì)文檔

d)數(shù)據(jù)庫(kù)設(shè)計(jì)文檔

e)軟件開(kāi)發(fā)計(jì)劃

0開(kāi)發(fā)計(jì)劃

g)軟件配置項(xiàng)測(cè)試計(jì)劃

h)測(cè)試大綱

1)測(cè)試報(bào)告

j)驗(yàn)收?qǐng)?bào)告

k)用戶手冊(cè)

5.11客服支持

5.6.1培訓(xùn)目標(biāo)

5.6.2在實(shí)施項(xiàng)目的過(guò)程中,使相關(guān)操作人員理解軟件的基本原理和實(shí)際運(yùn)用,使他們

對(duì)整套業(yè)務(wù)軟件的具體性能,操作步驟以及具體要求,有一個(gè)更深層次的認(rèn)識(shí),

并能在計(jì)算機(jī)管理下對(duì)其業(yè)務(wù)軟件流程熟練操作使用。

5.6.3再開(kāi)發(fā)人員共同接受軟件開(kāi)發(fā)方全面、系統(tǒng)的培訓(xùn)I,保證能夠在后期推廣中獨(dú)擋

一面完成推廣及軟件升級(jí)任務(wù)。

5.6.4培訓(xùn)計(jì)劃

5.6.5項(xiàng)目組有義務(wù)對(duì)用戶提供及時(shí)、有效、全面的培訓(xùn),并在項(xiàng)目實(shí)施過(guò)程中充分重

第7頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

視對(duì)用戶方的技術(shù)轉(zhuǎn)移,并提前制訂有效可行的培訓(xùn)計(jì)劃。

5.6.6考核標(biāo)準(zhǔn)

以實(shí)際操作方式測(cè)試用戶對(duì)軟件系統(tǒng)流程的操作使用能力。

第8頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

附錄AC++編碼規(guī)范

1文件結(jié)構(gòu)

1.1文件頭注釋

所有C++的源文件均必須包含一個(gè)規(guī)范的文件頭,文件頭包含了該文件的名稱(chēng)、功能概

述、作者、版權(quán)和版本歷史信息等內(nèi)容。標(biāo)準(zhǔn)文件頭的格式為:

/*!@file

*****木木***木*求*************木*木*******************求***長(zhǎng)**木*求*木木*****求*木**木木木*木*太木*

<PRE>

模塊名:<文件所屬的模塊名稱(chēng)〉

文件名:〈文件名〉

相關(guān)文件:〈與此文件相關(guān)的其它文件〉

文件實(shí)現(xiàn)功能:〈描述該文件實(shí)現(xiàn)的主要功能》

作者:〈作者部門(mén)和姓名,

版本:〈當(dāng)前版本號(hào),

多線程安全性:〈是/否>L說(shuō)明]

異常時(shí)安全性:〈是/否>L說(shuō)明]

備注:〈其它說(shuō)明,

修改記錄:

日期版本修改人修改內(nèi)容

YYYY/MM/DDX.Y<作者或修改者名〉〈修改內(nèi)容〉

</PRE>

********************************************************:§:**********:§:***********/

如果該文件有其它需要說(shuō)明的地方,還可以專(zhuān)門(mén)為此擴(kuò)展一節(jié),節(jié)與節(jié)之間用長(zhǎng)度

為8()的“=”帶分割:

/*!@filc

第9頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

****************************************************?*************************K*

<PRE>

模塊名:〈文件所屬的模塊名稱(chēng)〉

文件名:〈文件名〉

相關(guān)文件:〈與此文件相關(guān)的其它文件,

文件實(shí)現(xiàn)功能:〈描述該文件實(shí)現(xiàn)的主要功能〉

作者:〈作者部門(mén)和姓名,

版本:v當(dāng)前版本號(hào)》

多線程安全性:v是/否>[,說(shuō)明]

異常時(shí)安全性:<是/否>[,說(shuō)明]

備注:〈其它說(shuō)明〉

修改記錄:

日期版本修改人修改內(nèi)容

YYYY/MM/DDX.Y〈作考或修改者名〉〈修改內(nèi)容,

</PRE>

****************************************************k***************************

*項(xiàng)目1

-項(xiàng)目1.1

-項(xiàng)目1.2

*項(xiàng)目2

第10頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

-項(xiàng)目2.1

-項(xiàng)目2.2

每行注釋的長(zhǎng)度都不應(yīng)該超過(guò)80個(gè)半角字符。還要注意縮進(jìn)和對(duì)齊,以利閱讀。

注意:將多線程和異常時(shí)安全性描述放在文件頭,而不是類(lèi)或者函數(shù)注釋中,是為了體

現(xiàn)以下設(shè)計(jì)思想:同一個(gè)模塊中的界面,其各方面的操作方式和使用風(fēng)格應(yīng)該盡量

保持一致。

a)1.2頭文件

頭文件通常由以下幾部分組成:

b)文件頭注釋

c)每個(gè)頭文件,無(wú)論是內(nèi)部的還是外部的,都應(yīng)該由一個(gè)規(guī)范的文件頭注釋作為

開(kāi)始。

d)預(yù)處理塊

e)為了防止頭義件被歪.復(fù)引用,應(yīng)當(dāng)用ifndef/defme/endif結(jié)構(gòu)產(chǎn)生預(yù)處理塊。

f)函數(shù)和類(lèi)/結(jié)構(gòu)的聲明等

聲明模塊的接口。

g)需要包含的內(nèi)聯(lián)函數(shù)定義文件(如果有的話)

如果類(lèi)中的內(nèi)聯(lián)函數(shù)較多,或者一個(gè)頭文件中包含多個(gè)類(lèi)的定義(不推薦),可以

將所有內(nèi)聯(lián)函數(shù)定義放入一個(gè)單獨(dú)的內(nèi)聯(lián)函數(shù)定義文件中,并在類(lèi)聲明之后用

/include”指令把它包含進(jìn)來(lái)。

a)頭文件的編碼規(guī)貝?。?/p>

b)引用文件的格式

用include<filename.h>格式來(lái)引用標(biāo)準(zhǔn)庫(kù)和系統(tǒng)庫(kù)的頭文件(編譯器將從標(biāo)準(zhǔn)庫(kù)

目錄開(kāi)始搜索)。

用include"filename.h"格式來(lái)引用當(dāng)前工程中的頭文件(編譯器將從該文件所在

第11頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

目錄開(kāi)始搜索)。

C)分割多組接口(如果有的話)

如果在一個(gè)頭件中定義了多個(gè)類(lèi)或者多組接口(不推薦),為了便于瀏覽,應(yīng)該在

每個(gè)類(lèi)/每組接口間使用分割帶把它們相互分開(kāi)。

關(guān)于頭文件的完整例子,請(qǐng)參見(jiàn):頭文件例子

1.3內(nèi)聯(lián)函數(shù)定義文件

如上所述,在內(nèi)聯(lián)函數(shù)較多的情況下,為了避免頭文件過(guò)長(zhǎng)、版面混亂,可以將所有

的內(nèi)聯(lián)函數(shù)定義移到一個(gè)單獨(dú)的文件中去,然后再用指慎比加指令將它包含到類(lèi)聲明的

后面。這樣的文件稱(chēng)為一個(gè)內(nèi)聯(lián)函數(shù)定義文件。

按照慣例,應(yīng)該將這個(gè)文件命名為afilename.inr,,其中wfilenamew與相應(yīng)的頭文

件和實(shí)現(xiàn)文件相同。

a)內(nèi)聯(lián)函數(shù)定義文件由以下兒部分組成:

b)文件頭注釋

每?jī)?nèi)聯(lián)函數(shù)定義文件都應(yīng)該由一個(gè)規(guī)范的文件頭注釋作為開(kāi)始。

c)內(nèi)聯(lián)函數(shù)定義

內(nèi)聯(lián)函數(shù)的實(shí)現(xiàn)體。

a)內(nèi)聯(lián)函數(shù)定義文件的編碼規(guī)則:

b)分割多組接口(如果有的話)

c)如果在一個(gè)內(nèi)聯(lián)函數(shù)定義文件中定義了多個(gè)類(lèi)或者多組接口的內(nèi)聯(lián)函數(shù)(不推

薦),必須在每個(gè)類(lèi)/每組接口間使用分割帶把它們相互分開(kāi)。

文件組成中為什么沒(méi)有預(yù)處理塊?

與頭文件不同,內(nèi)聯(lián)函數(shù)定義文件通常不需要定義預(yù)處理塊,這是因?yàn)樗麄兛偸潜话?/p>

在與其相應(yīng)的頭文件預(yù)處理塊內(nèi)。

1.4實(shí)現(xiàn)文件

a)實(shí)現(xiàn)文件包含所有數(shù)據(jù)和代碼的實(shí)現(xiàn)體。實(shí)現(xiàn)文件的格式為:

b)文件頭注釋

每個(gè)實(shí)現(xiàn)文件都應(yīng)該由一個(gè)規(guī)范的文件頭注釋作為開(kāi)始

第12頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

c)對(duì)配套頭文件的引用

引用聲明了此文件實(shí)現(xiàn)的類(lèi)、函數(shù)及數(shù)據(jù)的頭文件

d)對(duì)一些僅用于實(shí)現(xiàn)的頭文件的引用(如果有的話)

e)將僅與實(shí)現(xiàn)相關(guān)的接口包含在實(shí)現(xiàn)文件里(而不是頭文件中)是一個(gè)非常好的

編程習(xí)慣。這樣可以有效地屏蔽不應(yīng)該暴露的實(shí)現(xiàn)細(xì)節(jié),將實(shí)現(xiàn)改變對(duì)其它模

塊的影響降低到最少。

f)程序的實(shí)現(xiàn)體

數(shù)據(jù)和函數(shù)的定義

實(shí)現(xiàn)文件的編碼規(guī)則:

分割每個(gè)部分:在本地(靜態(tài))定義和外部定義問(wèn),以及不同按口或不同類(lèi)的實(shí)現(xiàn)之間,

應(yīng)使用分割帶相互分開(kāi)。

1.5文件的組織結(jié)構(gòu)

由于項(xiàng)目性質(zhì)、規(guī)模上存在著差異,不同項(xiàng)目間的文件組織形式差別很大。但文件、

目錄組織的基本原則應(yīng)當(dāng)是一致的:使外部接口與內(nèi)部實(shí)現(xiàn)盡量分離;盡可能清晰地表

達(dá)軟件的層次結(jié)構(gòu)。

為此提供兩組典型項(xiàng)目的文件組織結(jié)構(gòu)范例作為參考:

1.5.1功能模塊/庫(kù)的文件組織形式

顯而易見(jiàn),編寫(xiě)功能模塊和庫(kù)的主要目的是為其它模塊提供?套完成特定功能的API,

這類(lèi)項(xiàng)目的文件組織結(jié)構(gòu)通常如下圖所示:

LibSample

Ocontrib

;0doc

Oinclude

:曰lib

1makefile

Osrc

■"Otest

其中:

Contrib:當(dāng)前項(xiàng)目所依賴的所有第三方軟件,可以按類(lèi)別分設(shè)子目錄。

Doc:項(xiàng)目文檔

Include;聲明外部接口的所有頭文件和內(nèi)聯(lián)定義文件。

第13頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

Lib:編譯好的二進(jìn)制庫(kù)文件,可以按編譯器、平臺(tái)分設(shè)子目錄。

Makefile:用于編譯項(xiàng)目的makefile文件和project文件等。可以按編譯器、平臺(tái)分

設(shè)子目錄。

Src:所有實(shí)現(xiàn)文件和聲明內(nèi)部接口的頭文件、內(nèi)聯(lián)定義文件???按功能劃分;支持編譯

器、平臺(tái)等類(lèi)別分設(shè)子目錄。

Test:存放測(cè)試用代碼的目錄。

1.5.2應(yīng)用程序的文件組織形式

與功能模塊不同,應(yīng)用程序是一個(gè)交付給最終用于使用的、可以獨(dú)立運(yùn)行并提供完整功

能的軟件產(chǎn)品,它通常不提供編程接口,應(yīng)用程序的典型文件組織形式如下圖所示:

&

?

?AppSample

)

;contrib

?

?doc

.-

.…

.?makefile

.-

..

..setup

.-

.…

.?src

.-

.

Contrib:當(dāng)前項(xiàng)目所依賴的所有第三方軟件,可以按類(lèi)別分設(shè)子目錄。

Doc:項(xiàng)目文檔

Makefile:用于編譯項(xiàng)目的makefile義件和project義件等。可以按編譯器、平臺(tái)分

設(shè)子目錄。

Setup:安裝程序,以及制作安裝程序所需要的項(xiàng)目文件和角本。

Src:所有源文件??砂垂δ軇澐?;支持編譯器、平臺(tái)等類(lèi)別分設(shè)子目錄。

Test:存放測(cè)試用代碼的目錄。

2命名規(guī)則

如果想要有效的管理一個(gè)稍微復(fù)雜一點(diǎn)的體系,針時(shí)其中事物的一套統(tǒng)一、帶層次

結(jié)構(gòu)、清晰明了的命名準(zhǔn)則就是必不可少而旦非常好用的工具。

活躍在生物學(xué)、化學(xué)、軍隊(duì)、監(jiān)獄、黑社會(huì)、恐怖組織等各個(gè)領(lǐng)域內(nèi)的大量有識(shí)先

輩們都曾經(jīng)無(wú)數(shù)次地以實(shí)際行動(dòng)證明了以上公理的正確性。除了上帝(設(shè)它可以改變世

間萬(wàn)物的秩序)以外,相信沒(méi)人有實(shí)力對(duì)它不屑一顧。

在軟件開(kāi)發(fā)這一高度抽象而且十分復(fù)雜的活動(dòng)中,命名規(guī)則的重要性更顯得尤為突

第14頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

出。一套定義良好并且完整的、在整個(gè)項(xiàng)目中統(tǒng)一使用的命名規(guī)范將大大提升源代碼的

可讀性和軟件的可維護(hù)性C

a)在引入細(xì)節(jié)之前,先說(shuō)明一下命名規(guī)范的整體原則:

b)同一性

C)在編寫(xiě)一個(gè)子模塊或派生類(lèi)的時(shí)候,要遵循其基類(lèi)或整體模塊的命名風(fēng)格,保

持命名風(fēng)格在整個(gè)模塊中的同一性。

d)標(biāo)識(shí)符組成

e)標(biāo)識(shí)符采用英文單詞或其組合,應(yīng)當(dāng)直觀且可以拼讀,可望文知意,用詞應(yīng)當(dāng)

準(zhǔn)確。

D最小化長(zhǎng)度&&最大化信息量原則

g)在保持一個(gè)標(biāo)識(shí)符意思明確的同時(shí),應(yīng)當(dāng)盡量縮短其長(zhǎng)度。

h)避免過(guò)于相似

i)不要出現(xiàn)僅靠大小寫(xiě)區(qū)分的相似的標(biāo)識(shí)符,例如“i”與"I","function"與

“Function”等等。

j)避免在不同級(jí)別的作用域中重名

k)程序中不要出現(xiàn)名字完全相同的局部變量和全局變量,盡管兩者的作用域不同

而不會(huì)發(fā)生語(yǔ)法錯(cuò)誤,但容易使人誤解。

1)正確命名具有互尺意義的標(biāo)識(shí)符

m)用正確的反義詞組命名具有互斥意義的標(biāo)識(shí)符,如:"nMinValue.."nMaxValue",

"GetNarne().."SetName().....

n)避免名字中出現(xiàn)數(shù)字編號(hào)

盡量避免名字中出現(xiàn)數(shù)字編號(hào),如Valuel,Value2等,除非邏輯上的確需要編號(hào)。這是為

了防止程序員偷懶,不肯為命名動(dòng)腦筋而導(dǎo)致產(chǎn)生無(wú)意義的名字(因?yàn)橛脭?shù)字編號(hào)最省

事)。

2.1類(lèi)/結(jié)構(gòu)

a)除了異常類(lèi)等個(gè)別情況(不希望被用戶看作一個(gè)普通的、正常的類(lèi)之情況)外,

C++類(lèi)/結(jié)構(gòu)的命名應(yīng)該遵循以下準(zhǔn)則:

第15頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

b)C++類(lèi)/結(jié)構(gòu)的命名

類(lèi)的名稱(chēng)都要以大寫(xiě)字母“C”開(kāi)頭,后跟一個(gè)或多個(gè)單詞。為便于界定,每個(gè)單詞

的首字母要大寫(xiě)。

特別地,由于界面與其它類(lèi)概念上的巨大差別,規(guī)定界面類(lèi)要以大寫(xiě)字母“I”開(kāi)頭。

界面類(lèi)描述一個(gè)服務(wù)(一組被命名的操作集合),在C++中,界面與其它類(lèi)間的最大

區(qū)別在于,界面類(lèi)中不包含任何數(shù)據(jù)結(jié)構(gòu)(屬性),也不包括任何具體的操作和實(shí)現(xiàn),界

面類(lèi)通常僅包含一組純虛函數(shù)的聲明而不包含任何實(shí)現(xiàn)和數(shù)據(jù)。在一些其它語(yǔ)言中,一

個(gè)界面也被稱(chēng)作一個(gè)接口及其實(shí)現(xiàn)契約。

另一個(gè)與接口相似的概念是類(lèi)型,類(lèi)型與接口的不同點(diǎn)在于,類(lèi)型可以包含部分接

口的實(shí)現(xiàn)或包含些接口默認(rèn)的或不完整的實(shí)現(xiàn),個(gè)類(lèi)型也可以包含些屬性。規(guī)定

類(lèi)型類(lèi)要以大寫(xiě)字母“T”開(kāi)頭。例如:轎車(chē)類(lèi)型叮Car”、線程類(lèi)型Thread”等等。

在C++種,類(lèi)型類(lèi)也叫做結(jié)點(diǎn)類(lèi)。

在現(xiàn)實(shí)世界中,類(lèi)型和界面的區(qū)別往往比較微妙。在真實(shí)代碼中,有些類(lèi)除了包含

純虛函數(shù)以外,也可能同時(shí)包含幾個(gè)帶簡(jiǎn)單默認(rèn)實(shí)現(xiàn)的普通虛函數(shù)。例如:某個(gè)類(lèi)中可

能包含一個(gè)(非純虛)虛方法IsLoadable,并定義了該方法的默認(rèn)實(shí)現(xiàn):returnfalse;。

我們不難找出很多類(lèi)似的例子。

以下是一些類(lèi)型和界面的界定策略:

如果一個(gè)類(lèi)中包含靜態(tài)成員,則一定不是界面

如果一個(gè)類(lèi)中包含屬性,則一定不是界面

如果一個(gè)類(lèi)中包含非虛方法,則一定不是界面

如果一個(gè)類(lèi)中包含非公有成員,則一定不是界面

如果一個(gè)類(lèi)中包含模板方法,則一定不是界面。

這里的模板方法是指那些調(diào)用了該類(lèi)中其它虛函數(shù)的成員,這樣的方法通常用于實(shí)

現(xiàn)針對(duì)某種應(yīng)用的算法框架,這顯然超出了界面的范疇。

在C++中,模板方法的另一個(gè)意思通常指使用函數(shù)模板的成員,由于C++函數(shù)模板

只能是非虛的,所以包含這種方法的類(lèi)也一定不是界面。

通常定義那些不十分明確的接口時(shí),先將其指定為一個(gè)界面,必要時(shí)再把它提升為

第16頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

一個(gè)類(lèi)型。

模板類(lèi)的命名規(guī)范與實(shí)體類(lèi)相同。

C)為了更好地表示代碼段之間的相關(guān)性和增加程序的可讀性。我們經(jīng)常會(huì)把一段

僅在某個(gè)函數(shù)內(nèi)反復(fù)使用的代碼片段封裝為一個(gè)函數(shù)對(duì)象,并定義在這個(gè)函數(shù)

體內(nèi)。對(duì)于這類(lèi)實(shí)現(xiàn)功能簡(jiǎn)單,并且主要通過(guò)operator。來(lái)使用的類(lèi)/結(jié)構(gòu),其

名稱(chēng)應(yīng)當(dāng)以大寫(xiě)字母“FO”開(kāi)頭,如:"FONameChecker”等。

d)推薦的組成形式

類(lèi)的命名推薦用“名詞“或“形容詞+名詞”的形式,例如:nCAnalyzer","CFaslVector';

''IUnknown11,^DEWriter';"TTimer'1,"TThread1'....

a)不同于C十十類(lèi)的暇念,傳統(tǒng)的C結(jié)構(gòu)體只是種將組數(shù)據(jù)捆綁在起的方

式。傳統(tǒng)C結(jié)構(gòu)體的命名規(guī)則為:

b)傳統(tǒng)C結(jié)構(gòu)體的命名

傳統(tǒng)C結(jié)構(gòu)體的名稱(chēng)全部由大寫(xiě)字母組成,單詞間使用下劃線界定,例如:

"SERVICE_STATUS","DRIVERJNFO"....

2.2函數(shù)

2.2.1函數(shù)的命名

函數(shù)的名稱(chēng)由一個(gè)或多個(gè)單詞組成。為便于界定,每個(gè)單詞的首字母要大寫(xiě)。

2.2.2推薦的組成形式

函數(shù)名應(yīng)當(dāng)使用“動(dòng)詞“或者”動(dòng)詞+名詞”(動(dòng)賓詞組)的形式。例如:

,,GetName()"."SetVaIue()',."Erase()".,'Rese^e().....

2.2.3保護(hù)成員函數(shù)

保護(hù)成員函數(shù)的開(kāi)頭應(yīng)當(dāng)加上一個(gè)下劃線以示區(qū)別,例如:”_SeiStale()..…

2.2.4私有成員函數(shù)

類(lèi)似地,私有成員函數(shù)的開(kāi)頭應(yīng)當(dāng)加上兩個(gè)下劃線,例如:--Destroylmpi)..…

2.2.5私有成員函數(shù)的層次結(jié)構(gòu)表示

通常來(lái)說(shuō),在一個(gè)類(lèi)中,公有方法、保護(hù)方法和私有方法所完成的任務(wù)總是呈現(xiàn)一

種逐級(jí)依次細(xì)化的層次結(jié)構(gòu)(意即:保護(hù)方法所實(shí)現(xiàn)的功能通常比該類(lèi)中的公有方法更

第17頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

為細(xì)小瑣碎;類(lèi)似地,私有方法的功能也比其保護(hù)方法更具原子性)。

因此,對(duì)于遵循以上規(guī)則,并且功能較為復(fù)雜的類(lèi),在按照“公有、保護(hù)、私有”的

三級(jí)形式劃分以后,如果其私有成員中仍然存在明顯不同的功能粒度,則可以通過(guò)追加

更多下劃線前綴的形式予以表示。

例如:由三個(gè)下劃線開(kāi)頭的私有方法”—PushCdr”就要比同一類(lèi)中,僅由兩個(gè)下劃線

開(kāi)頭的私有方法“_MergeConCall”所完成的功能粒度更細(xì)小、更瑣碎;而四個(gè)下劃線

開(kāi)頭的“CalcCompensate"則比"—PushCdr"完成的功能更具原子性。

如果發(fā)現(xiàn)類(lèi)中的功能層數(shù)太多(從公有方法到最“原子”的私有方法間,一般不應(yīng)該超

過(guò)7層),那通常反應(yīng)一個(gè)不良的設(shè)計(jì)。此時(shí)請(qǐng)檢查這個(gè)類(lèi)的功能是否過(guò)于臃腫,已使

接口顯得不太清晰。另外一個(gè)常見(jiàn)的問(wèn)題是將無(wú)需訪問(wèn)該類(lèi)中私有或保護(hù)成員的功能

定義成了方法。第一個(gè)問(wèn)題可以通過(guò)重新劃分類(lèi)層次結(jié)構(gòu)或?qū)⒁粋€(gè)類(lèi)分裂為多個(gè)類(lèi)等方

法解決。對(duì)于第二個(gè)問(wèn)題,由于這些方法無(wú)需訪問(wèn)受限成員,大多數(shù)時(shí)候都可以把它們

轉(zhuǎn)變成局部函數(shù)(放在無(wú)名空間或使用“static”前綴定義)。

2.2.6成員函數(shù)的下劃線后綴命名

對(duì)一些本應(yīng)該作為保護(hù)或私有成員的函數(shù),由于設(shè)計(jì)方面的其它考慮(例如:靈活

性、功能等方面)將其提升為公有成員的,應(yīng)該在其后面添加與其原本訪問(wèn)控制級(jí)別相

應(yīng)的下劃線后綴。

另外,對(duì)于其它不推薦直接使用的成員函數(shù)(例如:會(huì)引起兼容性或可移植性方面

問(wèn)題的函數(shù)),也應(yīng)當(dāng)在其后面加相應(yīng)下劃線提示。

例如:nioctl_()",,,SetSysOpt_(),\"GetSysOpt-O11,"PreParser_()M....

2.2.7回調(diào)和事件處理函數(shù)

回調(diào)和事件處理函數(shù)習(xí)慣以單詞“On”開(kāi)頭。例如:10nTimer()”.“0nExil()..…

2.2.8虛函數(shù)

回調(diào)函數(shù)以外的虛函數(shù)習(xí)慣以“Do”開(kāi)頭,如:"DoRefresh()”."_DoEncryption().....

2.3變量

a)變量應(yīng)該是程序中使用最多的標(biāo)識(shí)符了,變量的命名規(guī)范可能是一套C++命名

準(zhǔn)則中最重要的部分:

第18頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

b)變量的命名

變量名由作用域前綴+類(lèi)型前綴+一個(gè)或多個(gè)單詞組成。為便于界定,每個(gè)單詞的

首字母要大寫(xiě)。

c)對(duì)于某些用途簡(jiǎn)單明了的局部變量,也可.以使用簡(jiǎn)化的方式,如:i.jkx.y……

d)作用域前綴

作用域前綴標(biāo)明說(shuō)明

一個(gè)變量的可見(jiàn)

范圍。作用域可

以有如下幾種:

前綴

無(wú)局部變量

m_類(lèi)的成員變量(member)

sm_類(lèi)的靜態(tài)成員變量(staticmember)

s_靜態(tài)變量(static)

g-外部全局變量(global)

sg_靜態(tài)全局變量(staticglobal)

gg-進(jìn)程或動(dòng)態(tài)鏈接庫(kù)間共享的全局變量(globalglobal)

除非不得已,否則應(yīng)該盡可能少使用全局變量。

關(guān)于全局變量和局部靜態(tài)變量的依賴性問(wèn)題和初始化時(shí)的線程安全性問(wèn)題

e)類(lèi)型前綴

類(lèi)型前綴標(biāo)明一說(shuō)明

個(gè)變量的類(lèi)型,

可以有如下幾種:

前綴

n整型和位域變量(number)

C枚舉型變量(enumeration)

C字符型變量(char)

b布爾型變量(bool)

f浮點(diǎn)型變量(float)

P指針型變量和迭代子(pointer)

第19頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

pfn指向函數(shù)的指針變量或指向函數(shù)對(duì)象的指針(poimeroffunction)

pm指向成員的指針(pointerofmember)

引用(reference),此前綴對(duì)「常引用(constreference)來(lái)說(shuō)可以省略

r

g數(shù)組(grid)

fo函數(shù)對(duì)象(FunctionObject)

類(lèi)的實(shí)例(instance)

對(duì)于經(jīng)常用到的類(lèi),也可以定義一些專(zhuān)門(mén)的前綴,如:s(d::string和

std::ws:ring類(lèi)的前綴可以定義為"st”,std::vector類(lèi)的前綴可以定義為V等

等。

對(duì)于經(jīng)常用到的類(lèi),也可以定義一些專(zhuān)門(mén)的前綴,如:std::stiing和

i

std::ws:ring類(lèi)的前綴可以定義為“st",std::vcctor類(lèi)的前綴可以定義為V等

等。

對(duì)于經(jīng)常用到的類(lèi),也可以定義一些專(zhuān)門(mén)的前綴,如:std::string和

std::ws:ring類(lèi)的前綴可以定義為"si",std::vector類(lèi)的前綴可以定義為"v"等

等。

0類(lèi)型前綴可以組合使用,例如“gc”表示字符數(shù)組,“ppn”表示指向整型的指針的

指針等等。

g)數(shù)值前綴的特別記法

以“n”作為所有說(shuō)明

整形前綴是由于

大多數(shù)情況下,

編寫(xiě)程序時(shí)不需

要過(guò)多考慮整形

的寬度,但在某

些場(chǎng)合中,整形

寬度是需要特別

注意并且仔細(xì)加

以區(qū)分的,這時(shí)

可使用如下記法

代替“n”前綴:

前綴

b字節(jié)(8bil,byte)

W字(16bit,word)

第20頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

dw雙字(32bil,doubleword)

qw-或-nn四字(64bit,quadword)

bf位域(bitfield)

對(duì)浮點(diǎn)型變量也說(shuō)明

有類(lèi)似記法如下:

前綴

f單精度浮點(diǎn)(32bit,float)

d雙精度浮點(diǎn)(64bil,double)

Id擴(kuò)展精度浮點(diǎn)(80bit,longdouble)

h)推薦的組成形式

變量的名字應(yīng)當(dāng)使用“名詞“或者”形容詞+名詞”。例如:nnCodcu,"m_nStateu,

“nMaxWidth"....

2.4常量

a)C++中引入了對(duì)常量的支持,常量的命名規(guī)則如下:

b)常量的命名

常量名由類(lèi)型前綴+全大寫(xiě)字母組成,單詞間通過(guò)下劃線來(lái)界定,如:

cDELIMITER,nMAX_BUFFER。

類(lèi)型前綴的定義與變量命名規(guī)則中的相同。

2.5枚舉、聯(lián)合、typedef

a)枚舉、聯(lián)合及typedef語(yǔ)句都是定義新類(lèi)型的簡(jiǎn)單手段,它們的命名規(guī)則為:

b)枚舉、聯(lián)合的命名

c)由枚舉、聯(lián)合語(yǔ)句定義的類(lèi)型名由全大寫(xiě)字母組成,單詞間通過(guò)下劃線來(lái)界定,

如:FAR_PROC,ERROR_TYPE....

d)typedef的命名

通常情況下,typedef語(yǔ)句定義的類(lèi)型名,其命名規(guī)范與枚舉及聯(lián)合語(yǔ)句相同,也采

第21頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

用大寫(xiě)字母加下劃線的原則。但是在定義一個(gè)模板類(lèi)實(shí)例的別名時(shí),為清晰起見(jiàn),

可以考慮酌情使用類(lèi)的命名原則,例如:

typedefCWriter<CSysFile>CSysFileWriter;

typcdefstd::vector<int>VINT;

2.6宏、枚舉值

a)宏、枚舉值的命名

宏和枚舉值由全大寫(xiě)字母組成,單詞間通過(guò)下劃線來(lái)界定,如:ERRORJJNKNOWN,

OP_STOP。

2.7名空間

C十十名空間是“類(lèi)”概念的種退化(大體相當(dāng)丁?只包含靜態(tài)成員且不能實(shí)例化的

類(lèi))。它的引入為標(biāo)識(shí)符名稱(chēng)提供了更好的層次結(jié)構(gòu),使標(biāo)識(shí)符看起來(lái)更加直觀簡(jiǎn)捷,同

時(shí)大大降低了名字沖突的可能性。

a)名空間的命名規(guī)則包括:

b)名空間的命名

名空間的名稱(chēng)不應(yīng)該過(guò)長(zhǎng),通常都使用縮寫(xiě)的形式來(lái)命名。

例如,一個(gè)圖形庫(kù)可以將其所有外部接口存放在名空間"GLIB”中,但是將其換成

“GRAPHIC_LIBRARY”就不大合適。

如果碰到較長(zhǎng)的名空間,為了簡(jiǎn)化程序書(shū)寫(xiě),可以使用:

namespacenew_name=old_long_name;

語(yǔ)句為其定義一個(gè)較短的別名。

3代碼風(fēng)格與版式

代碼風(fēng)格的重要性怎么強(qiáng)調(diào)都不過(guò)分。一段稍長(zhǎng)一點(diǎn)的無(wú)格式代碼基本上就是不可

讀的。

a)先來(lái)看一下這方面的整體原則:

b)空行的使用

空行起著分隔程序段落的作用??招械皿w(不過(guò)多也不過(guò)少)將使程序的右局更加

清晰??招胁粫?huì)浪費(fèi)內(nèi)存,雖然打印含有空行的程序是會(huì)多消耗一些紙張,但是值得。

第22頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

所以不要舍不得用空行。

在每個(gè)類(lèi)聲明之后、每個(gè)函數(shù)定義結(jié)束之后都要加2行空行。

c)在一個(gè)函數(shù)體內(nèi),邏揖上密切相關(guān)的語(yǔ)句之間不加空行,其它地方應(yīng)加空行分

隔。

d)語(yǔ)句與代碼行

一行代碼只做一件事情,如只定義一個(gè)變量,或只寫(xiě)一條語(yǔ)句。這樣的代碼容易閱

讀,并且方便于寫(xiě)注釋。

e)uif\Hfor\nwhile\ndo'\utry\"catchH等語(yǔ)句自占一行,執(zhí)行語(yǔ)句不得緊跟

其后。不論執(zhí)行語(yǔ)句有多少都要加。這樣可以防止書(shū)寫(xiě)和修改代碼時(shí)出

現(xiàn)失誤。

f)縮進(jìn)和對(duì)齊

程序的分界符和應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語(yǔ)句左

對(duì)齊。

”{}”之內(nèi)的代碼塊在右邊一個(gè)制表符(4個(gè)半角空格符)處左對(duì)齊。如果出

現(xiàn)嵌套的”{}”,則使用縮進(jìn)對(duì)齊。

如果一條語(yǔ)句會(huì)對(duì)其后的多條語(yǔ)句產(chǎn)生影響的話,應(yīng)該只對(duì)該語(yǔ)句做半縮進(jìn)(2個(gè)

半角空格符),以突出該語(yǔ)句。

例如:

void

Function(intx)

{

CScssionLockiLock(mxLock);

for(初始化;終止條件;更新)

H...

H...

}

第23頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

catch(constexception&err)

II...

}

catch(...)

(

n...

}

H...

)

g)最大長(zhǎng)度

h)代碼行最大長(zhǎng)度宜控制在70至80個(gè)字符以內(nèi)。代碼行不要過(guò)長(zhǎng),否則眼睛看

不過(guò)來(lái),也不便于打印(2009年更新:隨著GUI開(kāi)發(fā)環(huán)境和高分寬屏的普及,此

規(guī)則可以視情況適當(dāng)放寬)。

i)長(zhǎng)行拆分

長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作

符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語(yǔ)句可讀。

例如:

if((very_longer_variable1>=very_longer_variable2)

&&(very_longer_variable3<=very_longer_variable4)

&&(very_longer_variable5<=very_longer_variable6))

(

DoSomethingO;

)

j)空格的使用

關(guān)鍵字之后要留空格,象“const"、“virtual"、“inline"、“case”等關(guān)鍵字之后至少要

留一個(gè)空格,否則無(wú)法辨析關(guān)鍵字。象"if.Hfor'\nwhile'\"catch'1等關(guān)鍵字之后應(yīng)留

一個(gè)空格再跟左括號(hào)”(二以突出關(guān)鍵字。

函數(shù)名之后不要留空格,緊跟左括號(hào)"(';以與關(guān)鍵字區(qū)別。

向后緊跟。而向前緊跟,緊跟處不留空格。

第24頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

之后要留空格,如Function(x,y,z)。如果不是一行的結(jié)束符號(hào),其后要留空

格,如for(initialization;condition;upda(e)o

賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如”二“、二”、

“〈二“等二元操作符的前后應(yīng)當(dāng)加空格。

一元操作符如T、(地址運(yùn)算符)等前后不加空格c

象這類(lèi)操作符前后不加空格。

對(duì)于表達(dá)式比較長(zhǎng)的for、do、while>switch語(yǔ)句和if語(yǔ)句,為了緊湊起見(jiàn)可以

適當(dāng)?shù)厝サ粢恍┛崭?,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))等。

例如:

k)voi.Funu1(in.x.in.y.in.z);良好的風(fēng)格

voi.Func.(in.x,in.y,in.z);./.不良的風(fēng)格

/===========================================================

i.(yea.>.2000)./.良好的風(fēng)格

if(year>=2000)./.不良的風(fēng)格

i.((a>=b.&.(c〈=d))J.良好的風(fēng)格

if(a>=b&&c<=d)不良的風(fēng)格

/===========================================================

fo.(i=0.i<lO.i++)良好的風(fēng)格

for(i=0;i<10;i++)不良的風(fēng)格

fo.(..0...10..++./.過(guò)多的空格

/===========================================================

..……b;.良好的風(fēng)格

x=a<b?a:b;.不好的風(fēng)格

第25頁(yè)共66頁(yè)

工作文件文件編號(hào):

軟件設(shè)計(jì)規(guī)范版號(hào)/修改狀態(tài):A/0

/===========================================================

int...&y;.良好的風(fēng).

in.....y;.不良的風(fēng).

/.===========================================================

arrayf5..0;../.不要寫(xiě).arra..…0;

a.FunctionO;../.不要寫(xiě)...Function。;

b->Function();.不要寫(xiě)..-.Function。;

1)修飾符的位置

為便于理解,應(yīng)當(dāng)將修飾符和“&“緊靠數(shù)據(jù)類(lèi)型。

例如:

m)char*name;

int*x;

mty;//為避免y被誤解為指針,這里必須分行寫(xiě)。

int*Function(void*p);

n)注釋

注釋的位置應(yīng)與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方。

邊寫(xiě)代碼邊注釋?zhuān)薷拇a同時(shí)修改相應(yīng)的注釋?zhuān)员WC注釋與代碼的一致性。不

再有用的注釋要?jiǎng)h除。

注釋?xiě)?yīng)當(dāng)準(zhǔn)確、易懂,防止注釋

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論