版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六一游樂(lè)活動(dòng)策劃方案(3篇)
- 施工現(xiàn)場(chǎng)施工機(jī)械設(shè)備管理制度
- 罕見(jiàn)腫瘤的個(gè)體化治療長(zhǎng)期生存數(shù)據(jù)分析與治療策略優(yōu)化
- 2026屆四川省成都市金牛區(qū)外國(guó)語(yǔ)學(xué)校數(shù)學(xué)高二上期末監(jiān)測(cè)模擬試題含解析
- 2026新疆兵團(tuán)第十三師淖毛湖農(nóng)場(chǎng)幼兒園招聘編外教師備考題庫(kù)(1人)有答案詳解
- 2026內(nèi)蒙古錫林郭勒盟西烏珠穆沁旗招聘醫(yī)療衛(wèi)生專(zhuān)業(yè)技術(shù)人員48人備考題庫(kù)及參考答案詳解一套
- 2026上半年貴州事業(yè)單位聯(lián)考玉屏侗族自治縣招聘41人備考題庫(kù)完整答案詳解
- 行管局管理財(cái)務(wù)制度
- 紀(jì)委涉案款專(zhuān)戶財(cái)務(wù)制度
- 財(cái)務(wù)制度設(shè)計(jì)具體流程
- 2025年山東省濟(jì)南市中考英語(yǔ)真題卷含答案解析
- 侍酒師崗前實(shí)操操作考核試卷含答案
- 2025-2026學(xué)年六年級(jí)英語(yǔ)上冊(cè)期末試題卷(含聽(tīng)力音頻)
- 【一年級(jí)】【數(shù)學(xué)】【秋季上】期末家長(zhǎng)會(huì):花開(kāi)有“數(shù)”一年級(jí)路【課件】
- 2025四川成都高新區(qū)婦女兒童醫(yī)院招聘技師、醫(yī)生助理招聘5人參考題庫(kù)附答案解析
- 2026年高考語(yǔ)文復(fù)習(xí)散文閱讀(四)
- 眼部艾灸課件
- 學(xué)堂在線 雨課堂 學(xué)堂云 實(shí)繩結(jié)技術(shù) 期末考試答案
- 低空經(jīng)濟(jì)應(yīng)用場(chǎng)景:創(chuàng)新與挑戰(zhàn)
- 乘務(wù)長(zhǎng)崗位面試技巧與實(shí)戰(zhàn)經(jīng)驗(yàn)分享
- 氣道濕化方法與指南
評(píng)論
0/150
提交評(píng)論