1. Einführung in die Spezifikationen
Diese Spezifikation sieht hauptsächlich die Regeln und Vorsichtsmaßnahmen vor, die Delphi -Quellprogramme während des Schreibprozesses folgen sollten. Der Zweck des Schreibens dieser Spezifikation besteht darin, die Quellcode -Schreibgewohnheiten von Unternehmenssoftwareentwicklern konsistent zu halten. Dadurch kann jedes Gruppenmitglied den Code anderer Gruppenmitglieder verstehen, um die Sekundärentwicklung der Wartung des Quellcodespeichersystems zu erleichtern.
2. Allgemeine Formatspezifikationen
2.1 Eindrückung
Die Einklebung sind die beiden Räume, die ausgesetzt sind, um die Lesbarkeit zu erhöhen, wenn sich das Niveau des Quellprogramms ändert. Die Regel der Eindrücke lautet, zwei Räume für jede Ebene einzuführen. Tab ist nicht erlaubt. Da die Registerkarte aufgrund unterschiedlicher Einstellungen des Benutzers unterschiedliche Effekte erzeugt. Wenn Sie mit Beginn oder Beurteilung, Schleife, Ausnahmeregelung, mit Erklärung, Erklärung von Datensatztyp, Klassenerklärung usw. Geben Sie eine Stufe hinzu. Klassenerklärungen usw. werden um eine Ebene reduziert. Zum Beispiel:
iftmpint <> 100Then
Tmpint: = 100;
2.2begin..end
Die Startanweisung und die Endaussage sollten eine einzige Zeile im Quellprogramm einnehmen, z. B.:
FORI: = 0to10Dobin // Falsche Verwendung
Ende;
fei: = 0to10do // korrekte Verwendung
Beginnen
Ende;
2.3 Räume
Fügen Sie Leerzeichen an beiden Enden von Operatoren und logischen Beurteilungssymbolen hinzu, wie z. Zum Beispiel: wenn (a> b) dann // falsche Verwendung
Wenn (a> b) dann // korrekte Verwendung
Zum Beispiel: procedurEtest (param1: Integer; Param3: String);
3.ObjectPascal Grammatikschreibformatspezifikationen
3.1 Reservierte Wörter
Alle reservierten Wörter oder Schlüsselwörter in ObjectPascal sollten in Kleinbuchstaben verwendet werden.
3.2 Prozesse und Funktionen
3.2.1 Namen und Format
Die Namen von Verfahren und Funktionen sollten alle aus sinnvollen Wörtern zusammengesetzt sein, und der erste Buchstaben aller Wörter sollte in Großbuchstaben sein. Zum Beispiel:
procedureFormAtardDisk; // Falsche Benennung
procedureFormathardDisk; // korrekte Benennung
Der Prozess und die Funktion, die den Inhalt einer Variablen festlegt, sollte beispielsweise als Präfix eingestellt werden:
Verfahrensetusername;
Prozesse und Funktionen mit dem Lesen von variablen Inhalten sollten GET als Präfix verwenden, z. B.:
FUNKTIONUTUSERNAME: String;
3.2.2 Parameter von Verfahren und Funktionen
3.2.2.1 Benennung
Parameter des einheitlichen Typs sind im selben Satz geschrieben:
procedureFoo (param1, param2, param3: gundesger; param4: string);
3.2.2.2 Namen
Alle Parameter müssen aussagekräftig sein;
proceduresomeProc (Ausername: String; Auserage: Integer);
3.2.2.3 Namenskonflikte
Wenn die beiden verwendeten Einheiten eine doppelte Funktion oder Prozedur enthalten, wird bei dieser Funktion oder dieser Prozedur die Funktion oder das Verfahren in der in der Verwendung der Verwendungsklausel deklarierten Einheit ausgeführt. Um eine solche "Verwendungsklausel abhängig" zu vermeiden, müssen die vollständige Funktions- oder Prozessquelle geschrieben werden, wenn sie sich auf eine Funktion oder einen Prozess beziehen. Zum Beispiel:
Sysutils.findclose (SR);
Windows.Findclose (Handle);
3.3 Variablen
3.3.1 Variable Benennung und Format
Zunächst müssen Variablen aussagekräftige Namen erhalten, damit andere Gruppenmitglieder die durch die Variablen dargestellte Bedeutung leicht verstehen können. Hauptstadt. Zum Beispiel:
var
WriteFormat :: String;
Gleichzeitig können für bestimmte Typen bestimmte Abkürzungen wie folgt verwendet werden:
Zeigertyp
P
Datensatztyp
Rec
Array -Typ
Arr
Art
Klasse
Schleifensteuerungsvariablen verwenden normalerweise ein einzelnes Zeichen wie: i, j oder k. Darüber hinaus ist auch die Verwendung eines aussagekräftigen Namens wie UserIndex zulässig.
3.3.2 Lokale Variablen
Die Verwendung lokaler Variablen im Prozess folgt den Namensregeln für alle anderen Variablen.
3.3.3 Globale Variablen
Versuchen Sie, globale Variablen nicht zu verwenden. Zum Beispiel:
GPRECUSERCOUNT: Punkt; // Die globale Variable mit dem Namen UserCount ist ein Zeiger auf eine Struktur
Innerhalb des Moduls können jedoch globale Variablen verwendet werden. Alle globalen Variablen in Modulen müssen mit 'F' vorangestellt werden. Wenn der Datenaustausch zwischen mehreren Modulen erforderlich ist, muss sie durch Deklaration von Attributen implementiert werden. Zum Beispiel:
Typ
TformeOverDrafReturn = Klasse (tform)
Privat
{PrivatatedEclarations}
Fusername: String;
FoSercount: Ganzzahl;
Prozeduresetusername (Wert: String);
FUNKTIONUTUSERNAME: String;
öffentlich
{PublicDeclarations}
PropertyUnername: StringReadgetUnernameWritesetusername;
PropertyUserCount: IntegerReadFuSerCountWriteFuSerCount;
Ende;
Typ 3.4
3.4.1 Fallprotokoll
Die Typnamen reservierter Zeichen müssen alle Kleinbuchstaben sein. Die Win32API -Typen werden normalerweise alle aktiviert, und die ersten Buchstaben werden für andere Typen aktiviert, und die verbleibenden Buchstaben sind beispielsweise Kleinbuchstaben:
var
MyString: String; // ReservedWord
Fensterhand: hwnd; // Win32APityPe
I: Integer; // TypidentifierIntroducuedInSystemunit
3.4.2 Schwimmpunkttyp
Versuchen Sie, den realen Typ nicht zu verwenden, sondern möchte nur mit dem alten Pascal -Code kompatibel sein und versuchen, den Doppeltyp zu verwenden. Der Doppeltyp ist ein optimierter Prozessor und Datenbus und eine von IEEE definierte Standarddatenstruktur. Erweitert wird verwendet, wenn der Wert außerhalb des Doppelbereichs liegt. Aber erweitert wird nicht von Jave unterstützt. Der einzelne Typ kann jedoch beim Schreiben von DLLs in anderen Sprachen verwendet werden.
3.4.3 Aufzählungstyp
Der Name des Aufzählungstyps muss sinnvoll sein und der Name des Typs muss 't' vorangestellt werden. Der Name des Inhalts des Enumentyps muss die Abkürzung des Namens des Enum -Typs enthalten, zum Beispiel:
TsongType = (Strock, STCLASSIC, STCOUNTRY, Stalternative, Stheavymetal, strb);
3.4.4 Array -Typ
Der Name des Array -Typs muss sinnvoll sein und der Name des Typs muss 't' vorangestellt werden. Wenn Sie einen Zeiger auf einen Array -Typ deklarieren, müssen Sie beispielsweise vor dem Namen dieses Typs 'P' vor dem Namen dieses Typs ein Präfix:
Typ
Pcyclearray =^tCyclearray;
TCyClearray = Array [1..100] OFINTEger;
3.4.5 Datensatztyp
Der Name des Datensatztyps muss aussagekräftig sein und der Name des Typs muss 't' vorangestellt werden. Wenn Sie einen Zeiger auf einen Array -Typ deklarieren, müssen Sie beispielsweise vor dem Namen dieses Typs 'P' vor dem Namen dieses Typs ein Präfix:
Typ
PEPACHEEDE =^TEMPLEIDEE;
Templayee = record
Employeename: String
Arbeitnehmer: Doppel;
Ende;
Kategorie 3.5
3.5.1 Namen und Format
Der Name der Klasse muss sinnvoll sein und der Name des Typs muss 't' vorangestellt werden. Zum Beispiel:
Typ
Tcustomer = class (tobject)
Der Name einer Klasseninstanz ist normalerweise der Name der Klasse mit entferntem "T". Zum Beispiel:
var
Kunde: Tcustomer;
Variablen in Klasse 3.5.2
3.5.2.1 Namen und Format
Der Name der Klasse muss sinnvoll sein und der Name des Typs muss 'f' vorangestellt werden. Alle Variablen müssen vier in eins sein. Wenn Sie von außen auf diese Variable zugreifen müssen, müssen Sie eine Immobilie deklarieren
Methode 3.5.3
3.5.3.1 Namen und Format
Benennung und Formatierung von Funktionen und Verfahren.
3.5.3.2 Attributzugriffsmethode
Alle Attributzugriffsmethoden müssen in privat oder geschützt erscheinen. Die Benennung der Attributzugriffsmethode ist mit der Benennung der Funktionen und Verfahren. Der Parameter der geschriebenen Methode muss als "Wert" bezeichnet werden, und sein Typ steht im Einklang mit dem zu geschriebenen Attribut. Zum Beispiel:
Tsomeclass = class (tobject)
Privat
fsomfield: Ganzzahl;
geschützt
FunctionGetSomeField: Ganzzahl;
VerfahrensetsomeField (Wert: Ganzzahl);
öffentlich
PropertySomeField: IntegerReadgetSomeFieldWriteSetsomeField;
Ende;
3.6 Eigenschaften
3.6.1 Namen und Format
Die Namen der Variablen der Klasse mit dem Präfix 'F' stimmen mit der Operation überein.
3.7 Datei
3.7.1 Projektdatei
3.7.1.1 Projektverzeichnisstruktur
Programm Home Directory --Bin (Pfad, in dem sich die Anwendung befindet)
-Db (Pfad, in dem sich die lokale Datenbank befindet)
-Doc (Pfad, in dem sich das Dokument befindet)
-HLP (Pfad, wo sich die Hilfedatei befindet)
-Backup (Backup -Pfad)
-Tmp (temporärer Dateipfad)
3.7.1.2 Namen
Die Projektdatei muss einen aussagekräftigen Namen verwenden. Zum Beispiel: Die Projektdatei für Systeminformationen in Delphi heißt sysinfo.dpr.
3.7.2form -Datei
3.7.2.1 Namen
In Übereinstimmung mit dem Namen des Formulars: Zum Beispiel: Wenn der Name des Formulars Formmain ist, ist der Name der Formulardatei formmain.frm.
3.7.3datamodule Datei
3.7.3.1 Namen
Die Benennung der Datamodule -Datei sollte Sinn ergeben und 'DM' als Präfix verwenden. Zum Beispiel: Der Benutzer Datamodule heißt "Dmcustomers.dfm".
3.7.4Remotedatamodule Datei
3.7.4.1 Namen
Die Benennung der ausgelieferten Datei sollte sinnvoll sein und 'RDM' als Präfix verwenden. Zum Beispiel: Der von Benutzer renovierteatamodule heißt 'rdmcustomers.dfm'.
3.7.5Unit Datei
3.7.5.1 Normale Einheit
3.7.5.1.1Unit Datei Benennung
Die Benennung der Einheitsdatei sollte sinnvoll sein und "Einheit" als Präfix verwenden. Zum Beispiel: Eine generische Einheit heißt "UnitGereral".
3.7.5.2Formunits
3.7.5.2.1 Benennung
Der Name der Formunit -Datei muss mit dem Namen des Formulars übereinstimmen. Zum Beispiel: Das Hauptformular heißt Formmain.pas, der Name der Formunit -Datei lautet: UnitFormmain.
3.7.5.3DatamoduleUnits
3.7.5.3.1 Namen
Der Name der DataModuleUnit -Datei muss mit dem Namen des DataModule übereinstimmen. Zum Beispiel: Das Hauptdatamodule heißt dmmain.pas, der Name der DataModuleUnit -Datei lautet: UnitDMMain.
3.7.5.4 Dateiheader
Der Zweck, der Autor, das Datum und die Eingabe und die Ausgabe dieser Datei sollten am Header aller Dateien geschrieben werden. Zum Beispiel:
{
Datum der Änderung:
Autor:
verwenden:
Diese Modulstruktur besteht aus:
}
3.7.6Forms und Datamodulesforms
3.7.6.1form Klasse
1. Bildungsnamens Standards
Der Name der Formsklasse sollte sinnvoll sein und "tform" als Präfix verwenden. Zum Beispiel: Der Name der Ablaufklasse lautet:
TaboutForm = Klasse (tform)
Der Name der Hauptform ist
TmainForm = class (tform)
2. Namensstandards für Formklasseninstanzen nennen
Die Namen der Formklasseninstanzen sollten im gleichen Zeitraum mit den Namen der Formklasse mit 'T' übereinstimmen. Zum Beispiel:
Typern
Instanzenname
Taaboutform
Überform
Tmainform
Mainform
TcustomerEntryform
CustomerEnryform
3.7.6.2datamodulesform
3.7.6.2.1.Datamoduleform -Namensstandard
Die Benennung der Datamodulesforms -Klasse sollte sinnvoll sein und 'TDM' als Präfix verwenden. Zum Beispiel:
Tdmcustomer = class (tdatamodule)
Tdmorders = class (tdatamodule)
3.7.6.2.2.Datamodule Instanz -Namensstandarding Standard
Der Name der DataModuleForm -Klasse -Instanz sollte mit dem Namen der Datamoduleform -Klasse mit 'T' gleichzeitig übereinstimmen. Zum Beispiel:
Typern
Instanzenname
Tcustomerdatamodule
CustomerDatamodule
Tordersdatamodule
BestellungenDatamodule
3.8 Kontrollen
3.8.1 Benennung von Kontrollinstanzen
Eine Instanz eines Steuerelements sollte den Namen der Steuerklasse verwenden, die 't' als Präfix entfernt, z. B. als Präfix:
Der Name des Tedits, der in den Namen des Benutzers eingeht, lautet: editusername.
3.8.2 Abkürzung von Kontrollen
Der Name der Steuerung kann mit der folgenden Abkürzung verwendet werden, die verwendete Abkürzung wird jedoch zwischen dem Steuernamen '_' hinzugefügt:
3.8.2.1Spandardtab
MMtmainmenu
PMTPOPUPMENU
MMitMainMenuitem
pmitpopupMenuitem
lbltlabel
edttedit
memtmemo
Btntbutton
CBTCheckbox
rbtradiobutton
lbtlistbox
CBTCOMBOBOX
SCBTSCROLLBAR
GBTGroupBox
rgtradioGroup
pnltpanel
CltCommandlist
3.8.2.2Additionaltab
bBtntbitbtn
sbtspeedbutton
Metmaskedit
sgtstringgrid
dgtdrawgrid
Imgimage
shptshape
bvltbevel
sbxtScrollbox
CLBTChecklistbox
sptSplitter
stxtStatictictext
chttchart
3.8.2.3win32tab
tbctabcontrol
PGCTPAGECONTROL
Iltimagelist
retichedit
tbrttracbar
PrbtProgressBar
Udtupdown
Hkthotkey
Anitanimit
dtptdatetimePicker
tvtreeview
lvtlistView
HdrtheaderControl
StBTSTATUSBAR
tlbttoolbar
Clbtcoolbar
3.8.2.4SystemTab
tmtimer
PBTPaintbox
MptmediaPlayer
Olectolecontainer
DDCCTDDECLIENTCONV
ddcitddeclientItem
DDSCTDDeServerConv
ddSitdDeServeritem
3.8.2.5 Internettab
CSKTClientsocket
ssktserversocket
wbdtwebdispatcher
PPTPAGEPRODER
tptQueryTableProducer
dstptdatasettableProducer
nmdttnmdaytime
Nectnmecho
nftnmfinger
nftptnmftp
NHTTPTNMHTTP
nmsgtnmmmsg
nmsgtnmmmsgServ
nntptnmnnnn
npoptnmpop3
NuuptnmuUProcessor
SMTPTNMSMTP
nstttnmstrm
nstnmstrmserv
ntmtnmtime
nudptnmudp
psktpowersock
NGSTNMGENERALSERVERVER
htmlthtml
urltnmurl
smltSimplemail
3.8.2.6dataaccesstab
dstdatasource
tBlttable
QrytQuery
sptStoredProc
dbtdatabase
ssntSession
bmtbatchmove
USQLTUPDATESQL
3.8.2.7DatacontrolStab
dbgtdbgrid
dbntdbnavigator
DBTTDBTEXT
dbetdbedit
dbmtdbmemo
Dbitdbimage
DBLBTDBLISTBOX
DBCBTDBCOMBOBOX
DBCHTDBCheckbox
DBRGTDBRADioGROUP
DBLLTDBLOOKUPLISTBOX
DBLCTDBLOOKUPCOMBOBOX
dbretdbrichedit
DBCGTDBCTRLGRID
dbchtdbchart
3.8.2.8DecisionCubetab
DCBTDecisionCube
DCQTDecisionQuery
dcstDecisionource
DCPTDECISIONPIVOT
DCGTDecisionGrid
dcgrtDecisiongraph
3.8.2.9qreportTab
QRTQUICKREPORT
qrsdtqrsubdetail
QRBTQRBAND
QRCBTQRCHILDBAND
QRGTQRGROUP
qrltqrlabel
qrttqrtext
Qretqreexpr
QRSTQRSYSDATA
qrmtqrmemo
QRRRTTQRRICHTEXT
qrdrtqrdbrichttext
qrshtqrShape
Qritqrimage
qrditqrdbmimage
qrcrtqrcompositereport
QRPTQRPREVIEW
QRCHTQRCHART
3.8.2.10Dialogstab
OpendialoGtopendialog
SavedialoGTSavedialog
OpenPicturedialoGTopenPicturedialog
SavePicturedialOGTSavePicturedialog
FontdialogtfontDialog
Colordialogtcolordialog
PrintDialoGtprintDialog
PrintersetupdialoGTPrintsetUpDialog
FindDialogtfinddialog
Ersetzt ersetzt
3.8.2.11win31tab
DBLLTDBLOOKUPLIST
DBLCTDBLOOKUPCOMBO
tsttabset
Oltoutline
tnbttabbednotebook
NBTNOTebook
HDRthoader
FLBTFILELISTBOX
DLBTDirectoryListBox
DCBTDRiveCombobox
FCBTFiltercombobox
3.8.2.12Amplestab
ggtgauge
CGTColorgrid
SPBTSPinButton
Spetpinedit
DoltDirectoryoutline
Caltcalendar
ibeatibeventalerter
3.8.2.13activextab
CFXTCHARTFX
vsptvsspell
F1BTF1Book
vtctvtchart
Grptgraph
3.8.2.14midastab
prvtProvider
CDStClientDataset
QCDStQueryClientDataset
DCOMTDCOMCONNECTION
OleetoleenterPriseConnection
scktsocketConnection
rmstremoteserver
Midtmidasconnection
4. Ändern Sie die Spezifikationen
Die in diesen Regeln getroffenen Bestimmungen gelten nur für Verfahren, die in das Konfigurationsmanagement aufgenommen wurden. Bei solchen Modifikationen ist es erforderlich, den Inhalt vor der Änderung beizubehalten und den geänderten und neu hinzugefügten Inhalt zu identifizieren. Fügen Sie dem Dateikopf die erforderlichen Informationen wie Modificer, Änderungsdatum, Änderungsanweisungen usw. hinzu.
4.1 Ändern Sie den History -Datensatz
Bei genehmigten Änderungen an der Quelldatei sollte der Modificer dem Programmdateikopf einen Änderungshistorie -Element hinzufügen. In jeder nachfolgenden Änderung muss der Modificer die folgenden Informationen im Element eingeben:
Ändern
Änderungszeit
Grund zur Änderung
So ändern Sie die Anweisungen
4.2 neue Codezeile hinzufügen
Die neue Codezeile hätte bereits und nachher Zeilen kommentiert haben sollen.
// Person, Änderungszeit, Änderungsanweisungen ändern
Codesteile hinzugefügt
// Ende der Änderung
4.3 Löschen Sie die Codezeile
Verwenden Sie Kommentare, um vor und nach dem Löschen der Codezeile zu beschreiben.
// Person, Änderungszeit, Änderungsanweisungen ändern
// Die zu löschende Codezeile (kommentieren Sie die zu gelöschte Anweisung)
// Ende der Änderung
4.4 Ändern Sie die Codezeile
Ändern Sie die Codezeile, um die Codezeile zu löschen und neue Codezeilen hinzuzufügen.
// Person, Änderungszeit, Änderungsanweisungen ändern
// die Codezeile vor der Änderung
// Ende der Änderung
// Modifizierte Codezeile
Modifizierte Codezeile
// Ende der Änderung