1. Introducción a las especificaciones.
Esta especificación estipula principalmente las reglas y precauciones que se deben seguir durante el proceso de escritura de programas fuente de Delphi. El propósito de escribir esta especificación es hacer que los hábitos de escritura del código fuente de los desarrolladores de software de la empresa sean consistentes. Esto permite que cada miembro del equipo comprenda el código de otros miembros del equipo, lo que facilita el mantenimiento del sistema de memoria de desarrollo secundario del código fuente.
2. Especificaciones generales de formato
2.1 Sangría
La sangría son dos espacios expuestos para aumentar la legibilidad cuando cambia el nivel del programa fuente. La regla de sangría es de dos espacios por nivel. No se permite la tabulación. Porque Tab producirá diferentes efectos debido a las diferentes configuraciones realizadas por el usuario. Cuando encuentre un juicio de inicio o entrada, bucle, manejo de excepciones, con declaración, declaración de tipo de registro, declaración de clase, etc., aumente un nivel. Cuando encuentre un juicio de fin o salida, bucle, manejo de excepciones, con declaración, declaración de tipo de registro, la clase. La declaración se reduce en un nivel durante la espera. Por ejemplo:
si TmpInt <> 100 entonces
IntTmp := 100;
2.2 Comienzo...Fin
La declaración de inicio y la declaración de finalización deben ocupar una línea en el programa fuente, por ejemplo:
para I: = 0 a 10 comienzo // Uso incorrecto
fin;
para I := 0 a 10 hacer //Uso correcto
comenzar
fin;
2,3 espacios
Agregue espacios en ambos extremos de los operadores y símbolos de juicio lógico, como: I: = I + 1;, ayb, etc., pero no se requieren espacios al agregar paréntesis. Por ejemplo: si (a > b) entonces //uso incorrecto
Si (a > b) entonces //Uso correcto
Otro ejemplo: Prueba de procedimiento (Param1: entero; Param3: cadena);
3. Especificación del formato de escritura de sintaxis de Object Pascal
3.1 Palabras reservadas
Las palabras reservadas o palabras clave en el lenguaje Object Pascal deben escribirse en letras minúsculas.
3.2 Procedimientos y funciones
3.2.1 Denominación y formato
Los nombres de procedimientos y funciones deben constar de todas las palabras significativas y la primera letra de todas las palabras debe estar en mayúscula. Por ejemplo:
procedimiento formatear disco duro;//nombramiento incorrecto
procedimiento FormatHardDisk;//Nombre correcto
Los procedimientos y funciones que establecen el contenido de las variables deben tener el prefijo Set, por ejemplo:
procedimiento Establecer nombre de usuario;
Los procedimientos y funciones que leen el contenido de variables deben usar Get como prefijo, por ejemplo:
función GetUserName: cadena;
3.2.2 Parámetros de procedimientos y funciones
3.2.2.1 Denominación
Los parámetros del mismo tipo se escriben en la misma frase:
procedimiento Foo(Param1, Param2, Param3: entero; Param4: cadena);
3.2.2.2 Denominación
Todos los parámetros deben ser significativos; y cuando el nombre del parámetro sea el mismo que el nombre de otros atributos, agregue un prefijo 'A', por ejemplo:
procedimiento SomeProc(AUserName: cadena; AUserAge: entero);
3.2.2.3 Conflicto de nombres
Cuando dos unidades utilizadas incluyen una función o procedimiento con el mismo nombre, cuando haga referencia a esta función o procedimiento, se ejecutará la función o procedimiento en la unidad declarada más adelante en la cláusula de uso. Para evitar esta 'dependencia de cláusulas de uso', debe escribir la fuente completa de la función o procedimiento al hacer referencia a ella. Por ejemplo:
SysUtils.FindClose(SR);
Windows.FindClose(Manejar);
3.3 Variables
3.3.1 Denominación y formato de variables
Primero, todas las variables deben tener nombres significativos para que otros miembros del equipo puedan comprender fácilmente el significado de las variables. La denominación de variables puede utilizar nombres en inglés sinónimos. Se pueden utilizar varias palabras en inglés, pero la primera letra de cada palabra debe estar en mayúscula. Por ejemplo:
var
Formato de escritura::cadena;
Al mismo tiempo, se pueden utilizar ciertas abreviaturas para algunos tipos específicos como se muestra a continuación:
tipo de puntero
PAG
tipo de registro
rec
tipo de matriz
Arr
amable
Clase
Las variables de control de bucle suelen utilizar un solo carácter como: i, j o k. También se permite utilizar un nombre significativo como UserIndex.
3.3.2 Variables locales
El uso de variables locales dentro de un procedimiento sigue las reglas de nomenclatura para todas las demás variables.
3.3.3 Variables globales
Intente no utilizar variables globales. Si debe utilizar variables globales, debe agregar el prefijo 'g' y el tipo de variable debe reflejarse en el nombre de la variable. Por ejemplo:
gprecUserCount: point;//Variable global llamada UserCount, su tipo es un puntero a una estructura
Pero las variables globales se pueden utilizar dentro de los módulos. Todas las variables globales dentro del módulo deben tener el prefijo 'F'. Si es necesario intercambiar datos entre varios módulos, esto debe lograrse declarando atributos. Por ejemplo:
tipo
TFormOverdraftReturn = clase(TForm)
privado
{Declaraciones privadas}
Nombre del fusor: cadena;
FuserCount: entero;
Procedimiento SetUserName(Valor: cadena);
Función GetUserName: cadena;
público
{Declaraciones públicas}
propiedad UserName: cadena lee GetUserName escribe SetUserName;
propiedad UserCount: entero leer FuserCount escribir FuserCount;
fin;
3.4 Tipo
3.4.1 Protocolo del caso
Los nombres de tipo para palabras reservadas deben estar todos en minúsculas. Los tipos de API de Win32 suelen estar todos en mayúscula. Para otros tipos, la primera letra está en mayúscula y las letras restantes en minúscula.
var
MiCadena: cadena // Palabra reservada
WindowHandle: HWND // Tipo de API Win32
I: Entero; // tipo de identificador introducido en la unidad del sistema
3.4.2 Tipos de coma flotante
Intente no utilizar el tipo Real. Es sólo por compatibilidad con el antiguo código Pascal. Intente utilizar el tipo Doble. El tipo Double está optimizado para procesadores y buses de datos y es una estructura de datos estándar definida por IEEE. Cuando el valor excede el rango de Doble, use Extendido. Pero Java no admite Extendido. Sin embargo, el tipo Single se puede utilizar cuando se utilizan archivos DLL escritos en otros idiomas.
3.4.3 Tipos de enumeración
El nombre del tipo de enumeración debe ser significativo y el nombre del tipo debe tener el prefijo 'T'. El nombre del contenido del tipo de enumeración debe contener la abreviatura del nombre del tipo de enumeración, por ejemplo:
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
3.4.4 Tipos de matriz
El nombre del tipo de matriz debe ser significativo y el nombre del tipo debe tener el prefijo 'T'. Si declara un puntero a un tipo de matriz, debe anteponer el nombre del tipo con 'P', por ejemplo:
tipo
PCycleArray = ^TCicleArray;
TCycleArray = matriz[1..100] de número entero;
3.4.5 Tipos de registros
El nombre del tipo de registro debe ser significativo y el nombre del tipo debe tener el prefijo 'T'. Si declara un puntero a un tipo de matriz, debe anteponer el nombre del tipo con 'P', por ejemplo:
tipo
PEempleado = ^TEmpleado;
Empleado=registro
Nombre del empleado: cadena
Tarifa de empleado: Doble;
fin;
Categoría 3.5
3.5.1 Denominación y formato
Los nombres de las clases deben ser significativos y los nombres de los tipos deben tener el prefijo 'T'. Por ejemplo:
tipo
TCliente = clase(TOobjeto)
El nombre de una instancia de clase suele ser el nombre de la clase menos la 'T'. Por ejemplo:
var
Cliente: TCliente;
3.5.2 Variables en clases
3.5.2.1 Denominación y formato
Los nombres de las clases deben ser significativos y los nombres de los tipos deben tener el prefijo 'F'. Todas las variables deben ser de cuatro dimensiones. Si necesita acceder a esta variable desde el exterior, debe declarar un atributo
3.5.3 Método
3.5.3.1 Denominación y formato
Mismo nombre y formato para funciones y procedimientos.
3.5.3.2 Métodos de acceso a la propiedad
Todos los métodos de acceso a la propiedad deben aparecer en privado o protegido. La denominación de los métodos de acceso a atributos es la misma que la de las funciones y procedimientos. Además, el método de lectura debe usar el prefijo 'Get'. El método de escritura debe usar el prefijo 'Set'. El parámetro del método de escritura debe denominarse 'Valor' y su tipo debe ser coherente con la propiedad que se va a escribir. Por ejemplo:
TSomeClass = clase(TObjeto)
privado
fsomeField: entero;
protegido
función GetSomeField: Entero;
procedimiento SetSomeField (valor: entero);
público
propiedad SomeField: entero leer GetSomeField escribir SetSomeField;
fin;
3.6 Propiedades
3.6.1 Denominación y formato
Consistente con el nombre de la variable de clase con el prefijo 'F' sobre la que se utiliza para operar.
3.7 Documentación
3.7.1 Archivos de proyecto
3.7.1.1 Estructura del directorio del proyecto
Directorio de inicio del programa: Bin (la ruta donde se encuentra la aplicación)
-Db (ruta a la base de datos local)
-Doc (ruta donde se encuentra el documento)
-Hlp (ruta al archivo de ayuda)
-Copia de seguridad (ruta de respaldo)
-Tmp (ruta del archivo temporal)
3.7.1.2 Denominación
El archivo del proyecto debe tener un nombre significativo. Por ejemplo: el archivo de proyecto para información del sistema en Delphi se llama SysInfo.dpr.
3.7.2 Archivo de formulario
3.7.2.1 Denominación
Consistente con el nombre del formulario: Por ejemplo: si el nombre del formulario es FormMain, el nombre del archivo del formulario será FormMain.frm.
3.7.3 Archivo del módulo de datos
3.7.3.1 Denominación
Los archivos del módulo de datos deben tener un nombre significativo y tener el prefijo 'DM'. Por ejemplo: el módulo de datos del usuario se denomina 'DMCustomers.dfm'.
3.7.4 Archivos del módulo de datos remoto
3.7.4.1 Denominación
El archivo del módulo de datos remoto debe tener un nombre significativo y utilizar 'RDM' como prefijo. Por ejemplo: el módulo de datos remoto del usuario se denomina 'RDMCustomers.dfm'.
3.7.5 Archivo de unidad
3.7.5.1 Unidad Ordinaria
3.7.5.1.1 Denominación de archivos de unidades
Los archivos unitarios deben tener nombres significativos y utilizar "unidad" como prefijo. Por ejemplo: una unidad general se denomina 'UnidadGeneral'.
3.7.5.2 Unidades de formulario
3.7.5.2.1 Denominación
El nombre del archivo de la unidad del formulario debe ser coherente con el nombre del formulario. Por ejemplo: si el formulario principal se llama FormMain.pas, entonces el nombre del archivo de la Unidad de formulario es: UnitFormMain.
3.7.5.3 Unidades del módulo de datos
3.7.5.3.1 Denominación
El nombre del archivo de unidad del módulo de datos debe ser coherente con el nombre del módulo de datos. Por ejemplo: si el módulo de datos principal se llama DMMain.pas, entonces el nombre del archivo de la unidad del módulo de datos es: UnitDMMain.
3.7.5.4 Encabezado del archivo
El propósito, autor, fecha, entrada y salida del archivo debe escribirse al encabezado de todos los archivos. Por ejemplo:
{
Fecha de modificación:
autor:
usar:
La estructura de este módulo consta de:
}
3.7.6 Formularios y módulos de datos Formularios
3.7.6.1 Clase de formulario
1. Estándares de nomenclatura de clases de formularios
Las clases de formularios deben tener un nombre significativo y tener el prefijo 'TForm'. Por ejemplo: el nombre de la clase Acerca de formulario es:
TAcerca deForm = clase(TForm)
El nombre del formulario principal es
TForma principal = clase(TForm)
2. Estándares de nomenclatura para instancias de clase Formulario
El nombre de la instancia de la clase Formulario debe ser coherente con el nombre de la clase Formulario sin la 'T'. Por ejemplo:
Tipo Nombre
Nombre de instancia
Acerca deForm
Acerca deForm
Formulario principal
Formulario principal
Formulario de entrada de cliente
Formulario de entrada de cliente
3.7.6.2 Formulario de módulos de datos
3.7.6.2.1 Estándar de nomenclatura del formulario del módulo de datos
Las clases de formularios de módulos de datos deben tener nombres significativos y usar 'TDM' como prefijo. Por ejemplo:
ClienteTDM = clase(TDataModule)
TDMOrders = clase(TDataModule)
3.7.6.2.2 Estándares de denominación de instancias del módulo de datos
El nombre de la instancia de la clase Formulario del módulo de datos debe ser coherente con el nombre de la clase Formulario del módulo de datos con la 'T' omitida. Por ejemplo:
Tipo Nombre
Nombre de instancia
Módulo de datos del cliente
Módulo de datos del cliente
Módulo de datos de Torders
Módulo de datos de pedidos
3.8 Controles
3.8.1 Denominación de instancias de control
Las instancias de un control deben tener como prefijo el nombre de la clase de control menos la 'T', por ejemplo:
El nombre de Tedit donde se ingresa el nombre de usuario es: EditUserName.
3.8.2 Abreviatura de control
Se pueden utilizar las siguientes abreviaturas para el nombre del control, pero la abreviatura utilizada se agrega con '_' entre los nombres de los controles:
3.8.2.1 Pestaña Estándar
mm TMenú principal
pm TPopupMenu
mmiTMenú principalArtículo
pmiTPopupMenuItem
lblTLabel
edt T
mem TMemo
btn TBotón
cb TCheckBox
rb TRadioBotón
lb TListBox
cb TComboBox
scbTScrollBar
GB TGroupBox
rg TRadioGroup
pnlTPanel
cl TCommandList
3.8.2.2 Pestañas adicionales
bbtnTBitBtn
sbTBotónVelocidad
yo TMask
sg TStringGrid
dgTDrawGrid
imgTImagen
shp forma T
bvl
sbxTScrollBox
clb TCheckListbox
spl TSdivisor
stx TextoEstático
cht TChart
3.8.2.3 Pestaña Win32
tbcTTabControl
pgcTPageControl
ilTImageList
re TRich
tbr TTrackBar
prb TProgressBar
ud TUpDown
hk THotKey
ani TAnimate
dtpTDateTimePicker
tvTTreview
lv TListView
hdrTHHeaderControl
stb TStatusBar
tlb TToolBar
clbTCoolBar
3.8.2.4 Pestaña Sistema
tm TTimer
pb TPaintBox
mpTMediaPlayer
olec TOleContainer
ddccTDDEClientConv
ddciTDDEClientItem
ddscTDDEServerConv
ddsiTDDEServerItem
3.8.2.5 Pestaña Internet
cskTClientSocket
sskTServerSocket
wbd TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDíaHora
ncp TNMEcho
nf TNMFinger
nftpTNMFtp
nhttpTNMHttp
nMsg TNMMsg
nmsgTNMMSGServ
nntp TNMNNTP
npop TNMPop3
nuup TNMUUPProcesador
smtpTNMSMTP
nst TNMStrm
nsts TNMStrmServ
ntm TNMHora
nudpTNMUdp
pskTPowerSock
ngs TNMGeneralServer
htmlTHtml
urlTNMUrl
smlTSimpleMail
3.8.2.6 Pestaña Acceso a datos
fuente dsTData
tbl TTable
qry TQuery
spTSstoredProc
base de datos dbT
ssn sesión
bmTBatchMove
usql TUpdateSQL
3.8.2.7 Pestaña Controles de datos
dbgTDBGrid
Navegador dbn TDB
dbtTDBTexto
dbeTDB
dbm TDBMemoción
dbiTDBImagen
dblb TDBListBox
dbcb TDBComboBox
dbchTDBCheckBox
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupComboBox
dbreTDBRich
dbcgTDBCtrlGrid
dbchTDDBCráfico
3.8.2.8 Pestaña Cubo de decisión
dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionFuente
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDecisionGraph
3.8.2.9 Pestaña QReport
qr TQuickReport
qrsd TQRSubDetalle
qrb TQRBanda
qrcb TQRChildBand
qrg TQRGroup
qrl TQRLetiqueta
qrtTQRTexto
qreTQRExpr
qrs TQRSysData
qrm TQRMemoción
qrrt TQRRTexto enriquecido
qrdr TQRDBTexto rico
qrsh Forma TQR
qri TQRImagen
qrdi TQRDBMImagen
qrcr TQRCompositeReport
qrp TQRPrevisión
qrch TQRCráfico
3.8.2.10 Pestaña Diálogos
OpenDialog ApenDialog
GuardarDialog TSaveDialog
OpenPictureDialog ApenPictureDialog
Guardar imagen de diálogo TSaveImagen de diálogo
FontDialog TFontDialog
ColorDialog TColorDialog
Diálogo de impresión TDiálogo de impresión
Diálogo de configuración de impresora TDiálogo de configuración de impresión
BuscarDialog TFindDialog
Reemplazar diálogo TReemplazar diálogo
3.8.2.11 Pestaña Win31
dbll TDBLookupList
dblc TDDBúsquedaCombo
tsTTabSet
ol TEsquema
tnb TTabbedNoteBook
n.b. TNoteBook
hdrTHheader
flbTFileListBox
dlb TDirectoryListBox
dcb TVreComboBox
fcb TFilterComboBox
3.8.2.12 Pestaña Muestras
gg TGauge
cg TColorGrid
spb TSpinButton
speTSpin
dol TDirectorioEsquema
calTcalendario
ibea TIBEventAlerter
3.8.2.13 Pestaña ActiveX
cfx TChartFX
vspTVSSpell
f1bTF1Libro
vtc TVTCráfico
grp TGraph
3.8.2.14 Pestaña Midas
prvTPovider
cdsTClientDataSet
qcds TQueryClientDataSet
dcomTDCOMConexión
oleeTOleEnterpriseConexión
Conexión sckTSocket
rms TRemoteServer
mid TmidasConnection
4. Modificar especificaciones
Las disposiciones de esta regla se aplican únicamente a los programas que se han incluido en la gestión de configuración. En este tipo de modificación se requiere conservar el contenido anterior a la modificación e identificar el contenido modificado y nuevo. Y agregue la información necesaria, como el modificador, la fecha de modificación, la descripción de la modificación, etc., al encabezado del archivo.
4.1 Modificar registros históricos
Al realizar modificaciones aprobadas a un archivo fuente, el modificador debe agregar un elemento del historial de modificaciones al encabezado del archivo de programa. Para cada modificación posterior, el modificador deberá completar la siguiente información en el ítem:
Modificador
tiempo de modificación
Motivo de la modificación
Las instrucciones de modificación son cómo modificar.
4.2 Agregar nuevas líneas de código
Las nuevas líneas de código deben ir precedidas y seguidas de líneas de comentarios.
// Modificador, hora de modificación, descripción de la modificación
Agregar nueva línea de código
// Fin de la modificación
4.3 Eliminar líneas de código
Utilice líneas de comentarios antes y después de eliminar líneas de código.
//Modificador, hora de modificación, descripción de la modificación
//Línea de código que se eliminará (comenta la declaración que se eliminará)
//Fin de la modificación
4.4 Modificar líneas de código
Modifique la línea de código eliminándola y luego agregando una nueva línea de código.
//Modificador, hora de modificación, descripción de la modificación
//Línea de código antes de la modificación
//Fin de la modificación
//Línea de código modificada
Línea de código modificada
//Fin de la modificación