1. Introduction aux spécifications
Cette spécification stipule principalement les règles et précautions qui doivent être suivies lors du processus d'écriture des programmes sources Delphi. Le but de la rédaction de cette spécification est de rendre cohérentes les habitudes d'écriture du code source des développeurs de logiciels de l'entreprise. Cela permet à chaque membre de l'équipe de comprendre le code des autres membres de l'équipe, ce qui facilite la maintenance du système de mémoire de développement secondaire du code source.
2. Spécifications générales du format
2.1 Retrait
L'indentation est constituée de deux espaces exposés pour augmenter la lisibilité lorsque le niveau du programme source change. La règle d'indentation est de deux espaces par niveau. La tabulation n'est pas autorisée. Parce que Tab produira des effets différents en raison des différents paramètres définis par l'utilisateur. Lorsque vous rencontrez un jugement de début ou d'entrée, une boucle, une gestion des exceptions, une instruction with, une déclaration de type d'enregistrement, une déclaration de classe, etc., augmentez d'un niveau. Lorsque vous rencontrez un jugement de fin ou de sortie, une boucle, une gestion d'exception, une instruction with, une déclaration de type d'enregistrement, la classe. la déclaration est réduite d'un niveau en cas d'attente. Par exemple:
si TmpInt <> 100 alors
TmpInt := 100 ;
2.2 Début..Fin
L'instruction de début et l'instruction de fin doivent occuper une ligne dans le programme source, par exemple :
pour I := 0 à 10, commencez //Utilisation incorrecte
fin;
pour I := 0 à 10 do //Utilisation correcte
commencer
fin;
2,3 places
Ajoutez des espaces aux deux extrémités des opérateurs et des symboles de jugement logique, tels que : I := I + 1;, a et b, etc., mais aucun espace n'est requis lors de l'ajout de parenthèses. Par exemple : if ( a > b ) then //mauvaise utilisation
Si (a > b) alors //Utilisation correcte
Autre exemple : PRocedure Test(Param1 : entier ; Param3 : chaîne) ;
3. Spécification du format d'écriture de la syntaxe Pascal Objet
3.1 Mots réservés
Les mots ou mots-clés réservés dans le langage Object Pascal doivent être écrits en lettres minuscules.
3.2 Procédures et fonctions
3.2.1 Dénomination et format
Les noms de procédures et de fonctions doivent être entièrement composés de mots significatifs et la première lettre de tous les mots doit être en majuscule. Par exemple:
formatage de la procéduredisque dur ; // dénomination incorrecte
procédure FormatHardDisk;//Nom correct
Les procédures et fonctions qui définissent le contenu des variables doivent être préfixées par Set, par exemple :
procédure SetUserName ;
Les procédures et fonctions qui lisent le contenu des variables doivent utiliser Get comme préfixe, par exemple :
fonction GetUserName : chaîne ;
3.2.2 Paramètres des procédures et des fonctions
3.2.2.1 Dénomination
Les paramètres du même type sont écrits dans la même phrase :
procédure Foo(Param1, Param2, Param3 : entier ; Param4 : chaîne) ;
3.2.2.2 Dénomination
Tous les paramètres doivent être significatifs et lorsque le nom du paramètre est le même que le nom des autres attributs, ajoutez un préfixe « A », par exemple :
procédure SomeProc (AUserName: chaîne; AUserAge: entier);
3.2.2.3 Conflit de nom
Lorsque les deux unités utilisées incluent une fonction ou une procédure du même nom, alors lorsque vous référencez cette fonction ou cette procédure, la fonction ou la procédure de l'unité déclarée plus loin dans la clause use sera exécutée. Pour éviter cette « dépendance à la clause d'utilisation », vous devez écrire la source complète de la fonction ou de la procédure lorsque vous y faites référence. Par exemple:
SysUtils.FindClose(SR);
Windows.FindClose(Poignée);
3.3 Variables
3.3.1 Nom et format des variables
Premièrement, toutes les variables doivent avoir des noms significatifs afin que les autres membres de l'équipe puissent facilement comprendre la signification des variables. La dénomination des variables peut utiliser des noms anglais synonymes. Plusieurs mots anglais peuvent être utilisés, mais la première lettre de chaque mot doit être majuscule. Par exemple:
var
WriteFormat :: chaîne ;
Parallèlement, certaines abréviations peuvent être utilisées pour certains types spécifiques, comme suit :
type de pointeur
P.
type d'enregistrement
Enregistrer
type de tableau
Arr
gentil
Classe
Les variables de contrôle de boucle utilisent généralement un seul caractère tel que : i, j ou k. Il est également permis d'utiliser un nom significatif tel que UserIndex.
3.3.2 Variables locales
L'utilisation de variables locales dans une procédure suit les règles de dénomination de toutes les autres variables.
3.3.3 Variables globales
Essayez de ne pas utiliser de variables globales. Si vous devez utiliser des variables globales, vous devez ajouter le préfixe « g » et le type de variable doit être reflété dans le nom de la variable. Par exemple:
gprecUserCount: point;//Variable globale nommée UserCount, son type est un pointeur vers une structure
Mais les variables globales peuvent être utilisées dans les modules. Toutes les variables globales du module doivent être préfixées par « F ». Si des données doivent être échangées entre plusieurs modules, cela doit être réalisé en déclarant des attributs. Par exemple:
taper
TFormOverdraftReturn = classe (TForm)
privé
{Déclarations privées}
Nom de l'unité de fusion : chaîne ;
FuserCount : entier ;
Procédure SetUserName(Valeur : chaîne);
Fonction GetUserName : chaîne ;
publique
{Déclarations publiques}
propriété UserName : chaîne de lecture GetUserName écriture de SetUserName ;
propriété UserCount : Entier lire FuserCount écrire FuserCount ;
fin;
3.4 Type
3.4.1 Protocole de cas
Les noms de type pour les mots réservés doivent être tous en minuscules. Les types d'API Win32 sont généralement tous en majuscules. Pour les autres types, la première lettre est en majuscule et les lettres restantes sont en minuscules.
var
MaChaîne : chaîne ; // Mot réservé
WindowHandle : HWND ; // Type d'API Win32
I : Entier ; // identifiant de type introduit dans l'unité système
3.4.2 Types à virgule flottante
Essayez de ne pas utiliser le type Real. C'est juste pour des raisons de compatibilité avec l'ancien code Pascal. Essayez d'utiliser le type Double. Le type Double est optimisé pour les processeurs et les bus de données et constitue une structure de données standard définie par l'IEEE. Lorsque la valeur dépasse la plage Double, utilisez Étendu. Mais Extended n'est pas pris en charge par Java. Cependant, le type Single peut être utilisé lors de l'utilisation de DLL écrites dans d'autres langages.
3.4.3 Types d'énumération
Le nom du type d'énumération doit être significatif et le nom du type doit être préfixé par « T ». Le nom du contenu du type énumération doit contenir l'abréviation du nom du type énumération, par exemple :
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB) ;
3.4.4 Types de tableaux
Le nom du type de tableau doit être significatif et le nom du type doit être préfixé par « T ». Si vous déclarez un pointeur vers un type tableau, vous devez préfixer le nom du type avec 'P', par exemple :
taper
PCycleArray = ^TCycleArray;
TCycleArray = tableau[1..100] d'entier ;
3.4.5 Types d'enregistrements
Le nom du type d'enregistrement doit être significatif et le nom du type doit être préfixé par « T ». Si vous déclarez un pointeur vers un type tableau, vous devez préfixer le nom du type avec 'P', par exemple :
taper
PEmployé = ^TEmployé;
Employé = enregistrement
Nom de l'employé : chaîne
Taux employé : double ;
fin;
Catégorie 3.5
3.5.1 Nom et format
Les noms de classe doivent être significatifs et les noms de types doivent être préfixés par « T ». Par exemple:
taper
TClient = classe(TObject)
Le nom d'une instance de classe est généralement le nom de la classe moins le « T ». Par exemple:
var
Client : TClient ;
3.5.2 Variables dans les classes
3.5.2.1 Dénomination et format
Les noms de classe doivent être significatifs et les noms de types doivent être préfixés par « F ». Toutes les variables doivent être quadridimensionnelles. Si vous devez accéder à cette variable de l'extérieur, vous devez déclarer un attribut
3.5.3 Méthode
3.5.3.1 Dénomination et format
Même nom et format pour les fonctions et procédures.
3.5.3.2 Méthodes d'accès à la propriété
Toutes les méthodes d'accès à la propriété doivent apparaître en privé ou protégé. La dénomination des méthodes d'accès aux attributs est la même que celle des fonctions et des procédures. De plus, la méthode de lecture doit utiliser le préfixe « Get ». La méthode d'écriture doit utiliser le préfixe « Set ». Le paramètre de la méthode d'écriture doit être nommé 'Value' et son type doit être cohérent avec la propriété à écrire. Par exemple:
TSomeClass = classe (TObject)
privé
fsomeField : entier ;
protégé
fonction GetSomeField : entier ;
procédure SetSomeField (valeur : entier);
publique
propriété SomeField : entier lu GetSomeField écrit SetSomeField ;
fin;
3.6 Propriétés
3.6.1 Nom et format
Conformément au nom de la variable de classe préfixée par « F » sur laquelle elle est utilisée pour opérer.
3.7Documents
3.7.1 Fichiers de projet
3.7.1.1 Structure du répertoire du projet
Répertoire personnel du programme - Bin (le chemin où se trouve l'application)
-Db (chemin d'accès à la base de données locale)
-Doc (chemin où se trouve le document)
-Hlp (chemin d'accès au fichier d'aide)
-Sauvegarde (chemin de sauvegarde)
-Tmp (chemin de fichier temporaire)
3.7.1.2 Dénomination
Le fichier projet doit avoir un nom significatif. Par exemple : Le fichier projet des informations système dans Delphi est nommé SysInfo.dpr.
3.7.2 Fichier de formulaire
3.7.2.1 Dénomination
Cohérent avec le nom du Formulaire : Par exemple : si le nom du Formulaire est FormMain, le nom du fichier Formulaire sera FormMain.frm.
3.7.3 Fichier du module de données
3.7.3.1 Dénomination
Les fichiers du module de données doivent être nommés de manière significative et préfixés par « DM ». Par exemple : Le module de données utilisateur est nommé « DMCustomers.dfm ».
3.7.4 Fichiers du module de données distant
3.7.4.1 Dénomination
Le fichier du module de données distant doit être nommé de manière significative et utiliser « RDM » comme préfixe. Par exemple : le module de données distant de l'utilisateur est nommé « RDMCustomers.dfm ».
3.7.5 Fichier unité
3.7.5.1 Unité ordinaire
3.7.5.1.1 Dénomination des fichiers d'unité
Les fichiers d'unité doivent être nommés de manière significative et utiliser « unité » comme préfixe. Par exemple : Une unité générale est nommée « UnitGeneral ».
3.7.5.2 Unités de formulaire
3.7.5.2.1 Dénomination
Le nom du fichier de l'unité de formulaire doit être cohérent avec le nom du formulaire. Par exemple : si le formulaire principal s'appelle FormMain.pas, alors le nom du fichier Form Unit est : UnitFormMain.
3.7.5.3 Unités de module de données
3.7.5.3.1 Dénomination
Le nom du fichier unité du module de données doit être cohérent avec le nom du module de données. Par exemple : si le module de données principal s'appelle DMMain.pas, alors le nom du fichier unité du module de données est : UnitDMMain.
3.7.5.4 En-tête du fichier
Le but, l'auteur, la date, l'entrée et la sortie du fichier doivent être écrits en tête de tous les fichiers. Par exemple:
{
Date de modification :
auteur:
utiliser:
La structure de ce module se compose de :
}
3.7.6 Formulaires et modules de données
3.7.6.1 Classe de formulaire
1. Normes de dénomination des classes de formulaire
Les classes Forms doivent être nommées de manière significative et préfixées par « TForm ». Par exemple : Le nom de la classe À propos du formulaire est :
TAboutForm = classe (TForm)
Le nom du formulaire principal est
TMainForm = classe (TForm)
2. Normes de dénomination pour les instances de classe Form
Le nom de l’instance de classe Form doit être cohérent avec le nom de la classe Form sans le « T ». Par exemple:
Nom du type
Nom de l'instance
À propos du formulaire
À propos du formulaire
TmainForm
Formulaire principal
TCustomerEntryForm
Formulaire d'entrée client
3.7.6.2 Formulaire de modules de données
3.7.6.2.1. Norme de dénomination des formulaires de modules de données
Les classes de formulaires de modules de données doivent être nommées de manière significative et utiliser « TDM » comme préfixe. Par exemple:
TDMCustomer = classe (TDataModule)
TDMOrders = classe (TDataModule)
3.7.6.2.2. Normes de dénomination des instances du module de données
Le nom de l’instance de classe Data Module Form doit être cohérent avec le nom de la classe Data Module Form, le « T » étant omis. Par exemple:
Nom du type
Nom de l'instance
TCustomerDataModule
Module de données client
TorderDataModule
ModuleDonnéesCommandes
3.8 Contrôles
3.8.1 Dénomination des instances de contrôle
Les instances d'un contrôle doivent être préfixées par le nom de la classe de contrôle moins le « T », par exemple :
Le nom de Tedit où le nom d'utilisateur est saisi est : EditUserName.
3.8.2 Abréviation de contrôle
Les abréviations suivantes peuvent être utilisées pour le nom du contrôle, mais l'abréviation utilisée est ajoutée avec '_' entre les noms de contrôle :
3.8.2.1 Onglet Standard
mm TMainMenu
pm TPopupMenu
mmiTMainMenuItem
pmiTPopupMenuItem
lblTÉtiquette
edt T
mem TMemo
btn TButton
cb TCheckBox
rb TRadioButton
lb TListBox
cb TComboBox
scbTScrollBar
gb TGroupBox
rg TRadioGroup
pnlTPanel
cl TCommandListe
3.8.2.2 Onglets supplémentaires
bbtn TBitBtn
sbTSpeedButton
moi TMask
sg TStringGrid
dgTDrawGrid
imgTImage
shp TForme
bvl
sbxTScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cht TChart
3.8.2.3 Onglet Win32
tbcTTabControl
pgcTPageControl
ilTImageList
concernant TRich
tbr TTrackBar
prb TProgressBar
et TUpDown
hk THotKey
ani TAnimate
dtpTDateTimePicker
tvTTreeView
lv TListView
hdrTHeaderControl
stb TStatusBar
tlb TToolBar
clbTCoolBar
3.8.2.4 Onglet Système
tm TTimer
pb TPaintBox
mpTMediaPlayer
olec TOleContainer
ddccTDDEClientConv
ddciTDDEClientItem
ddscTDDEServerConv
ddsiTDDEServerItem
3.8.2.5 Onglet Internet
cskTClientSocket
sskTServerSocket
wbdTWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDayTime
nca TNMEcho
nf TNMFinger
nftpTNMFtp
nhttpTNMHttp
nMsg TNMMsg
nmsgTNMMSGServ
nntp TNMNNTP
npopTNMPop3
nuup TNMUUPProcesseur
smtp TNMSMTP
nst TNMStrm
nsts TNMStrmServ
ntm TNMTime
nudpTNMUdp
psk TPowerSock
ngs TNMGeneralServer
htmlTHtml
URLTNMUrl
smlTSimpleMail
3.8.2.6 Onglet Accès aux données
dsTDataSource
tbl TTable
qryTQuery
spTStoredProc
dbTDataBase
ssn Tsession
bmTBatchMove
usql TUpdateSQL
3.8.2.7 Onglet Contrôles de données
dbgTDBGrille
dbn TDBNavigateur
dbtTDBTexte
dbeTDB
dbm TDBMémo
dbiTDBImage
dblb TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox
dbrg TDBRadioGroup
dbll TBLookupListBox
dblc TBLookupComboBox
dbreTDBRich
dbcgTDBCtrlGrille
dbchTDDBGraphique
3.8.2.8 Onglet Cube de décision
dcb TDécisionCube
dcq TDecisionQuery
dcs TDécisionSource
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDécisionGraph
3.8.2.9 Onglet QReport
qr TQuickReport
qrsd TQRSubDétail
qrb TQRBande
qrcb TQRCildBand
qrg TQRGroup
qrl TQRLetiquette
qrtTQRTexte
qre TQRExpr
qrs TQRSysData
qrm TQRMémo
qrrt TQRRichText
qrdr TQRDBRichText
qrsh TQRShape
qri TQRImage
qrdi TQRDBMImage
qrcr TQRCompositeReport
qrp TQRPrévision
qrch TQRCart
3.8.2.10 Onglet Boîtes de dialogue
OpenDialog TOpenDialog
EnregistrerDialog TSaveDialog
OpenPictureDialog TOpenPictureDialog
EnregistrerPictureDialog TSavePictureDialog
FontDialog TFontDialog
CouleurDialog TColorDialog
ImprimerDialog TPrintDialog
PrinterSetupDialog TPrintSetupDialog
FindDialog TFindDialog
RemplacerDialog TReplaceDialog
3.8.2.11 Onglet Win31
dbll TBLookupList
dblc TBLookupCombo
tsTTabSet
ol TContour
tnb TTabbedNoteBook
nb TNoteBook
hdrTHeader
flbTFileListBox
dlb TDirectoryListBox
dcb TDriveComboBox
fcb TFilterComboBox
3.8.2.12 Onglet Echantillons
gg TGauge
cg TColorGrid
spb TSpinButton
speTSpin
dol TDirectoryOutline
calTCalendrier
ibea TIBEventAlerter
3.8.2.13 Onglet ActiveX
cfx TChartFX
vspTVSSort
f1bTF1Livre
vtc TVTGraphique
grp TGraph
3.8.2.14 Onglet Midas
prvTFournisseur
cdsTClientDataSet
qcds TQueryClientDataSet
dcomTDCOMConnexion
oleeTOleEnterpriseConnection
sckTSocketConnection
rms TRemoteServer
mi TmidasConnexion
4. Modifier les spécifications
Les dispositions de cette règle s'appliquent uniquement aux programmes qui ont été inclus dans la gestion de la configuration. Dans ce type de modification, il est nécessaire de conserver le contenu avant la modification et d'identifier le contenu modifié et nouveau. Et ajoutez les informations nécessaires telles que le modificateur, la date de modification, la description de la modification, etc. à l'en-tête du fichier.
4.1 Modifier les enregistrements de l'historique
Lorsqu'il apporte des modifications approuvées à un fichier source, le modificateur doit ajouter un élément d'historique des modifications à l'en-tête du fichier programme. Pour chaque modification ultérieure, le modificateur doit renseigner les informations suivantes dans la rubrique :
Modificateur
heure de modification
Raison de la modification
Les instructions de modification expliquent comment modifier
4.2 Ajouter de nouvelles lignes de code
Les nouvelles lignes de code doivent être précédées et suivies de lignes de commentaires.
// Modificateur, heure de modification, description de la modification
Ajouter une nouvelle ligne de code
// Fin de modification
4.3 Supprimer des lignes de code
Utilisez des lignes de commentaires avant et après la suppression de lignes de code.
//Modificateur, heure de modification, description de la modification
//Ligne de code à supprimer (commentez l'instruction à supprimer)
//Fin de modification
4.4 Modifier des lignes de code
Modifiez la ligne de code en supprimant la ligne de code puis en ajoutant une nouvelle ligne de code.
//Modificateur, heure de modification, description de la modification
//Ligne de code avant modification
//Fin de modification
//Ligne de code modifiée
Ligne de code modifiée
//Fin de modification