源代碼規(guī)范文檔_第1頁(yè)
源代碼規(guī)范文檔_第2頁(yè)
源代碼規(guī)范文檔_第3頁(yè)
源代碼規(guī)范文檔_第4頁(yè)
源代碼規(guī)范文檔_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

SUBJECTW.MIS項(xiàng)目DOCPROPERTYTitle源代碼規(guī)范版本<1.0>文件編號(hào):W.MIS-MN-5生效日期:受控編號(hào):密級(jí):版本:修改狀態(tài):總頁(yè)數(shù)NUM代碼規(guī)范目的本文檔主要是為員提供一個(gè)源代碼書寫標(biāo)準(zhǔn),以及程序和文件的命名標(biāo)準(zhǔn),使他們?cè)诰幊虝r(shí)有一致格式可遵循。這樣,每個(gè)編程人員編寫的代碼能夠被其他人理解。源程序書寫規(guī)范通用源代碼格式規(guī)則縮進(jìn)縮進(jìn)就是每級(jí)間有兩個(gè)空格。不要在源代碼中放置制表符。這是因?yàn)椋票矸膶挾入S著不同的設(shè)置和代碼管理實(shí)用程序(打印、文檔及版本控制等)而不同。通過(guò)使用Tools|Environment菜單,在EnvironmentOptions對(duì)話框的General頁(yè)上,不要選中UseTabCharacter和OptionalFill復(fù)選框,這樣,制表符就不會(huì)被保存。邊距邊距設(shè)置為80個(gè)字符。源代碼一般不會(huì)因?qū)懸粋€(gè)單詞而超過(guò)邊距,但本規(guī)則比較靈活。只要可能,長(zhǎng)度超過(guò)一行的語(yǔ)句應(yīng)當(dāng)用逗號(hào)或運(yùn)算符換行。換行后,應(yīng)縮進(jìn)兩個(gè)字符。begin...end語(yǔ)句begin語(yǔ)句必須單獨(dú)占一行。例如,下面第一行是錯(cuò)誤的,而第二行正確:fori:=0to10dobegin//錯(cuò),begin與for在同一行fori:=0to10do//對(duì),begin在另外一行中

begin本規(guī)則的一個(gè)特殊情況是,當(dāng)begin為else語(yǔ)句的一部分時(shí),例如:ifsomestatement=then

begin

...

endelsebegin

SomeOtherStatement;

end;注意:end語(yǔ)句總單獨(dú)一行。當(dāng)begin不為else語(yǔ)句的一部分時(shí),相應(yīng)的end語(yǔ)句與begin語(yǔ)句的縮進(jìn)量相同。注釋有關(guān)注釋要求,請(qǐng)參閱HYPERLINK源程序文檔注釋規(guī)范。ObjectPascal語(yǔ)句格式語(yǔ)句書寫規(guī)范與用法括號(hào)在左括號(hào)與下一字符之間沒(méi)有空格。同樣,右括號(hào)與前一字符也沒(méi)有空格。下面的例子演示了正確與不正確的空格。CallProc(Aparameter);//錯(cuò)!

CallProc(Aparameter);//正確!不要在語(yǔ)句中包含多余的括號(hào)。在源代碼中,括號(hào)只有在確實(shí)需要時(shí)才使用。下面的例子演示了正確與不正確用法:if(I=42)then//錯(cuò),括號(hào)是多余的

if(I=42)or(J=42)then//正確,必須使用括號(hào)保留字和關(guān)鍵字

ObjectPascal語(yǔ)言的保留字和關(guān)鍵字總是完全的小寫。下面是Delphi5保留字列表:andarrayasasmbegincaseclassconstconstructordestructordispinterfacedivdodowntoelseendexceptexportsfilefinalizationfinallyforfunctiongotoifimplementationininheritedinitializationinlineinterfaceislabellibrarymodnilnotobjectoforoutpackedprocedureprogrampropertyraiserecordrepeatresourcestringsetshlshrstringthenthreadvartotrytypeunituntilusesvarwhilewithxorprivateprotectedpublicpublishedautomated過(guò)程和函數(shù)格式過(guò)程名應(yīng)當(dāng)以大寫字母開(kāi)始,且大小寫交錯(cuò)以增加可讀性。下面是一個(gè)不正確的寫法:procedurethisisapoorlyformattedroutinename;改成這樣寫就對(duì)了:procedureThisIsMuchMoreReadableRoutineName;形參(1)格式只要可能,同一類型的形參應(yīng)當(dāng)歸并在一起:procedureFoo(Param1,Param2,Param3:Integer;Param4:string);(2)參數(shù)順序形參的順序主要要考慮寄存器調(diào)用規(guī)則。最常用的參數(shù)應(yīng)當(dāng)作為第一個(gè)參數(shù),按使用頻率依次從左到右排。輸入?yún)?shù)位于輸出參數(shù)之前。范圍大的參數(shù)應(yīng)當(dāng)放在范圍小的參數(shù)之前。例如:SomeProc(aPlanet,aContinent,aCountry,aState,aCity).有些則例外。例如,在事件處理過(guò)程中,TObject類型的Sender參數(shù)往往是第一個(gè)要傳遞的參數(shù)。(3)常量參數(shù)要使記錄、數(shù)組、短字符串或接口類型的參數(shù)不能被過(guò)程修改,就應(yīng)當(dāng)把形參標(biāo)以const。這樣,編譯器將以最有效的方式生成代碼,保證傳遞的參數(shù)不可變。如果其他類型的參數(shù)希望不被過(guò)程所修改,也可以標(biāo)上const。盡管這對(duì)效率沒(méi)有影響,但這給過(guò)程的調(diào)用者帶來(lái)了更多的信息。變量局部變量局部變量用于過(guò)程內(nèi)部,如果需要的話,應(yīng)當(dāng)在過(guò)程的入口處立即初始化變量。局部的AnsiString類型的變量自動(dòng)被初始化為空字符串,局部的接口和dispinterface類型的變量自動(dòng)被初始化為nil,局部的Variant和OleVariant類型的變量自動(dòng)被初始化為Unassigned。全局變量一般不鼓勵(lì)使用全局變量。不過(guò),有時(shí)候需要用到。即使如此,也應(yīng)當(dāng)把全局變量限制在需要的環(huán)境中。例如,一個(gè)全局變量可能只在單元的實(shí)現(xiàn)部分是全局的。全局?jǐn)?shù)據(jù)如果將由許多單元使用,就應(yīng)移動(dòng)到一個(gè)公用單元里被所有對(duì)象使用。全局?jǐn)?shù)據(jù)可在聲明時(shí)直接初始化為一個(gè)值。注意,所有全局變量自動(dòng)進(jìn)行零初始化,因此,不要將全局變量初始化為諸如0、nil、或Unassigned等空值。零初始化的全局變量在.EXE文件中不占空間。零初始化的數(shù)據(jù)保存在虛擬的數(shù)據(jù)段中,而虛擬數(shù)據(jù)段只在應(yīng)用程序啟動(dòng)時(shí)才分配內(nèi)存。非零初始化的全局?jǐn)?shù)據(jù)則在.EXE文件中占空間。類型大小寫規(guī)則類型標(biāo)識(shí)符是保留字,應(yīng)當(dāng)全部小寫。Win32API類型常常全部大寫,并且遵循諸如Windows.pas或其他API單元中關(guān)于特定類型名的規(guī)則。對(duì)于其他變量名,第一個(gè)字母應(yīng)大寫,其他字母則大小寫交錯(cuò)。下面是一些例子:var

MyString:string;//保留字

WindowsHandle:HWND;//Win32API類型

I:Integer;//在System單元中引入的類型標(biāo)識(shí)浮點(diǎn)型不鼓勵(lì)使用Real類型,因?yàn)樗皇菫榱伺c老的Pascal代碼兼容而保留的。通常情況下,對(duì)于浮點(diǎn)數(shù)應(yīng)當(dāng)使用Double。Double可被處理器優(yōu)化,是IEEE定義的標(biāo)準(zhǔn)的數(shù)據(jù)格式。當(dāng)需要比Double提供的范圍更大時(shí),可以使用Extend。Extend是intel專用的類型,Java不支持。當(dāng)浮點(diǎn)變量的物理字節(jié)數(shù)很重要時(shí)(可能使用其他語(yǔ)言編寫DLL),則應(yīng)當(dāng)使用Single。Variant和OleVariant一般不建議使用Variant和OleVariant。但是,當(dāng)數(shù)據(jù)類型只有在運(yùn)行期才知道時(shí)(常常是在COM和數(shù)據(jù)庫(kù)應(yīng)用的程序中),這兩個(gè)類型對(duì)編程就有必要。當(dāng)進(jìn)行諸如自動(dòng)化ActiveX控件的COM編程時(shí),應(yīng)當(dāng)使用OleVariant;而對(duì)于非COM編程,則應(yīng)當(dāng)使用Variant。這是因?yàn)椋琕ariant能夠有效地保存Delphi的原生字符串,而OleVariant則將所有字符串轉(zhuǎn)換為OLE字符串(即WideChar字符串),且沒(méi)有引用計(jì)數(shù)功能。語(yǔ)句If語(yǔ)句在if/then/else語(yǔ)句中,最有可能執(zhí)行的情況應(yīng)放在then子句中,不太可能的情況放在else子句中。為了避免出現(xiàn)許多if語(yǔ)句,可以使用case語(yǔ)句代替。如果多于5級(jí),不要使用if語(yǔ)句。請(qǐng)改用更清楚的方法。不要在if語(yǔ)句中使用多余的括號(hào)。如果在if語(yǔ)句中有多個(gè)條件要測(cè)試,應(yīng)按照計(jì)算的復(fù)雜程度從右向左排。這樣,可以使代碼充分利用編譯器的短路估算邏輯。例如,如果Condition1比Condition2快,Condition2比Condition3快,則if語(yǔ)句一般應(yīng)這樣構(gòu)造:ifCondition1andCondition2andCondition3then如果Condition3為False的機(jī)會(huì)很大,利用短路估算邏輯,我們也可以將Condition3放在最前面:ifCondition3andCondition1andCondition2thencase語(yǔ)句(1)概述case語(yǔ)句中每種情況的常量應(yīng)當(dāng)按數(shù)字或字母的順序排列。每種情況的動(dòng)作語(yǔ)句應(yīng)當(dāng)簡(jiǎn)短且通常不超過(guò)4-5行代碼。如果動(dòng)作太復(fù)雜,應(yīng)將代碼單獨(dú)放在一個(gè)過(guò)程或函數(shù)中。Case語(yǔ)句的else子句只用于默認(rèn)情況或錯(cuò)誤檢測(cè)。(2)格式

case語(yǔ)句遵循一般的縮進(jìn)和命名規(guī)則。while語(yǔ)句建議不要使用Exit過(guò)程來(lái)退出while循環(huán)。如果需要的話,應(yīng)當(dāng)使用循環(huán)條件退出循環(huán)。所有對(duì)while循環(huán)進(jìn)行初始化的代碼應(yīng)當(dāng)位于while入口前,且不要被無(wú)關(guān)的語(yǔ)句隔開(kāi)。任何業(yè)務(wù)的輔助工作都應(yīng)在循環(huán)后立即進(jìn)行。for語(yǔ)句

如果循環(huán)次數(shù)是確定的,應(yīng)當(dāng)用for語(yǔ)句代替while語(yǔ)句。repeat語(yǔ)句

repeat語(yǔ)句類似于while循環(huán),且遵循同樣的規(guī)則。with語(yǔ)句(1)概述with語(yǔ)句應(yīng)小心使用。要避免過(guò)度使用with語(yǔ)句,尤其是在with語(yǔ)句中使用多個(gè)對(duì)象或記錄。例如:withRecord1,Record2do這些情況很容易迷惑編程人員,且導(dǎo)致調(diào)試?yán)щy。(2)格式

with語(yǔ)句也遵循本章關(guān)于命名和縮進(jìn)的規(guī)則。結(jié)構(gòu)化異常處理概述異常處理主要用于糾正錯(cuò)誤和保護(hù)資源。這意味著,凡是分配資源的地方,都必須使用try...finally來(lái)保證資源得到釋放。不過(guò),如果是在單元的初始/結(jié)束部分或者對(duì)象的構(gòu)造器/析構(gòu)器中來(lái)分配/釋放資源則例外。try...finally的用法

在可能的情況下,每個(gè)資源分配應(yīng)當(dāng)與try...finally結(jié)構(gòu)匹配,例如,下面代碼可能導(dǎo)致錯(cuò)誤:SomeClass1:=TSomeClass.Create;

SomeClass2:=TSomeClass.Create;

try

{dosomecode}

finally

SomeClass1.Free;

SomeClass2.Free;

end;

上述資源分配的一個(gè)安全方案是:SomeClass1:=TSomeClass.Create;

try

SomeClass2:=TSomeClass.Create;

try

{dosomecode}

finally

SomeClass2.Free;

end;

finally

SomeClass1.Free;

end;但有時(shí)如果有許多類都需要同時(shí)創(chuàng)建,上述方案就顯得非常累贅。這時(shí)候,我建議使用下述的一個(gè)安全方案:SomeClass1:=nil;

SomeClass2:=nil;

try

SomeClass1:=TSomeClass.Create;

SomeClass2:=TSomeClass.Create;

{dosomecode}

finally

FreeAndNil(SomeClass1);

FreeAndNil(SomeClass2);

end;try...except的用法如果你希望在發(fā)生異常時(shí)執(zhí)行一些任務(wù),可以使用try...except。通常,沒(méi)有必要為了簡(jiǎn)單地顯示一個(gè)錯(cuò)誤信息而使用try...except,因?yàn)锳pplication對(duì)象能夠自動(dòng)根據(jù)上下文做到這一點(diǎn)。如果要在子句中激活默認(rèn)的異常處理,可以再次觸發(fā)異常。try...except...else的用法不鼓勵(lì)使用帶else子句的try...except,因?yàn)檫@將阻塞所有的異常,包括你沒(méi)有準(zhǔn)備處理的異常。命名規(guī)范過(guò)程(Procedure)與函數(shù)(Function)命名

過(guò)程與函數(shù)名應(yīng)當(dāng)有意義。進(jìn)行一個(gè)動(dòng)作的過(guò)程最好在名稱前加上表示動(dòng)作的動(dòng)詞為前綴。例如:procedureFormatHardDrive;

設(shè)置輸入?yún)?shù)值的過(guò)程名應(yīng)當(dāng)以Set為其前綴,例如:procedureSetUserName;獲取數(shù)值的過(guò)程名應(yīng)當(dāng)以Get為其前綴,例如:functionGetUserName:string;形參所有形參的名稱都應(yīng)當(dāng)表達(dá)出它的用途。如果合適的話,形參的名稱最好以字母a為前綴,例如:procedureSomeProc(aUserName:string;aUserAge:integer);

當(dāng)參數(shù)名與類的特性或字段同名時(shí),前綴a就有必要了。命名沖突當(dāng)兩個(gè)單元中含有相同名稱的過(guò)程時(shí),如果調(diào)用該過(guò)程,實(shí)際被調(diào)用的是Uses子句中較后出現(xiàn)的那個(gè)單元中的過(guò)程。為避免這種情況,可在方法名前加想要的單元名,例如:SysUtils.FindClose(SR);或Windows.FindClose(Handle);常量(Constants)和變量(Variable)常量常量的名稱應(yīng)當(dāng)能夠表達(dá)出它的用途。字符串資源常量(ResourceString)一般是以rs為前綴。變量變量的名稱應(yīng)當(dāng)能夠表達(dá)出它的用途。循環(huán)控制變量常常為單個(gè)字母,諸如I、J或K。也可以使用更有意義的名稱,例如UserIndex。布爾變量名必須能清楚表示出True和False值的意義。局部變量

局部變量遵循其他變量的命名規(guī)則。全局變量

全局變量一般以大寫字母“G”打頭,并遵循其他變量的命名規(guī)則。類型(Type)一般類型枚舉型枚舉類型名必須代表枚舉的用途。名稱前要加T字符作為前綴,表示這是個(gè)數(shù)據(jù)類型。枚舉類型的標(biāo)識(shí)符列表的前綴應(yīng)包含2-3個(gè)小寫字符,來(lái)彼此關(guān)聯(lián)。例如:TSongType=(stRock,stClassical,stCountry,stAlternative,stHeavyMetal,stRB);枚舉類型的變量實(shí)例的名稱與類型相同,但沒(méi)有前綴T,也可以給變量一個(gè)更加特殊名稱,諸如:FavoriteSongTypel、FavoriteSongType2等等。構(gòu)造類型數(shù)組類型數(shù)組類型名應(yīng)表達(dá)出該數(shù)組的用途。類型名必須加字母“T”為前綴。如果要聲明一個(gè)指向數(shù)組類型的指針,則必須加字母P為前綴,且聲明在類型聲明之前。例如:type

PCycleArray=^TCycleArray;

TCycleArray=array[1..100]ofinteger;實(shí)際上,數(shù)組類型的變量實(shí)例與類型名稱相同,但沒(méi)有“T”前綴。記錄類型記錄類型名應(yīng)表達(dá)出記錄的用途。類型名必須加字母T為前綴。如果要聲明一個(gè)指向記錄類型的指計(jì),則必須加字母P為前綴,且其聲明在類型聲明之前。例如:type

PEmployee=^TEmployee;

TEmployee=record

EmployeeName:string;

EmployeeRate:Double;

end;類類型(Class)命名與格式類的名稱應(yīng)當(dāng)表達(dá)出類的用途。一般的類名前要加字母“T”,如果是接口類那么類名前要加“I”,錯(cuò)誤異常類的類名前要加“E”,而類引用類型(Class-referencetype)則要在類名后加“Class”,抽象類一般是在類名前還要加“Custom”。例如:type

TCustomCipher=class(TObject);

TCipher=class(TCustomCipher);

ICipher=interface;

TCipherClass=classofTCustomer

ECipherException=class(Exception);

類的實(shí)例名稱通常與類名相同,只不過(guò)沒(méi)有前綴“T”。var

Customer:TCustomer;注意:關(guān)于元件的命名,請(qǐng)參閱“HYPERLINK\l"_元件類型"元件類型”。字段(1)命名與格式

字段的命名遵循與變量相同的規(guī)則,只不過(guò)要加前綴F,表示這是字段。(2)可見(jiàn)性

所有字段必須為私有。如果要在類的作用域之外訪問(wèn)字段,可借助于類的屬性來(lái)實(shí)現(xiàn)。方法(1)命名與格式

方法的命名遵循與過(guò)程和函數(shù)相同的規(guī)則。(2)靜態(tài)方法

當(dāng)你不希望一個(gè)方法被派生類覆蓋時(shí),應(yīng)當(dāng)使用靜態(tài)方法。(3)虛擬方法(virtual)與動(dòng)態(tài)方法(dynamic)當(dāng)你希望一個(gè)方法能被派生類覆蓋,應(yīng)當(dāng)使用虛擬方法(virtual)。如果類的方法要被多個(gè)派生類直接或間接地使用,則應(yīng)當(dāng)用動(dòng)態(tài)方法(dynamic)。例如,某一個(gè)類含有一個(gè)被頻繁覆蓋的方法,并有100個(gè)派生類,則應(yīng)將方法定義為動(dòng)態(tài)的,這樣可以減少內(nèi)存的開(kāi)銷。(4)抽象方法(abstract)

如果一個(gè)類要?jiǎng)?chuàng)建實(shí)例,則不要使用抽象方法。抽象方法只能在那些從不創(chuàng)建實(shí)例的基類中使用。(5)屬性訪問(wèn)方法所有屬性訪問(wèn)方法應(yīng)當(dāng)定義在類的私有或保護(hù)部分。屬性訪問(wèn)方法遵循與過(guò)程和函數(shù)相同的規(guī)則。用于讀的方法應(yīng)當(dāng)加“Get”前綴,用于寫的方法應(yīng)當(dāng)加“Set”前綴,并且有一個(gè)叫Value的參數(shù),其類型與屬性的類型相同。例如:TSomeClass=class(TObject)

private

FSomeField:Integer;

protected

functionGetSomeField:Integer;

procedureSetSomeField(Value:Integer);

public

propertySomeField:IntegerreadGetSomeFieldwriteSetSomeField;

end;

盡管不是必須,但還是建議你使用寫訪問(wèn)方法來(lái)訪問(wèn)代表私有字段屬性。屬性屬性作為私有字段的訪問(wèn)器,遵循與字段相同的命名規(guī)則,只不過(guò)沒(méi)有F前綴。屬性名應(yīng)為名詞,而不是動(dòng)詞。屬性是數(shù)據(jù),而方法是動(dòng)作。數(shù)組屬性名應(yīng)當(dāng)是復(fù)數(shù),而一般的屬性應(yīng)當(dāng)是單數(shù)。元件類型元件類型的命名標(biāo)準(zhǔn)元件的命名與類的命名類似,只不過(guò)當(dāng)它與其它元件名稱沖突時(shí),你可以加上3個(gè)字符的前綴,用以標(biāo)識(shí)公司、個(gè)人或其他實(shí)體。例如,一個(gè)時(shí)鐘元件可以這樣聲明:TddgClock=class(TComponent)注意,作為前綴的3個(gè)字符要小寫。元件實(shí)例的命名規(guī)則元件實(shí)例的名稱應(yīng)當(dāng)能夠描述其實(shí)際意義,這里命名規(guī)則使用了一個(gè)變更的匈牙利前綴命名規(guī)范。使用前綴而不使用后綴的原因是在搜尋時(shí),在對(duì)象檢查器和代碼探索器中搜尋構(gòu)件的名字比搜尋構(gòu)件的類型更容易。在這個(gè)標(biāo)準(zhǔn)中,元件實(shí)例名包括兩個(gè)部分:前綴和性質(zhì)標(biāo)識(shí)名。(1).元件的前綴

元件的前綴多是表現(xiàn)元件類型的字母縮寫。參見(jiàn)下面表中的元件前綴:元件類名元件前綴TActionList,TAction表示動(dòng)作的列表項(xiàng)actTButton,TSpeedButton,TBitBtn等所有的按鈕類btnTCheckBox,TDBCheckBox等所有的檢查框chkTRadioButton單選按鈕類rdoTToolBar工具條tbTMainMenu所有的主菜單類mmTMainMenuItem所有的菜單項(xiàng)類miTPopupMenu所有的彈出式菜單類pmTPopupMenuItem所有的彈出式菜單項(xiàng)類pmiTLabel,TStaticText等所有用來(lái)顯示的標(biāo)簽類lblTPanel等所有的面板類pnlTPageControl等所有的頁(yè)式控件類pgcTEdit,TMaskEdit等所有的單行編輯框類edtTMemo,TRichEdit等所有的多行編輯框類mmoTDrawGrid,TStringGrid等所有的網(wǎng)格類grdTAnimate等所有的動(dòng)畫類aniTImageList等所有的圖片列表類ilTImage等圖片類imgTChart圖表類chtTComboBox,TDBComboBox等所有的下拉式列表框類cboTListBox,TDBList等所有的列表框類lstTTreeViewtvTListViewlvTHotKeyhkTSplitter等所有的分隔符類sptTOpenDialog等所有的對(duì)話框元件類dlgTTable等所有的數(shù)據(jù)表類tblTQuery等所有的SQL查詢類元件qryTClientDataSet所有的客戶數(shù)據(jù)集元件cdsTDataSourcedsTDatabasedbTSockConnection,TDCOMConnection等連接元件類conTQuickRep,TFastReport等所有的報(bào)表元件類rptTDDEClientConv,TDDEClientItem等所有的DDE元件類ddeTMonthCalendar等所有的日歷類calTGroupBox等控件類grpTForm等窗體類frm如上所示,元件類型前綴是從分析描述元件的類型性質(zhì)而來(lái)的。通常情況下,下面的規(guī)則描述如何定義一個(gè)元件類型前綴:從元件類型名中移去T前綴。例如TButton變成Button。除了第一個(gè)元音,刪去所有元音字母。例如,Button變成bttn,Edit變成edt。壓縮雙字母。例如,bttn變成btn。如發(fā)生沖突,則在某一元件前綴中加入一個(gè)元音。例如在TBatton元件的前綴中加入元音變?yōu)閎atn,以區(qū)別TButton的前綴。不過(guò),上述規(guī)則首先得保證前綴名稱必須符合習(xí)慣,做到見(jiàn)名知意,如:TDDEClientConv控件的前綴就是一個(gè)例外。注意:元件的前綴是為了表示出元件的類型,是按鈕,還是標(biāo)簽等等,因此沒(méi)有必要為每一個(gè)特別元件類建立一個(gè)元件前綴,如:TMyButton的元件前綴仍為btn。常用的所有元件的前綴,會(huì)用統(tǒng)一的第三方工具定義一個(gè)配置文件發(fā)給大家。(2).元件性質(zhì)標(biāo)識(shí)名元件性質(zhì)標(biāo)識(shí)名是元件意圖的描述。例如,一個(gè)用于關(guān)閉窗體的TButton元件實(shí)例可命名為btnClose。一個(gè)編輯姓名的元件實(shí)例可命名為edtName。窗體與對(duì)話框類型窗體類型的命名標(biāo)準(zhǔn)窗體或?qū)υ捒蝾愋偷拿Q應(yīng)當(dāng)表達(dá)出窗體的用途,如果是窗體要加“Tfrm”前綴,如果是對(duì)話框要加“Tdlg”,后跟描述性名。例如,About窗體類型名稱為:TfrmAbout=class(TForm)主窗體的類型名稱為:TfrmMain=class(TForm)客戶登錄窗體的類型名稱為:TfrmCustomerEntry=class(TForm)登陸對(duì)話框的類型名稱為:TdlgLogin=class(TForm)窗體實(shí)例的命名標(biāo)準(zhǔn)窗體實(shí)例的名稱與相應(yīng)的類型名稱相同,但沒(méi)有前綴T。使用前綴法命名窗體和對(duì)話框的好處在于可以在ObjectInspector(屬性觀察器)中快速找到需要的元件類型。例如,前面提到的窗體類型與實(shí)例的名稱為:類型名實(shí)例名TfrmAboutfrmAboutTfrmMainfrmMainTfrmCustomerEntryfrmCustomerEntryTdlgLogindlgLogin自動(dòng)創(chuàng)建的窗體除非特別原因,只有主窗體才自動(dòng)生成。其他所有窗體必須從ProjectOptions對(duì)話框的自動(dòng)生成列表中刪除。更進(jìn)一步信息,請(qǐng)參閱后面幾節(jié)。模式窗體實(shí)例化函數(shù)所有窗體單元都應(yīng)當(dāng)含有實(shí)例化函數(shù),用于創(chuàng)建、設(shè)置、模式顯示和釋放窗體。這個(gè)函數(shù)將返回由窗體返回的模式結(jié)果。傳遞給這個(gè)函數(shù)的參數(shù)遵循參數(shù)傳遞的規(guī)則。之所以要這樣封裝,是為了便于代碼的重用和維護(hù)。窗體的變量應(yīng)當(dāng)從單元中移走,改在窗體實(shí)例化函數(shù)中作為局部變量定義(注意,要求從ProjectOptions對(duì)話框的自動(dòng)生成列表中移走該窗體。請(qǐng)看前面的內(nèi)容。例如,下面的單元文件演示了GetUserData的實(shí)例化函數(shù)。UnitUserDataFrm;InterfaceUses

Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,

Dialogs,StdCtrls;TypeTfrmUserData=class(TForm)

edtUserName:TEdit;

edtUserID:TEdit;

private

{Privatedeclarations}

public

{Publicdeclarations}

end;functionGetUserData(varaUserName:String;varaUserID:Integer):Word;implementation{$R*.DFM}functionGetUserData(varaUserName:String;varaUserID:Integer):Word;

var

frmUserData:TfrmUserData;

begin

frmUserData:=TfrmUserData.Create(Application);

frmUserData.Caption:='GettingUserData';

Result:=frmUserData.ShowModal;

ifResult=mrOKthen

begin

aUserName:=frmUserData.edtUserName.Text;

aUserID:=StrToInt(frmUserData.edtUserID.Text);

end;

finally

frmUserData.Free;

end;

end;End.窗體框架與復(fù)合窗體如果一個(gè)窗體結(jié)構(gòu)過(guò)于復(fù)雜,就必須將其分化成為一個(gè)主窗體框架以及嵌入到主窗體框架的若干子窗體框架。如:TfrmMainFrame:TfrmInfoFrame,TfrmEditorFrame使用窗體框架,主要是為了解決界面和代碼復(fù)用問(wèn)題,以及提高單元代碼的內(nèi)聚力(劃分后,每一個(gè)窗體框架為一個(gè)獨(dú)立單元),從而提高軟件工程質(zhì)量。你必須提煉出界面關(guān)聯(lián)代碼(可復(fù)用的)和應(yīng)用關(guān)聯(lián)代碼(不能復(fù)用的)。數(shù)據(jù)模塊類型數(shù)據(jù)模塊的命名標(biāo)準(zhǔn)數(shù)據(jù)模塊類型名稱應(yīng)表達(dá)出它的用途,且要加前綴“Tdm”,后跟描述性名稱。例如,Customer數(shù)據(jù)模塊的類型名稱為:TdmCustomer=class(TDataModule)Orders數(shù)據(jù)模塊的類型名稱為:TdmOrder=class(TDataModule)數(shù)據(jù)模塊實(shí)例的命名標(biāo)準(zhǔn)數(shù)據(jù)模塊實(shí)例的名稱應(yīng)當(dāng)與相應(yīng)的類型名稱相同,但沒(méi)有前綴T。例如,前面的數(shù)據(jù)模塊類型、實(shí)例名稱如下:類型名稱實(shí)例名TdmCustomerdmCustomerTdmOrderdmOrder文件建議在所有源文件、項(xiàng)目文件和單元文件使用結(jié)構(gòu)化的文件頭信息。

詳細(xì)說(shuō)明,請(qǐng)參閱:HYPERLINK\l"_單元文件注釋文檔格式"單元文件注釋文檔格式。項(xiàng)目文件項(xiàng)目文件的名稱應(yīng)當(dāng)具有描述意義。例如,“TheDelphi5Developer’sGuideBugManager”的項(xiàng)目名稱為DDGBugs.dpr,一個(gè)系統(tǒng)信息程序的名稱為SysInfo.dpr。窗體文件窗體文件的名稱應(yīng)當(dāng)表達(dá)出窗體的用途,且具有frm前綴。例如,About窗體的文件名叫frmAbout.dfm,主窗體的文件名叫frmMain.dfm。數(shù)據(jù)模塊文件數(shù)據(jù)模塊文件的名稱應(yīng)當(dāng)表達(dá)出數(shù)據(jù)模塊的作用,且具有DM后綴。例如,Customers數(shù)據(jù)模塊的文件名叫CustomersDM.dfm。遠(yuǎn)程數(shù)據(jù)模塊文件遠(yuǎn)程數(shù)據(jù)模塊文件的名稱應(yīng)當(dāng)表達(dá)出遠(yuǎn)程數(shù)據(jù)模塊的用途。名稱后要加RDM后綴。例如,Customers遠(yuǎn)程數(shù)據(jù)模塊的文件叫CustomersRDM.dfm。單元文件普通單元(1)單元名

單元的名稱應(yīng)當(dāng)有描述性,與窗體文件同名。例如,應(yīng)用程序的主窗體單元叫frmMain.pas。(2)Uses子句Interface部分的Uses子句應(yīng)當(dāng)只包含該部分需要的單元。不要包含可能由Delphi自動(dòng)添加的單元名。Implementation部分的Uses子句應(yīng)當(dāng)只包含該部分需要的單元,不要有多余的單元。(3)Interface部分Interface部分應(yīng)當(dāng)只包含需要被外部單元訪問(wèn)的類型、變量、過(guò)程與函數(shù)的聲明。而且,這些聲明應(yīng)當(dāng)在Implementation部分之前。(4)Implementation部分

Implementation部分包括本單元私有的類型、變量、過(guò)程與函數(shù)的實(shí)現(xiàn)。(5)Initialization部分

不要在Initialization部分放置花費(fèi)時(shí)間很多的代碼。否則,將導(dǎo)致應(yīng)用程序啟動(dòng)時(shí)顯得很慢。(6)Finalization部分

確保釋放所有在Initialization部分中分配的資源。窗體單元窗體單元文件的名稱與相應(yīng)的窗體名稱相同,只是要將前綴變成后綴。例如,About窗體的單元名稱叫frmAbout。主窗體的單元文件名稱叫frmMain.pas。數(shù)據(jù)模塊單元數(shù)據(jù)模塊單元文件的名稱與相應(yīng)的數(shù)據(jù)模塊名稱相同。例如,數(shù)據(jù)模塊單元的名稱叫CustomersDM.pas。通用單元通用單元是用于存放函數(shù)庫(kù),一般類型,或常量而非元件的單元。通用單元的名稱應(yīng)當(dāng)表達(dá)出它的用途,名稱前要加“u”前綴。例如,一個(gè)實(shí)用調(diào)試工具單元的名稱叫uDebugUtilities.pas,包含全局變量的單元名稱叫uCustomerGlobals.pas。注意,一個(gè)項(xiàng)目中單元名稱必須是唯一的。通用單元名不能重名。元件單元(1).命名元件單元應(yīng)放在單獨(dú)的路徑中,以表明它們是定義元件的單元。它們一般與項(xiàng)目不放在同一路徑下。單元文件名稱應(yīng)表達(dá)出其內(nèi)容。注意,有關(guān)元件命名標(biāo)準(zhǔn)的更多信息,請(qǐng)參閱HYPERLINK\l"_元件類型的命名標(biāo)準(zhǔn)"“元件類型的命名標(biāo)準(zhǔn)”。元件單元只能含有一個(gè)主要元件,這是指出現(xiàn)在元件選項(xiàng)板上的元件。其他輔助性的元件或?qū)ο笠部梢园谕粏卧小?2).注冊(cè)單元元件的注冊(cè)過(guò)程應(yīng)當(dāng)從元件單元中移走,放在一個(gè)單獨(dú)的單元中。這個(gè)注冊(cè)單元用于注冊(cè)所有元件、屬性編輯器、元件編輯器、向?qū)У?。元件注?cè)應(yīng)當(dāng)在設(shè)計(jì)期包中進(jìn)行。因此,注冊(cè)單元應(yīng)當(dāng)包含在設(shè)計(jì)期包而不是運(yùn)行期包中。建議注冊(cè)單元這樣命名:其中,xxx字符前綴,以標(biāo)識(shí)元件包名稱或公司、個(gè)人、其他實(shí)體。例如,注冊(cè)單元命名為xxxReg.pas。包文件(.dpk)命名規(guī)則(1).運(yùn)行期包與設(shè)計(jì)期包運(yùn)行期包中應(yīng)當(dāng)只包含所需要的單元。那些屬性編輯器和元件編輯器的單元應(yīng)當(dāng)放在設(shè)計(jì)期包中。注冊(cè)單元也應(yīng)當(dāng)放在設(shè)計(jì)期包中。(2).文件命名標(biāo)準(zhǔn)

包的命名遵循下列模式:dcliiiDescvvCn.pkg—設(shè)計(jì)期包

iiiDescvvCn.pkg

—運(yùn)行期包其中,iii代表一個(gè)2-3字符的前綴,用于標(biāo)識(shí)公司、個(gè)人或其他需要標(biāo)識(shí)的事情,也可不要;Desc表示該控件包的簡(jiǎn)短描述;vv代表包的版本號(hào),你可以根據(jù)需要取舍;前綴“dcl”表示設(shè)計(jì)期包,沒(méi)有該前綴表示運(yùn)行期包;字母“Cn”表示編譯器類型與編譯器版本號(hào),如:Delphi5=D5,Delphi4=D4,CBuilder3=C3...。注意包名稱中的lib或std分別表示這是設(shè)計(jì)期包還是運(yùn)行期包。例如:dclrbStdCompsD5.pkg—Delphi5的設(shè)計(jì)期包

rbStdCompsD5.pkg

—Delphi5的運(yùn)行期包內(nèi)置匯編

內(nèi)置匯編也遵循本章關(guān)于命名和縮進(jìn)的規(guī)則。源程序文檔注釋規(guī)范我們書寫注釋的目的主要有二:一是為自己以后閱讀源程序提供方便;二是為建立規(guī)范的程序文檔。單元文件注釋文檔格式窗體類Unit的注釋格式{*****************************************************************************文件名:版權(quán)所有:(c)2004-2005ESQUELGROUPGET/IT創(chuàng)建人:創(chuàng)建日期:修改人:修改原因:修改日期:功能描述:對(duì)應(yīng)用例:2.3.1.1PPO和工藝信息字段描述:Field1字段含義Field2字段含義相關(guān)數(shù)據(jù)庫(kù)表:讀:表Job_NO為空的數(shù)據(jù)寫:(新增)(修改Job_NO字段)調(diào)用重要函數(shù)/SQL對(duì)象說(shuō)明:函數(shù)1:Unitx.GetServerTime()獲取服務(wù)器時(shí)間SQL存儲(chǔ)過(guò)程1:接收排單任務(wù)*****************************************************************************}或是{*********************************************************************************Copyright(C)2010-2020ESQUELGROUPITDEPARTMENT**文件名:frmFFFillPpo**創(chuàng)建人:**日期:**修改人:**修改日期:**修改內(nèi)容描述:**描述:成品裝單**涉及數(shù)據(jù)表與存儲(chǔ)過(guò)程:數(shù)據(jù)表:FFOutFFStockPcPpoItemTraceInfo--訂單跟蹤表FFBoxupLog--修改日志表存儲(chǔ)過(guò)程:usp_FFGetBoxUpStock--庫(kù)存信息數(shù)據(jù)usp_FFGetBoxUpPpo--訂單信息數(shù)據(jù)usp_FFGetBoxUpPpoBox--訂單裝單信息數(shù)據(jù)usp_FFGetBoxUpInfo--

溫馨提示

  • 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)論