1. Introdução às especificações
Essa especificação estipula principalmente as regras e precauções que os programas de origem Delphi devem seguir durante o processo de escrita. O objetivo de escrever essa especificação é manter os hábitos de redação do código -fonte dos desenvolvedores de software da empresa consistentes. Fazendo isso que cada membro do grupo pode entender o código de outros membros do grupo, a fim de facilitar o desenvolvimento secundário da manutenção do sistema de memória do código -fonte.
2. Especificações de formato geral
2.1 Indentação
O recuo são os dois espaços expostos para aumentar a legibilidade quando o nível do programa de origem mudar. A regra do indentação é recuperar dois espaços para cada nível. A guia não é permitida. Porque a guia produzirá efeitos diferentes devido a diferentes configurações feitas pelo usuário. Quando você encontra, inicie ou entre em julgamento, loop, manuseio de exceção, com declaração, declaração de tipo de registro, declaração de classe, etc., adicione um nível. As declarações de classe, etc. serão reduzidas em um nível. Por exemplo:
iftmpint <> 100then
Tmpint: = 100;
2.2BEGIN..END
A declaração de início e a declaração final devem ocupar uma única linha no programa de origem, por exemplo:
fori: = 0to10DOBEGIN // Uso incorreto
fim;
fori: = 0to10DO // Uso correto
Começar
fim;
2.3 Espaços
Adicione espaços nas duas extremidades dos operadores e símbolos de julgamento lógico, como: i: = i+1;, aandb, etc., mas não são necessários espaços ao adicionar colchetes. Por exemplo: if (a> b) então // uso incorreto
Se (a> b) então // o uso correto
Por exemplo: ProcedureTest (Param1: Integer; Param3: String);
3.ObjectPascal Grammar Reting Format Especificações
3.1 Palavras reservadas
Todas as palavras ou palavras -chave reservadas no ObjectPascal devem ser usadas em letras minúsculas.
3.2 Processos e funções
3.2.1 Nomeação e formato
Os nomes dos procedimentos e funções devem ser compostos por palavras significativas, e a primeira letra de todas as palavras deve estar em letras maiúsculas. Por exemplo:
ProcedureFormatardDisk; // Nomeação incorreta
ProcedureFormathardDisk; // Nomeação correta
O processo e a função que definem o conteúdo de uma variável deve usar definido como prefixo, por exemplo:
ProcedureSetUserName;
Processos e funções que leem o conteúdo variável devem usar o GET ASFIX, por exemplo:
functionGetUserName: string;
3.2.2 Parâmetros de procedimentos e funções
3.2.2.1 Nomeação
Os parâmetros do tipo unificado são escritos na mesma frase:
ProcedureFoo (param1, param2, param3: integer; param4: string);
3.2.2.2 Nomeação
Todos os parâmetros devem ser significativos;
ProcedimentosMomeProc (AUSERNAME: String; AUSERAGE: INTEGER);
3.2.2.3 Conflito de nomeação
Quando as duas unidades usadas incluem uma função ou procedimento duplicado, quando você se refere a esta função ou procedimento, a função ou procedimento na unidade declarada na cláusula de uso será executada. Para evitar esse 'dependente da cláusula de uso', é necessário escrever a função completa ou a fonte de processo ao se referir a uma função ou processo. Por exemplo:
Sysutils.findclose (SR);
Windows.findClose (Handle);
3.3 Variáveis
3.3.1 Nomeação e formato variáveis
Antes de tudo, as variáveis devem receber nomes significativos para que outros membros do grupo possam entender facilmente o significado representado pela variável. capital. Por exemplo:
var
WriteFormat :: String;
Ao mesmo tempo, para alguns tipos específicos, certas abreviações podem ser usadas da seguinte maneira:
Tipo de ponteiro
P
Tipo de registro
Rec
Tipo de matriz
Arr
tipo
Aula
As variáveis de controle de loop geralmente usam um único caractere como: i, j ou k. Além disso, também é permitido usar um nome significativo como o UserIndex.
3.3.2 Variáveis locais
O uso de variáveis locais no processo segue as regras de nomeação para todas as outras variáveis.
3.3.3 Variáveis globais
Tente não usar variáveis globais. Por exemplo:
GPrecUserCount: Point; // A variável global com o nome UserCount, seu tipo é um ponteiro para uma estrutura
Mas variáveis globais podem ser usadas dentro do módulo. Todas as variáveis globais nos módulos devem ser prefixadas com 'f'. Se for necessária a troca de dados entre vários módulos, ele precisará ser implementado declarando atributos. Por exemplo:
tipo
TFormOverdraftreTurn = classe (TForm)
Privado
{PrivateClarations}
FUSERNAME: String;
FUSERCOUNT: Inteiro;
ProcedureSetUserName (Valor: String);
FunctionGetUserName: string;
público
{PublicDeclarations}
Nome da Propriedade: StringReadGetUserNameWriteSetUserName;
PropertyUserCount: IntegerReadfuserCountWriteFuserCount;
fim;
Tipo 3.4
3.4.1 Protocolo de caso
Os nomes do tipo de caracteres reservados devem ser minúsculos. Os tipos de Win32API geralmente são capitalizados e as primeiras letras são capitalizadas para outros tipos, e as letras restantes são minúsculas, por exemplo:
var
Mystring: string; // ReservationWord
WindowHandle: hwnd; // win32apitype
I: Inteiro; // TIPEIDEIDIERINTRODUCLEDIMYSYSTEMUNIT
3.4.2 Tipo de ponto flutuante
Tente não usar o tipo real, ele só quer ser compatível com o código Pascal antigo e tente usar o tipo duplo. O tipo duplo é um processador otimizado e barramento de dados e é uma estrutura de dados padrão definida pelo IEEE. Estendido é usado quando o valor está fora da faixa de dobro. Mas estendido não é apoiado por Jave. No entanto, o tipo único pode ser usado ao escrever DLLs em outros idiomas.
3.4.3 Tipo de enumeração
O nome do tipo de enumeração deve ser significativo e o nome do tipo deve ser prefixado 't'. O nome do conteúdo do tipo Enum deve conter a abreviação do nome do tipo Enum, por exemplo:
TSongType = (Strock, Stclassical, Stcountry, Stalternative, STheavymetal, STRB);
3.4.4 Tipo de matriz
O nome do tipo de matriz deve ser significativo e o nome do tipo deve ser prefixado 't'. Se você declarar um ponteiro para um tipo de matriz, deve prefixar 'P' antes do nome desse tipo, por exemplo:
tipo
Pcyclearray =^tcyclearray;
Tcyclearray = matriz [1..100] OFINTEGER;
3.4.5 Tipo de registro
O nome do tipo de registro deve ser significativo e o nome do tipo deve ser prefixado 't'. Se você declarar um ponteiro para um tipo de matriz, deve prefixar 'P' antes do nome desse tipo, por exemplo:
tipo
Pemploeee =^temploee;
Temployee = registro
Employeename: string
Empregar: duplo;
fim;
Categoria 3.5
3.5.1 Nomeação e formato
O nome da classe deve ser significativo e o nome do tipo deve ser prefixado 't'. Por exemplo:
tipo
Tcustomer = classe (objeto)
O nome de uma instância de classe geralmente é o nome da classe com 't' removido. Por exemplo:
var
Cliente: Tcustomer;
Variáveis na classe 3.5.2
3.5.2.1 Nomeação e formato
O nome da classe deve ser significativo e o nome do tipo deve ser prefixado 'f'. Todas as variáveis devem ser quatro em um. Se você precisar acessar essa variável de fora, precisará declarar uma propriedade
Método 3.5.3
3.5.3.1 Nomeação e formato
Nomeação e formatação de funções e procedimentos.
3.5.3.2 Método de acesso a atributos
Todos os métodos de acesso ao atributo devem aparecer em privado ou protegido. Nomear o método de acesso ao atributo é o mesmo que nomeando as funções e procedimentos. O parâmetro do método escrito deve ser nomeado 'valor' e seu tipo é consistente com o atributo a ser escrito. Por exemplo:
Tsomeclass = classe (objeto)
Privado
FSOMPOFIELD: Inteiro;
protegido
functionGetsomefield: Inteiro;
ProcedesetSomeField (Valor: Inteiro);
público
Propertysomefield: INTEGERRADEGETHFILEDWRITESSOMEFIELD;
fim;
3.6 Propriedades
3.6.1 Nomeação e formato
Os nomes das variáveis da classe com o prefixo 'f' são consistentes com a operação.
3,7 arquivo
3.7.1 Arquivo de projeto
3.7.1.1 Estrutura do diretório do projeto
Diretório da casa do programa -Bin (caminho onde o aplicativo está localizado)
-Db (caminho onde o banco de dados local está localizado)
-Doc (caminho onde o documento está localizado)
-Hlp (caminho onde o arquivo de ajuda está localizado)
-Backup (caminho de backup)
-Tmp (caminho do arquivo temporário)
3.7.1.2 Nomeação
O arquivo do projeto deve usar um nome significativo. Por exemplo: o arquivo do projeto para informações do sistema em Delphi é nomeado sysinfo.dpr.
3.7.2 Arquivo de forma
3.7.2.1 Nomeação
Consistente com o nome do formulário: por exemplo: se o nome do formulário for formmAin, o nome do arquivo de formulário é formmAin.frm.
3.7.3datamodule Arquivo
3.7.3.1 Nomeação
A nomeação do arquivo datamodule deve fazer sentido e usar 'dm' como prefixo. Por exemplo: o datamodule do usuário é chamado 'dmcustomers.dfm'.
3.7.4RemotedAtamodule Arquivo
3.7.4.1 Nomeação
A nomeação do arquivo RemotetAtamodule deve fazer sentido e usar 'rdm' como prefixo. Por exemplo: o usuário remotedatamodule é nomeado 'rdmcustomers.dfm'.
3.7.5 -unidade Arquivo
3.7.5.1 Unidade normal
3.7.5.1.1 Naming de arquivo de unidade
A nomeação do arquivo da unidade deve fazer sentido e usar 'unidade' como prefixo. Por exemplo: uma unidade genérica é nomeada 'Unitgeneral'.
3.7.5.2formunits
3.7.5.2.1 Nomeação
O nome do arquivo formunit deve ser consistente com o nome do formulário. Por exemplo: o formulário principal é chamado formmAin.PAS, o nome do arquivo formunit é: UnitFormMain.
3.7.5.3datamoduleunits
3.7.5.3.1 Nomeação
O nome do arquivo datamoduleunit deve ser consistente com o nome do datamodule. Por exemplo: o principal datamodule é chamado dmmAin.pas, então o nome do arquivo datamoduleunit é: UnitDmmAin.
3.7.5.4 Cabeçalho do arquivo
O objetivo, autor, data e entrada e saída deste arquivo devem ser gravados no cabeçalho de todos os arquivos. Por exemplo:
{
Data da modificação:
autor:
usar:
Esta estrutura do módulo consiste em:
}
3.7.6forms e datamodulesforms
3.7.6.1 Classe
1. Padrões de nomeação da classe da forma
O nome da classe Forms deve fazer sentido e usar 'tform' como prefixo. Por exemplo: o nome da classe Aboundform é:
TaboutForm = classe (tform)
O nome da forma principal é
Tmainform = classe (tform)
2.
Os nomes das instâncias da classe de formulário devem ser consistentes com os nomes da classe de formulário com 't' durante o mesmo período. Por exemplo:
Tipo de tipo
InstanceName
Taaboutform
Sobreform
Tmainform
Mainform
TcustomerEntryform
CustomerEntryForm
3.7.6.2DatamodulesForm
3.7.6.2.1.DatamoduleForm Nomeação padrão
A nomeação da classe DatamodulesForms deve fazer sentido e usar 'TDM' como prefixo. Por exemplo:
Tdmcustomer = classe (tdatamodule)
Tdmorders = classe (tdatamodule)
3.7.6.22.
O nome da instância da classe DatamoduleForm deve ser o mesmo que o nome da classe DatamoduleFform com cair 'T' ao mesmo tempo. Por exemplo:
Tipo de tipo
InstanceName
TcustomerDatamodule
CustomerDatamodule
Tordersdatamodule
Ordensdatamodule
3.8 Controles
3.8.1 Nomeação de instâncias de controle
Uma instância de um controle deve usar o nome da classe de controle que remove 't' como um prefixo, por exemplo:
O nome do TEDIT que entra no nome do usuário é: EditUserName.
3.8.2 Abreviação de controles
O nome do controle pode ser usado com a seguinte abreviação, mas a abreviação usada é adicionada entre o nome de controle '_':
3.8.2.1StandardTab
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
imgtimage
shptshape
BvltBevel
sbxtScrollBox
clbtchecklistbox
spltsplitter
stxtStatictExt
CHTTCHART
3.8.2.3win32tab
tbctabControl
PGCTPAGECONTROL
Itimagelista
Retichedit
tbrttracbar
PrBtProgressBar
udtupdown
HKTHOTKEY
anitanimate
dtptDateTimePicker
TVTreeView
lvtlistView
hdrtheaderControl
stbtstatusbar
tlbttoolbar
CLBTCOOLBAR
3.8.2.4SystemTab
tmttimer
PBTPaintBox
mptmediaplayer
OLECTOLECONTINER
DDCCTDDECLIENTCONV
ddcitddeclientItem
DDSCTDDERERVERCONV
DDSITDDDESERVERITEM
3.8.2.5 Internettab
CSKTCLIENTESBocket
SSKTSERVERVERSOCKET
wbdtwebdispatcher
PPTPageProducer
TPTQUERYTABLEPRODUCER
dstptDataSettableProducer
nmdttnmdaytime
Nectnmecho
nftnmfinger
nftptnmftp
httptnmhttp
nmsgtnmmsg
nmsgtnmmsgserv
nntptnmnntp
npoptnmpop3
nuuptnmuuprocessor
smtptnmsmtp
NSTTNMSTRM
NSTNMSTRMSERV
ntmtnmtime
nudptnmudp
psktpowersock
ngstnmgeneralServer
htmlthtml
urltnmurl
smltsimplemail
3.8.2.6DataAccessTab
dstdataSource
tblttable
QrytQuery
sptSoredProc
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
dcstdecisionsource
dcptDecisionPivot
dcgtDecisionGrid
dcgrtdecisiongraph
3.8.2.9QReportTab
qrtquickreport
qrsdtqrsubDetail
qrbtqrband
qrcbtqrchildband
qrgtqrgroup
qrltqrlabel
qrttqrtext
qretqreexpr
qrstqrsysdata
qrmtqrmemo
qrrrttqrrichText
qrdrtqrdbrichtext
qrshtqrshape
qritqrimage
qrditqrdbmimage
qrcrtqrcompositereport
QRPTQRPreview
qrchtqrchart
3.8.2.10DialogStab
Opendialogtopendialog
SavedialogtSavedialog
OpenPictUredialOGTopenPictUredialog
SavePictureDialogTSavePictureDialog
FontdialogtfontDialog
Colordialogtcolordialog
PrintDialogtprintDialog
PrinterSetUpDialogtprintSetupDialog
FindDialogtfinddialog
RepolloGtReplacedialog
3.8.2.11win31tab
dblltdblookuplist
DBLCTDBLOOKUPCOMBO
tsttabset
OLTOUTLINE
TnbttabbedNotebook
NBTNoteBook
hdrtheader
FLBTFILELISTBOX
dlbtDirectoryListBox
DCBTDRIVECombOBOX
FCBTFILTERCOMBOBOX
3.8.2.12Samplestab
ggtgauge
CGTCOLORGRID
spbtspinbutton
spspinedit
DoltDirectoryoutLine
Caltcalendar
iBeatibeVentalerter
3.8.2.13ActiveXTab
cfxtChartfx
VSPTVSSPELL
F1BTF1book
vtctvtchart
GRPTGRAPH
3.8.2.14midastab
PrvtProvider
CDSTClientDataSet
QCDSTQUERYCLIENTDataSet
dComtdComConnection
OleetoleEnterPRISECONNEÇÃO
SCKTSocketConnection
rmStRemoteServer
MidTmidasconection
4. Modificar as especificações
As disposições feitas nessas regras se aplicam apenas a procedimentos que foram incorporados ao gerenciamento de configurações. Nessas modificações, é necessário reter o conteúdo antes da modificação e identificar o conteúdo modificado e recém -adicionado. E adicione as informações necessárias, como modificador, data de modificação, instruções de modificação etc. ao cabeçalho do arquivo.
4.1 Modificar o registro de história
Ao fazer modificações aprovadas no arquivo de origem, o modificador deve adicionar um item de histórico de modificação ao cabeçalho do arquivo do programa. Em cada modificação subsequente, o modificador deve preencher as seguintes informações no item:
Modificar
Tempo de modificação
Razão de modificação
Como modificar as instruções
4.2 Adicione nova linha de código
A nova linha de código deveria ter comentado linhas antes e depois.
// Modificar pessoa, tempo de modificação, instruções de modificação
Linha de código adicionada
// Fim da modificação
4.3 Exclua a linha de código
Use linhas de comentários para descrever antes e depois da exclusão da linha de código.
// Modificar pessoa, tempo de modificação, instruções de modificação
// A linha de código a ser excluída (comente a declaração a ser excluída)
// Fim da modificação
4.4 Modifique a linha de código
Modifique a linha de código para excluir a linha de código e adicione novas linhas de código.
// Modificar pessoa, tempo de modificação, instruções de modificação
// a linha de código antes da modificação
// Fim da modificação
// linha de código modificada
Linha de código modificada
// Fim da modificação