軟件部項(xiàng)目管理項(xiàng)目開發(fā)規(guī)范代碼編寫要求_第1頁
軟件部項(xiàng)目管理項(xiàng)目開發(fā)規(guī)范代碼編寫要求_第2頁
軟件部項(xiàng)目管理項(xiàng)目開發(fā)規(guī)范代碼編寫要求_第3頁
軟件部項(xiàng)目管理項(xiàng)目開發(fā)規(guī)范代碼編寫要求_第4頁
軟件部項(xiàng)目管理項(xiàng)目開發(fā)規(guī)范代碼編寫要求_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 DOCPROPERTY Company * MERGEFORMAT 傲騰通信科技(上海)部門名稱 DOCPROPERTY Department * MERGEFORMAT 軟件部保密級別文檔編號SPM-PDS-ER-001項(xiàng)目名稱 SUBJECT * MERGEFORMAT 軟件部項(xiàng)目管理項(xiàng)目主管 DOCPROPERTY Manager * MERGEFORMAT Reed作者名字 AUTHOR * MERGEFORMAT Daniel創(chuàng)建時(shí)間 CREATEDATE * MERGEFORMAT 2001-11-19 13:50初審人員軟件部初審時(shí)間2001-12-12最后保存時(shí)間 SAVED

2、ATE * MERGEFORMAT 2001-12-12 18:45當(dāng)前文檔版本 SUBJECT * MERGEFORMAT 軟件部項(xiàng)目管理 DOCPROPERTY Category * MERGEFORMAT 項(xiàng)目開發(fā)規(guī)范: KEYWORDS * MERGEFORMAT 代碼編寫要求歷史記錄日期版本作者行為說明2001-11-19Daniel創(chuàng)建2001-12-12審核由軟件部全體人員共同審核通過目 錄 TOC o 1-7 h z HYPERLINK l _Toc532816965 歷史記錄 PAGEREF _Toc532816965 h 2 HYPERLINK l _Toc53281696

3、6 目 錄 PAGEREF _Toc532816966 h 3 HYPERLINK l _Toc532816967 項(xiàng)目開發(fā)規(guī)范:代碼編寫要求 PAGEREF _Toc532816967 h 6 HYPERLINK l _Toc532816968 1 引言 PAGEREF _Toc532816968 h 6 HYPERLINK l _Toc532816969 編寫目的 PAGEREF _Toc532816969 h 6 HYPERLINK l _Toc532816970 背景 PAGEREF _Toc532816970 h 6 HYPERLINK l _Toc532816971 定義 PAGE

4、REF _Toc532816971 h 6 HYPERLINK l _Toc532816972 參考資料 PAGEREF _Toc532816972 h 6 HYPERLINK l _Toc532816973 2 安裝盤的創(chuàng)建 PAGEREF _Toc532816973 h 6 HYPERLINK l _Toc532816974 3 注冊表的使用 PAGEREF _Toc532816974 h 7 HYPERLINK l _Toc532816975 4 簡單加密算法 PAGEREF _Toc532816975 h 7 HYPERLINK l _Toc532816976 5 Delphi代碼編寫

5、標(biāo)準(zhǔn) PAGEREF _Toc532816976 h 7 HYPERLINK l _Toc532816977 通用源代碼格式規(guī)則 PAGEREF _Toc532816977 h 7 HYPERLINK l _Toc532816978 縮格 PAGEREF _Toc532816978 h 7 HYPERLINK l _Toc532816979 頁邊空格 PAGEREF _Toc532816979 h 7 HYPERLINK l _Toc532816980 5.1.3 BeginEnd 配對 PAGEREF _Toc532816980 h 7 HYPERLINK l _Toc532816981 注

6、釋規(guī)范 PAGEREF _Toc532816981 h 8 HYPERLINK l _Toc532816982 文件注釋 PAGEREF _Toc532816982 h 8 HYPERLINK l _Toc532816983 函數(shù)注釋 PAGEREF _Toc532816983 h 8 HYPERLINK l _Toc532816984 過程注釋 PAGEREF _Toc532816984 h 8 HYPERLINK l _Toc532816985 一般注釋 PAGEREF _Toc532816985 h 9 HYPERLINK l _Toc532816986 5.2 Object Pasca

7、l語言 PAGEREF _Toc532816986 h 9 HYPERLINK l _Toc532816987 括號 PAGEREF _Toc532816987 h 9 HYPERLINK l _Toc532816988 保留字和關(guān)鍵字 PAGEREF _Toc532816988 h 9 HYPERLINK l _Toc532816989 過程和函數(shù)(例程) PAGEREF _Toc532816989 h 9 HYPERLINK l _Toc532816990 命名/格式化 PAGEREF _Toc532816990 h 9 HYPERLINK l _Toc532816991 形式參數(shù) PAG

8、EREF _Toc532816991 h 9 HYPERLINK l _Toc532816992 格式化 PAGEREF _Toc532816992 h 9 HYPERLINK l _Toc532816993 命名 PAGEREF _Toc532816993 h 10 HYPERLINK l _Toc532816994 參數(shù)的排序 PAGEREF _Toc532816994 h 10 HYPERLINK l _Toc532816995 常量參數(shù) PAGEREF _Toc532816995 h 10 HYPERLINK l _Toc532816996 名稱的沖突 PAGEREF _Toc5328

9、16996 h 10 HYPERLINK l _Toc532816997 變量 PAGEREF _Toc532816997 h 10 HYPERLINK l _Toc532816998 變量的命名和格式 PAGEREF _Toc532816998 h 10 HYPERLINK l _Toc532816999 局部變量 PAGEREF _Toc532816999 h 10 HYPERLINK l _Toc532817000 全局變量的使用 PAGEREF _Toc532817000 h 11 HYPERLINK l _Toc532817001 類型 PAGEREF _Toc532817001 h

10、 11 HYPERLINK l _Toc532817002 大寫約定 PAGEREF _Toc532817002 h 11 HYPERLINK l _Toc532817003 浮點(diǎn)指針類型 PAGEREF _Toc532817003 h 11 HYPERLINK l _Toc532817004 枚舉類型 PAGEREF _Toc532817004 h 11 HYPERLINK l _Toc532817005 變數(shù)和ole變數(shù)類型 PAGEREF _Toc532817005 h 11 HYPERLINK l _Toc532817006 結(jié)構(gòu)類型 PAGEREF _Toc532817006 h 1

11、2 HYPERLINK l _Toc532817007 數(shù)組類型 PAGEREF _Toc532817007 h 12 HYPERLINK l _Toc532817008 記錄類型 PAGEREF _Toc532817008 h 12 HYPERLINK l _Toc532817009 語句 PAGEREF _Toc532817009 h 12 HYPERLINK l _Toc532817010 if 語句 PAGEREF _Toc532817010 h 12 HYPERLINK l _Toc532817011 case 語句 PAGEREF _Toc532817011 h 12 HYPERL

12、INK l _Toc532817012 一般性話題 PAGEREF _Toc532817012 h 12 HYPERLINK l _Toc532817013 格式 PAGEREF _Toc532817013 h 13 HYPERLINK l _Toc532817014 while 語句 PAGEREF _Toc532817014 h 13 HYPERLINK l _Toc532817015 for語句 PAGEREF _Toc532817015 h 13 HYPERLINK l _Toc532817016 repeat語句 PAGEREF _Toc532817016 h 13 HYPERLIN

13、K l _Toc532817017 with語句 PAGEREF _Toc532817017 h 13 HYPERLINK l _Toc532817018 一般話題 PAGEREF _Toc532817018 h 13 HYPERLINK l _Toc532817019 格式 PAGEREF _Toc532817019 h 13 HYPERLINK l _Toc532817020 結(jié)構(gòu)異常處理 PAGEREF _Toc532817020 h 13 HYPERLINK l _Toc532817021 一般話題 PAGEREF _Toc532817021 h 13 HYPERLINK l _Toc

14、532817022 .2 tryfinally的使用 PAGEREF _Toc532817022 h 13 HYPERLINK l _Toc532817023 tryexcept的使用 PAGEREF _Toc532817023 h 14 HYPERLINK l _Toc532817024 tryexceptelse的使用 PAGEREF _Toc532817024 h 14 HYPERLINK l _Toc532817025 類類型 PAGEREF _Toc532817025 h 14 HYPERLINK l _Toc532817026 命名和格式 PAGEREF _Toc532817026

15、 h 14 HYPERLINK l _Toc532817027 域 PAGEREF _Toc532817027 h 14 HYPERLINK l _Toc532817028 命名/格式 PAGEREF _Toc532817028 h 14 HYPERLINK l _Toc532817029 可視化 PAGEREF _Toc532817029 h 15 HYPERLINK l _Toc532817030 方法 PAGEREF _Toc532817030 h 15 HYPERLINK l _Toc532817031 命名/格式 PAGEREF _Toc532817031 h 15 HYPERLIN

16、K l _Toc532817032 使用靜態(tài)的方法 PAGEREF _Toc532817032 h 15 HYPERLINK l _Toc532817033 使用虛擬/動(dòng)態(tài)的方法 PAGEREF _Toc532817033 h 15 HYPERLINK l _Toc532817034 使用抽象的方法 PAGEREF _Toc532817034 h 15 HYPERLINK l _Toc532817035 屬性存取方法 PAGEREF _Toc532817035 h 15 HYPERLINK l _Toc532817036 屬性 PAGEREF _Toc532817036 h 15 HYPERL

17、INK l _Toc532817037 命名/格式 PAGEREF _Toc532817037 h 15 HYPERLINK l _Toc532817038 使用存取的方法 PAGEREF _Toc532817038 h 15 HYPERLINK l _Toc532817039 文件 PAGEREF _Toc532817039 h 16 HYPERLINK l _Toc532817040 工程文件 PAGEREF _Toc532817040 h 16 HYPERLINK l _Toc532817041 窗體文件 PAGEREF _Toc532817041 h 16 HYPERLINK l _T

18、oc532817042 數(shù)據(jù)模板文件 PAGEREF _Toc532817042 h 16 HYPERLINK l _Toc532817043 遠(yuǎn)端數(shù)據(jù)模板文件 PAGEREF _Toc532817043 h 16 HYPERLINK l _Toc532817044 5.3.5 Unit文件 PAGEREF _Toc532817044 h 16 HYPERLINK l _Toc532817045 通用Unit結(jié)構(gòu) PAGEREF _Toc532817045 h 16 HYPERLINK l _Toc532817046 .1 unit的名字 PAGEREF _Toc532817046 h 16

19、HYPERLINK l _Toc532817047 .2 uses子句 PAGEREF _Toc532817047 h 16 HYPERLINK l _Toc532817048 .3 interface部分 PAGEREF _Toc532817048 h 16 HYPERLINK l _Toc532817049 .4 implementation部分 PAGEREF _Toc532817049 h 16 HYPERLINK l _Toc532817050 .5 initialization部分 PAGEREF _Toc532817050 h 16 HYPERLINK l _Toc5328170

20、51 .6 finalization部分 PAGEREF _Toc532817051 h 17 HYPERLINK l _Toc532817052 窗體單元 PAGEREF _Toc532817052 h 17 HYPERLINK l _Toc532817053 數(shù)據(jù)模板單元 PAGEREF _Toc532817053 h 17 HYPERLINK l _Toc532817054 一般目的單元 PAGEREF _Toc532817054 h 17 HYPERLINK l _Toc532817055 構(gòu)件單元 PAGEREF _Toc532817055 h 17 HYPERLINK l _Toc

21、532817056 窗體和數(shù)據(jù)模板 PAGEREF _Toc532817056 h 17 HYPERLINK l _Toc532817057 窗體 PAGEREF _Toc532817057 h 17 HYPERLINK l _Toc532817058 窗體類型命名標(biāo)準(zhǔn) PAGEREF _Toc532817058 h 17 HYPERLINK l _Toc532817059 窗體實(shí)例命名標(biāo)準(zhǔn) PAGEREF _Toc532817059 h 17 HYPERLINK l _Toc532817060 自動(dòng)創(chuàng)建窗體 PAGEREF _Toc532817060 h 18 HYPERLINK l _To

22、c532817061 模式窗體實(shí)例化函數(shù) PAGEREF _Toc532817061 h 18 HYPERLINK l _Toc532817062 5.4.2 數(shù)據(jù)模板 PAGEREF _Toc532817062 h 19 HYPERLINK l _Toc532817063 數(shù)據(jù)模板命名標(biāo)準(zhǔn) PAGEREF _Toc532817063 h 19 HYPERLINK l _Toc532817064 數(shù)據(jù)模板實(shí)例命名標(biāo)準(zhǔn) PAGEREF _Toc532817064 h 19 HYPERLINK l _Toc532817065 包 PAGEREF _Toc532817065 h 19 HYPERLI

23、NK l _Toc532817066 使用運(yùn)行包和設(shè)計(jì)包的比較 PAGEREF _Toc532817066 h 19 HYPERLINK l _Toc532817067 文件命名標(biāo)準(zhǔn) PAGEREF _Toc532817067 h 19 HYPERLINK l _Toc532817068 構(gòu)件 PAGEREF _Toc532817068 h 20 HYPERLINK l _Toc532817069 用戶自定義構(gòu)件 PAGEREF _Toc532817069 h 20 HYPERLINK l _Toc532817070 構(gòu)件單元 PAGEREF _Toc532817070 h 20 HYPERL

24、INK l _Toc532817071 使用注冊單元 PAGEREF _Toc532817071 h 20 HYPERLINK l _Toc532817072 構(gòu)件實(shí)例命名約定 PAGEREF _Toc532817072 h 20 HYPERLINK l _Toc532817073 構(gòu)件的前綴 PAGEREF _Toc532817073 h 20 HYPERLINK l _Toc532817074 6 C+代碼編寫標(biāo)準(zhǔn) PAGEREF _Toc532817074 h 22 HYPERLINK l _Toc532817075 7 Java代碼編寫標(biāo)準(zhǔn) PAGEREF _Toc532817075

25、h 22 DOCPROPERTY Category * MERGEFORMAT 項(xiàng)目開發(fā)規(guī)范: KEYWORDS * MERGEFORMAT 代碼編寫要求引言編寫目的軟件開發(fā)的產(chǎn)品質(zhì)量水平,是一個(gè)由來已久的話題。而提高軟件企業(yè)的產(chǎn)品質(zhì)量水平,必須改進(jìn)軟件產(chǎn)品的開發(fā)過程。為此,制定了本規(guī)范用于指導(dǎo)軟件部的項(xiàng)目開發(fā)過程,從而提高達(dá)到提高產(chǎn)品質(zhì)量的目的。本規(guī)范以Rational Unified Process(簡稱RUP) 軟件工程過程為藍(lán)本,結(jié)合部門的實(shí)際情況而選擇修改,從而使之適應(yīng)當(dāng)前應(yīng)用級系統(tǒng)設(shè)計(jì)開發(fā)的需要。本文檔主要對程序開發(fā)人員的代碼編寫要求做了詳細(xì)的規(guī)定,以使得整個(gè)開發(fā)小組所編寫的代碼保

26、持一致的風(fēng)格。本文檔提供給軟件部全體成員參考。背景軟件部在基本完成了成都智能交通信息中心系統(tǒng)之后發(fā)現(xiàn),我們需要一套軟件開發(fā)規(guī)范來指導(dǎo)項(xiàng)目組的開發(fā)過程,使得項(xiàng)目開發(fā)過程具有可重復(fù)性,為此啟動(dòng)了該項(xiàng)目軟件部項(xiàng)目管理。項(xiàng)目的名稱:軟件部項(xiàng)目管理(Software department Project Management,簡稱SPM)任務(wù)提出者:傲騰通信科技(上海)軟件部任務(wù)開發(fā)者:傲騰通信科技(上海)軟件部產(chǎn)品使用地:上海產(chǎn)品使用者:傲騰通信科技(上海)軟件部定義術(shù)語縮略表示英文全稱解釋說明軟件部項(xiàng)目管理SPMOctant Software department Project Managemen

27、t傲騰通信科技(上海)軟件部為了規(guī)范項(xiàng)目開發(fā)流程而啟動(dòng)的一個(gè)項(xiàng)目項(xiàng)目開發(fā)規(guī)范PDSProject Development Specifications傲騰通信科技(上海)軟件部定義的一種文檔類別參考資料文檔編號文檔名稱作者版本來源(存放地)Delphi 4 Code ChineseBorland Inc. HYPERLINK :/ xapware /ddg C+編程指南Rational Inc.2000 HYPERLINK :/ rational wwJava編程指南Rational Inc.2000 HYPERLINK :/ rational 安裝盤的創(chuàng)建軟件部開發(fā)完成的所有系統(tǒng)都使用Ins

28、tallshield Express 3.03來制作安裝程序。為了保證快捷方式創(chuàng)建的一致性,現(xiàn)做如下規(guī)定,要求快捷方式都創(chuàng)建在:StartProgramsOctant Communications注冊表的使用為了統(tǒng)一注冊表的使用方式,現(xiàn)做如下規(guī)定,要求注冊表信息都存放在:HKEY_LOCAL_MACHINESOFTWAREOctant Communications簡單加密算法對于保密性要求不是很高的場合下,我們可以采用簡單加密算法逐位異或算法,具體算法如下:第一個(gè)字符同自己異或作為密文的第一個(gè)字節(jié),第二個(gè)字符同密文的第一個(gè)字節(jié)異或作為密文的第二個(gè)字節(jié),第三個(gè)字符統(tǒng)密文的第二個(gè)字節(jié)異或作為密文的

29、第三個(gè)字節(jié),依次類推;解密算法和加密算法完全一致。例子:原始字串:CDITS(43 44 49 54 53)加密過程:43 XOR 43=4344 XOR 43=0749 XOR 07=4E54 XOR 4E=1A53 XOR 1A=49密文:43 07 4E 1A 49Delphi代碼編寫標(biāo)準(zhǔn)通用源代碼格式規(guī)則縮格縮格是指在每一級有兩個(gè)空格。不要在源代碼中保留tab字符,這是因?yàn)閠ab字符會隨著不同用戶的不同設(shè)置和不同的資源管理工具(打印、文檔、版本控制等)而代表不同的寬度。你可以通過關(guān)閉Environment選項(xiàng)對話框中Editor頁上的“Use tab character”和“Optim

30、al fill”檢查框(通過Tools|Environment)來禁止保存tab字符。頁邊空格頁邊空格會被設(shè)置成80字符寬。通常,源碼不會超出這個(gè)邊界,但這個(gè)方針會有一些彈性。不管是否有可能,那些超出到另一行的語句會在一個(gè)逗號或其他操作符之后與前面的語句相連。當(dāng)一個(gè)語句被打斷相連時(shí),它應(yīng)比原來的那一行語句縮進(jìn)兩個(gè)字符。BeginEnd 配對Begin 子句應(yīng)寫在獨(dú)立的一行。例如,下面第一行是錯(cuò)誤的寫法而第二行是正確的。for I := 0 to 10 do begin/錯(cuò)誤,begin同for在同一行for I := 0 to 10 do/正確,begin出現(xiàn)在獨(dú)立的一行begin這個(gè)規(guī)則的例

31、外是當(dāng)begin子句的出現(xiàn)是作為一個(gè)else子句的一部分參考例子:if some statement thenbeginendelse beginsomeOtherStatement;end;end 語句永遠(yuǎn)出現(xiàn)在獨(dú)立的一行。當(dāng)begin語句不是一個(gè)else子句的一部分時(shí),相應(yīng)的end語句永遠(yuǎn)縮進(jìn)到與begin部分相對應(yīng)的位置。注釋規(guī)范文件注釋*版權(quán)所有 (C) 2000,2001 傲騰通訊*項(xiàng)目:模塊:描述:版本:日期: 更新:*函數(shù)注釋*功能說明:輸入?yún)?shù):輸出參數(shù):返回值:日期: 更新:*過程注釋*功能說明:日期: 更新:*一般注釋/ 對主要算法部分進(jìn)行描述Object Pascal語言

32、括號永遠(yuǎn)不要在括號與括號之間的字符中間留下空格。下面的例子示范了錯(cuò)誤的與正確地使用括號中的空格:CallProc( Aparameter );/錯(cuò)誤CallProc(Aparameter); /正確永遠(yuǎn)不要在一個(gè)語句中使用不必要的括號。括號只應(yīng)在源代碼中需要的地方使用。以下的例子示范了錯(cuò)誤和正確的使用:if (I = 42) then/錯(cuò)誤 多余的括號if (I = 42) or (J = 42) then/正確 需要括號保留字和關(guān)鍵字Object Pascal 保留字和關(guān)鍵字永遠(yuǎn)是全部小寫。過程和函數(shù)(例程)命名/格式化例程的名字永遠(yuǎn)應(yīng)該以大寫的字母開頭并且中間錯(cuò)落分明以便于可讀性。下面是一

33、個(gè)不正確格式的過程名稱: procedure thisisapoorlyformattedroutinename;下面是一個(gè)合適的大小寫例程名稱的例子: procedure ThisIsMuchMoreReadableRoutineName;例程的名稱應(yīng)該同它的內(nèi)容相符。一個(gè)會導(dǎo)致某個(gè)行為的例程應(yīng)以動(dòng)詞開頭。例如: procedure FormatHardDrive;一個(gè)用于設(shè)置輸入?yún)?shù)的例程應(yīng)以單詞set作為前綴,例如: procedure SetUserName;一個(gè)用來接收某個(gè)值的例程應(yīng)以單詞get作為前綴,例如: procedure GetUserName : string;形式參數(shù)格

34、式化如果有的話,相同類型的形參應(yīng)合并在一個(gè)語句中: procedure Foo(Param1, Param2, Param3 : Integer; Param4 : string);命名所有形參的名字應(yīng)是十分符合它們所代表的意義,特別是應(yīng)該以傳送到例程中的標(biāo)志符的名稱為基礎(chǔ)。一個(gè)好的參數(shù)名稱應(yīng)以字符A為前綴 例如: procedure SomeProc(AuserName : string; AuserAge : integer);“A”前綴按約定表示該參數(shù)的名稱是與類類型中的一個(gè)屬性或域的名稱相對應(yīng)的。參數(shù)的排序下面的形參的順序重點(diǎn)說明了注冊者調(diào)用約定調(diào)用的好處。 最常用的參數(shù)應(yīng)放在第一位,

35、其它的參數(shù)應(yīng)按從左到右的順序排列。 輸入?yún)?shù)列表應(yīng)放在輸出參數(shù)列表的左邊。 將通用的參數(shù)放在特殊參數(shù)的左邊,例如: procedure SomeProc(Aplanet, AContinent, Acountry, Astate, Acity) 排序有可能有些例外,比如事件的處理。類型為TObject的Sender參數(shù)經(jīng)常放在第一位。常量參數(shù)當(dāng)一個(gè)參數(shù)為記錄型、數(shù)組類型、ShortString、或接口類型并且在例程中不被改變時(shí),這些參數(shù)應(yīng)做上常量標(biāo)記。這樣做會讓編譯器更加有效率的產(chǎn)生有關(guān)這些不改變的參數(shù)的代碼。而例程中另外一些非變參數(shù)也可常量來傳送。盡管這樣做沒有產(chǎn)生任何效果和提高效率,這將會

36、給調(diào)用例程的使用者提供更多的信息。名稱的沖突當(dāng)使用擁有兩個(gè)名稱相同的例程的兩個(gè)單元時(shí),如果你調(diào)用該例程時(shí),在uses子句中排在后面的單元中的例程將會被調(diào)用。為了解決這種“在uses子句上的模糊”沖突,要在調(diào)用該例程時(shí)寫上相關(guān)的單元的前綴,例如: sysUtile.FindClose(SR);或 windows.FindClose(Handle);變量變量的命名和格式變量的命名應(yīng)以使用它們的目的相符。循環(huán)控制變量應(yīng)采用一個(gè)單獨(dú)的字符作為名字,比如 I,J,或K,也可以采用更加有意義的名字,比如 UserIndex。邏輯變量的名字應(yīng)能充分表達(dá)準(zhǔn)確的真或假的意思。局部變量一個(gè)過程中的局部變量應(yīng)遵循所

37、有其它變量的使用和命名約定。臨時(shí)變量的取名應(yīng)合理。如果必須的話,在一進(jìn)入例程就應(yīng)初始化局部變量。局部的AnsiString變量會自動(dòng)初始化為一個(gè)空的字符串。局部接口和派分接口類型變量將會自動(dòng)初始化為nil,并且局部變數(shù)和ole變數(shù)類型變量會自動(dòng)初始化為Unassigned全局變量的使用使用全局變量是不推薦的。但是,在某些時(shí)候還是必須使用,而且它們也只應(yīng)在必須使用的時(shí)候才使用。在這種時(shí)候,你應(yīng)努力只在一段上下文范圍內(nèi)使用全局變量。例如,一個(gè)全局變量只應(yīng)在一個(gè)單元的implemntation部分內(nèi)是全局的。如果打算在多個(gè)單元類使用全局?jǐn)?shù)據(jù),你應(yīng)將它們移到一個(gè)公共的單元中然后被其它所有單元使用。全局

38、變量可以在var子句中直接初始化為一個(gè)值。記住,所有的全局?jǐn)?shù)據(jù)會自動(dòng)初始化為0,因此不要將全局變量初始化為一個(gè)“空”值比如 0、nil、Unassigned、等等。這樣做的一個(gè)理由是因?yàn)榱愠跏蓟娜謹(jǐn)?shù)據(jù)在exe文件中不會占據(jù)任何空間。零初始化數(shù)據(jù)被存儲在一個(gè)虛擬的數(shù)據(jù)段,它在應(yīng)用程序啟動(dòng)后被分配在一段內(nèi)存中。非零初始化的全局?jǐn)?shù)據(jù)在硬盤的exe文件占用空間。類型大寫約定如果類型的名字是保留字,那么它應(yīng)全部小寫。Win32 API類型通常全部大寫,并且你必須遵循在Windows.pas或其他API單元中的詳細(xì)類型名稱的約定。對于其他變量名字,地一個(gè)字母應(yīng)為大寫,而其他字母應(yīng)錯(cuò)落有致。下面是一些例

39、子: var MyString : string; /保留字 WindowHandle : HWND; /Win32 API 類型 I : Integer; /在System單元中引進(jìn)的類型標(biāo)識符浮點(diǎn)指針類型不推薦使用Real類型,因?yàn)樗拇嬖谥皇菫榱讼蚯凹嫒菰缙诘腜ascal代碼。在通常情況下用Double來實(shí)現(xiàn)浮點(diǎn)指針的需要。并且,Double對處理器和總線而言是做了最優(yōu)化處理的,它也是IEEE中定義的標(biāo)準(zhǔn)數(shù)據(jù)格式。只有當(dāng)需要的范圍超出Double所定義的范圍時(shí)才使用Extended。Extended是intel定義的類型且在Java中不支持。只有當(dāng)浮點(diǎn)指針變量的實(shí)際字節(jié)大小有其意義時(shí)才使

40、用Single。(比如當(dāng)使用另一種語言的DLLs時(shí))。枚舉類型枚舉類型的名字需符合使用該類型的目的。該類型的名字需以字符T為前綴,以表明這是一個(gè)類型。枚舉類型中的標(biāo)識符列表必須包含兩個(gè)或三個(gè)字符的前綴來對應(yīng)于該枚舉類型的名字 例如: TsongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);一個(gè)枚舉類型的實(shí)例的名字應(yīng)與不要前綴的枚舉類型(SongType)相同,除非有更好的原因來賦予該變量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。變數(shù)和o

41、le變數(shù)類型通常不建議使用變數(shù)和Ole變數(shù)類型。但在只有運(yùn)行時(shí)刻才能知道數(shù)據(jù)類型的程序中必須使用該類型,這種情形多出現(xiàn)在COM和數(shù)據(jù)庫開發(fā)中。Ole變數(shù)使用在以COM為基礎(chǔ)的編程中例如自動(dòng)化和ActiveX控制,而變數(shù)使用在非COM的編程中,這是因?yàn)樽償?shù)可以十分有效地存儲本地Delphi字符串(同一個(gè)字符串變量一樣),但Ole變數(shù)會將所有的字符串轉(zhuǎn)換為Ole字符串(WideChar 字符串)并且并不實(shí)例運(yùn)算 它們永遠(yuǎn)拷貝。結(jié)構(gòu)類型數(shù)組類型數(shù)組類型的名字需符合它們使用的目的。該類型的名字必須加以前綴T。如果須聲明該數(shù)組類型的指針,那么該指針需加以前綴P而且應(yīng)立即聲明在該數(shù)組聲明的前面。例如: t

42、ype PCycleArray = TCycleArray; TCycleArray = array1100 of integer;在實(shí)際應(yīng)用中,數(shù)組的變量實(shí)例的名稱應(yīng)是其類型的名字去掉前綴T。記錄類型記錄類型的名字應(yīng)符合使用它們的目的。其類型的聲明應(yīng)加以前綴T。如果要聲明該記錄類型的指針,就應(yīng)加以前綴P并且應(yīng)緊靠在類型聲明的前面聲明。例如: type PEmployee = TEmployee; TEmployee = record EmployeeName : string; EmployeeRate : Double; end;語句if 語句在if/then/else語句中最常發(fā)生的行為

43、應(yīng)放在then子句中,而其它發(fā)生可能性較小的行為應(yīng)放在else子句中。盡量避免使用嵌套的if語句,在這種情形下應(yīng)用多個(gè)if語句來判斷各種可能。不要使用if嵌套超過五級深度。應(yīng)使代碼編寫得更加清晰、明了。不要在if語句中使用不必要的圓括號。如果在if語句中有多個(gè)條件需測試,這些條件應(yīng)按計(jì)算強(qiáng)度由少到多的順序從左到右排列。這樣做能使編譯器在編譯代碼時(shí)獲得布爾估算邏輯的捷徑,從而使你的代碼獲得最佳的優(yōu)化。舉例來說,如果條件1快過條件2,而條件2快過條件3,那么在if語句中的排列應(yīng)是: if 條件1 and 條件2 and 條件3 thencase 語句一般性話題在一個(gè)case語句中的各個(gè)獨(dú)立的單元應(yīng)

44、以數(shù)字或字母順序排列。每一個(gè)case單元的動(dòng)作行為應(yīng)保持簡單而不應(yīng)該超過四到五行代碼。如果所要執(zhí)行的動(dòng)作過于復(fù)雜應(yīng)采用獨(dú)立的過程或函數(shù)。Case語句中的else子句只有當(dāng)需要缺省行為或處理錯(cuò)誤時(shí)才使用。格式case語句應(yīng)遵循其它結(jié)構(gòu)的縮格和命名約定。while 語句在一個(gè)while語句中不建議使用exit過程來跳出循環(huán),盡量僅使用循環(huán)條件來跳出循環(huán)。在一個(gè)while循環(huán)中所用的初始化代碼應(yīng)緊靠在進(jìn)入while循環(huán)前面出現(xiàn)而不要被其它不相關(guān)的語句隔開。任何結(jié)束后的處理應(yīng)在循環(huán)之后立即進(jìn)行。for語句for語句只有當(dāng)循環(huán)次數(shù)已知的情況下才能取代while語句使用。repeat語句repeat語句的

45、使用同while語句一樣,并且遵循同樣的通用方針。with語句一般話題with語句應(yīng)節(jié)省使用,并且?guī)в写罅康木?。避免過度使用with語句并且在with語句中小心使用多個(gè)對象、記錄等等。例如: with Record1, Record2 do這些事情會使程序員感到困惑并難以發(fā)現(xiàn)問題所在。格式with 語句遵循本文檔所說明的命名約定和縮格的格式規(guī)則。結(jié)構(gòu)異常處理一般話題異常的處理大量地使用在錯(cuò)誤糾正和資源保護(hù)方面。這就是說一旦資源被分配,一個(gè)tryfinally必需加以使用來保證該資源被正確的釋放。這種異常的保護(hù)也是指在一個(gè)單元的initializition/finalization或一個(gè)對象的

46、constructor/destructor中進(jìn)行資源的分配和釋放。tryfinally的使用任何情形下,每一次的分配都應(yīng)跟隨一個(gè)tryfinally。舉例來說,下面的代碼會造成可能的錯(cuò)誤: SomeClass1 := TsomeClass.Create; SomeClass2 ;= TsomeClass.Create; try do some code finally SomeClass1.Free; SomeClass2.Free; end;一個(gè)更安全更合適的分配過程應(yīng)是: SomeClass1 := TSomeClass.Create; try SomeClass2 := TsomeCl

47、ass.Create; try do some code finally SomeClass2.Free; end; finally SomeClass1.Free; end;tryexcept的使用只有當(dāng)在異常被觸發(fā)而你想執(zhí)行一些任務(wù)時(shí)才使用tryexcept。通常,你沒有必要為了只是簡單地在屏幕上顯示一個(gè)錯(cuò)誤信息而使用tryexcept語句,因?yàn)檫@會被Application對象自動(dòng)執(zhí)行。如果你想在except子句中執(zhí)行完一些任務(wù)之后調(diào)用缺省的異常處理,使用raise來重新觸發(fā)異常到下一個(gè)句柄。tryexceptelse的使用tryexcept中的else子句不建議使用,因?yàn)樗鼤驍嗨械漠?/p>

48、常包括那些你沒有準(zhǔn)備的異常。類類型命名和格式類類型的名稱應(yīng)符合使用它們的目的。類型名字應(yīng)加以前綴T以表明這是一個(gè)類型的定義 例如:type Tcustomer = class(TObject)類型的實(shí)例通常是沒有前綴T的類型的名字 例如:var Customer :Tcustomer;注意:查閱“構(gòu)件類型的命名標(biāo)準(zhǔn)”來獲得更多有關(guān)構(gòu)件命名的信息。域命名/格式類的域名遵循與變量標(biāo)識符同樣的約定除了它們應(yīng)以F為前綴,來表明這是一個(gè)域的名稱。可視化所有的域都必需是私有的。想在類的范圍之外存取域得通過屬性來使用。方法命名/格式方法的命名應(yīng)遵循本文檔中有關(guān)過程和函數(shù)的約定敘述。使用靜態(tài)的方法如果使用一個(gè)

49、靜態(tài)的方法,那么該方法就不能被該類的后代類所繼承。使用虛擬/動(dòng)態(tài)的方法如果你打算該類的方法能被后代的類所繼承就得使用虛擬的方法。只有在該方法有多個(gè)繼承時(shí)(直接的或間接的)才使用動(dòng)態(tài)的方法。例如,一個(gè)類類型包含一個(gè)可繼承的方法,而100個(gè)后代類要繼承這種方法,那么這個(gè)方法就會動(dòng)態(tài)地產(chǎn)生為100個(gè)后代類使用的內(nèi)存。使用抽象的方法如果在一個(gè)類中使用抽象的方法,該類就不能被創(chuàng)建。只有在那些永遠(yuǎn)不會被創(chuàng)建的類中使用抽象的方法。屬性存取方法所有存取類的方法都只能出現(xiàn)在類的private或protected部分。屬性存取方法的命名應(yīng)遵循過程和函數(shù)的約定規(guī)則。讀取存取方法(方法讀取器)必需以單詞Get為前綴。

50、寫入存取方法(方法寫入器)必需以單詞Set為前綴。方法寫入器的參數(shù)的名字應(yīng)為Value,并且它的類型應(yīng)是它所操作的屬性的類型。例如: TSomeClass = class(TObject) private FsomeField : Integer; protected function GetSomeField : Integer; procedure SetSomeField(Value : Integer); public property SomeField : Integer read GetSomeField write SetSomeField; end;屬性命名/格式屬性如果是表

51、示為一個(gè)私有域的存取器的話,那么它的名字應(yīng)是它們所操作的域的名字除去解釋符F。屬性的名字應(yīng)是名詞,不是動(dòng)詞。屬性表示的是數(shù)據(jù),而方法表示的是行為。數(shù)組類型的名稱應(yīng)為復(fù)數(shù)。一般情況下屬性的名稱應(yīng)為單數(shù)。使用存取的方法盡管沒有要求,但還是建議盡量少地為一個(gè)表示私有域的屬性而使用寫入存取方法。文件工程文件工程文件應(yīng)取個(gè)描述性的名字。例如,Delphi 4開發(fā)者指南錯(cuò)誤管理器 的工程名字是:DDGBugs.dpr。一個(gè)有關(guān)系統(tǒng)信息的程序的名字就應(yīng)象 SysInfo.dpr。窗體文件一個(gè)窗體文件的取名應(yīng)可以描述使用該窗體的目的,并加以后綴Frm。例如,一個(gè)“關(guān)于”的窗體的文件名應(yīng)是AboutFrm.dp

52、r。主窗體的文件名應(yīng)是MainFrm.dpr。數(shù)據(jù)模板文件數(shù)據(jù)模板的取名應(yīng)能表示使用該數(shù)據(jù)模板的目的,它的名稱應(yīng)加以兩個(gè)字符的后綴DM。例如,自定義數(shù)據(jù)模板的文件名字應(yīng)為CustomersDM.dfm。遠(yuǎn)端數(shù)據(jù)模板文件遠(yuǎn)端數(shù)據(jù)模板的取名應(yīng)能表示使用該遠(yuǎn)端數(shù)據(jù)模板的目的,它的名稱應(yīng)加以三個(gè)字符的后綴RDM。例如,自定義遠(yuǎn)端數(shù)據(jù)模板的文件名字應(yīng)為CustomersRDM.dfm。Unit文件通用Unit結(jié)構(gòu)unit的名字Unit文件應(yīng)取一個(gè)可描述性的名字。例如,包含應(yīng)用程序主窗體的單元應(yīng)叫做MainFrm.pas。uses子句在interface部分的uses子句應(yīng)包含在interface部分中的

53、代碼所需要的單元。去掉那些Delphi可以自動(dòng)加入到程序中的單元。在implementation部分的uses子句應(yīng)只包含在implementation部分中的代碼所需要的單元的名字。去掉不必要的單元。interface部分interface部分應(yīng)包含只那些其它單元所需要存取類型的定義、變量、過程/函數(shù)的預(yù)定義等等。否則,就應(yīng)放在implementation部分定義。implementation部分implementation部分應(yīng)包含那些只在本單元中私用的類型定義、變量、過程/函數(shù)定義等等。initialization部分不要在initialization 部分放入耗時(shí)長的代碼,這將使程序的

54、第一個(gè)界面出現(xiàn)得比較緩慢。finalization部分在這里要保證釋放你在Initialization部分所分配的任何資源。窗體單元一個(gè)窗體的單元文件應(yīng)擁有與它所對應(yīng)的窗體文件同樣的名稱。例如,“關(guān)于”窗體的單元名稱應(yīng)為 AboutFrm.pas,而主窗體的單元名稱應(yīng)為MainFrm.pas。數(shù)據(jù)模板單元一個(gè)數(shù)據(jù)模板的單元文件應(yīng)擁有與它所對應(yīng)的數(shù)據(jù)模板文件同樣的名稱。例如,一個(gè)自定義數(shù)據(jù)模板單元的名稱應(yīng)為CustomersDM.pas。一般目的單元一般目的單元的取名應(yīng)符合使用該單元的目的。例如,一個(gè)實(shí)用程序單元取名為BugUtilities.pas。一個(gè)包含全局變量的單元取名為Customer

55、Globals.pas。注意,該單元的名字不能與它的工程中所使用的所有包中的單元的名字相同。不贊成使用一般的或通用的單元名字。構(gòu)件單元構(gòu)件單元應(yīng)放在獨(dú)立的目錄,以將它們同定義構(gòu)件組或構(gòu)件集合的單元區(qū)分開來。它們要永遠(yuǎn)同工程在不同的目錄。單元名字應(yīng)同它們的內(nèi)容相符。注意:查閱“用戶定義的構(gòu)件”部分來獲得更多有關(guān)構(gòu)件命名標(biāo)準(zhǔn)的信息。窗體和數(shù)據(jù)模板窗體窗體類型命名標(biāo)準(zhǔn)窗體類型的取名應(yīng)能表達(dá)使用該窗體的目的。類型定義應(yīng)加以前綴T。前綴后面跟隨著描述性的名字。最后,應(yīng)加以Form后綴來描述名字。例如,一個(gè)“關(guān)于”的窗體的類型的名字應(yīng)為: TAboutFrom = class(TForm);主窗體的定義為

56、: TMainForm = class(TForm);一個(gè)用戶接入窗體的名字應(yīng)象: TCustomerEntryForm = class(TForm);窗體實(shí)例命名標(biāo)準(zhǔn)窗體實(shí)例應(yīng)是沒有帶前綴T的相應(yīng)類的名字。例如,對應(yīng)于前面窗體類型而言,其實(shí)例的名字應(yīng)為: 類型名稱實(shí)例名稱 TAboutForm AboutForm TMainFormMainForm TCustomerEntryFormCustomerEntryForm自動(dòng)創(chuàng)建窗體只有主窗體可以是自動(dòng)創(chuàng)建的除非有其它更好的理由不這樣做。所有其它的窗體必需從工程選項(xiàng)對話框中的自動(dòng)創(chuàng)建列表中移走。查閱以下部分來獲得更多的信息。模式窗體實(shí)例化函數(shù)所

57、有的窗體單元都應(yīng)包含一個(gè)窗體實(shí)例化函數(shù),該函數(shù)用來創(chuàng)建、設(shè)置、模式地顯示窗體,并釋放窗體。該函數(shù)應(yīng)返回窗體的模式結(jié)果。該函數(shù)要傳遞的參數(shù)應(yīng)遵循本文檔指定的“參數(shù)傳遞”標(biāo)準(zhǔn)。通過這種方式封裝的函數(shù)性有助于代碼的再利用和維護(hù)。該窗體的變量要從單元中移走,并再窗體實(shí)例的函數(shù)中進(jìn)行本地式地定義。注意,這就意味著該窗體必需從工程/選項(xiàng)對話框中的自動(dòng)創(chuàng)建列表中剔除。參考本文檔后面的“自動(dòng)創(chuàng)建窗體”。例如,下面的單元展示了再GetUserData窗體中的一個(gè)函數(shù)。 unit UserDataFrm; interface useswindows, Messages, SysUtils, Classes, Gr

58、aphics, Controls, Forms,Dialogs, StdCtrls; type TUserDataForm = class(TForm) edtUserName : TEdit; edtUserID : TEdit; private Private declarations public Public declarations end; function GetUserData(var aUserName : String; var aUserID : Integer) : Word; implementation $R *.DFM function GetUserData(v

59、ar aUserName : String; var aUserID : Integer) : word; var UserDataForm : TuserDataForm; begin UserDataForm := TuserDataForm.Create(Application); try UserDataForm.Caption := Getting User Data; Result := UserDataForm.ShowModal; if (Result = mrOK) then begin aUserName := UserDataForm.edtUserName.Text;

60、aUserID := StrToInt(UserDataForm.edtUserID.Text); end; finally UserDataForm.Free; end; end; end.數(shù)據(jù)模板數(shù)據(jù)模板命名標(biāo)準(zhǔn)數(shù)據(jù)模板的取名要符合使用該數(shù)據(jù)模板的目的。類型的定義應(yīng)加以前綴T,后面緊接著描述性的名字,最后要加以后綴單詞“DataModule”。例如,一個(gè)自定義的數(shù)據(jù)模板有時(shí)候應(yīng)該象: TCustomerDataModule = class(TDataModule)一個(gè)命令式的數(shù)據(jù)模板的名字應(yīng)象: TOrdersDataModule = class(TDataModule)數(shù)據(jù)模板實(shí)例命名標(biāo)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論