1. Знакомство со спецификациями
Эта спецификация в основном оговаривает правила и меры предосторожности, которые следует соблюдать в процессе написания исходных программ Delphi. Целью написания этой спецификации является обеспечение единообразия привычек разработчиков программного обеспечения компании в написании исходного кода. Это позволяет каждому члену команды понимать код других членов команды, что облегчает обслуживание вторичной системы памяти разработки исходного кода.
2. Общие характеристики формата
2.1 Отступ
Отступы представляют собой два пробела, предназначенные для повышения читаемости при изменении уровня исходной программы. Правило отступа — два пробела на уровень. Табуляция не разрешена. Потому что Tab будет давать разные эффекты из-за разных настроек, сделанных пользователем. При возникновении решения начала или входа, цикла, обработки исключений, оператора with, объявления типа записи, объявления класса и т. д., увеличьте один уровень. При обнаружении решения конца или выхода, цикла, обработки исключений, оператора with, объявления типа записи, класса. декларация уменьшается на один уровень во время ожидания. Например:
если TmpInt <> 100, то
ТмпИнт:= 100;
2.2 Начало... Конец
Оператор начала и оператор конца должны занимать одну строку в исходной программе, например:
for I := от 0 до 10 do Begin //Неправильное использование
конец;
for I := от 0 до 10 do //Правильное использование
начинать
конец;
2,3 места
Добавляйте пробелы на обоих концах операторов и символов логического суждения, например: I := I + 1;, a и b и т. д., но при добавлении круглых скобок пробелы не требуются. Например: if (a > b), то //неправильное использование
Если (a > b), то //Правильное использование
Другой пример: PROcedure Test(Param1: целое число; Param3: строка);
3. Спецификация формата записи синтаксиса Object Pascal
3.1 Зарезервированные слова
Зарезервированные слова или ключевые слова в языке Object Pascal следует писать строчными буквами.
3.2 Процедуры и функции
3.2.1 Именование и формат
Имена процедур и функций должны полностью состоять из значимых слов, а первая буква всех слов должна быть заглавной. Например:
процедура formatharddisk;//неправильное наименование
процедура FormatHardDisk;//Правильное имя
Процедуры и функции, устанавливающие содержимое переменных, должны иметь префикс Set, например:
процедура SetUserName;
Процедуры и функции, считывающие содержимое переменных, должны использовать префикс Get, например:
функция GetUserName: строка;
3.2.2 Параметры процедур и функций
3.2.2.1 Именование
Однотипные параметры записываются в одном предложении:
процедура Foo(Param1, Param2, Param3: Integer; Param4: string);
3.2.2.2 Именование
Все параметры должны быть значимыми; если имя параметра совпадает с именем других атрибутов, добавьте префикс «А», например:
процедура SomeProc (AUserName: строка; AUserAge: целое число);
3.2.2.3 Конфликт имен
Когда два используемых модуля включают функцию или процедуру с одинаковым именем, то при ссылке на эту функцию или процедуру будет выполнена функция или процедура в модуле, объявленная позже в предложении использования. Чтобы избежать этой «зависимости от использования», вам необходимо написать полный исходный код функции или процедуры при ссылке на нее. Например:
SysUtils.FindClose(SR);
Windows.FindClose(Дескриптор);
3.3 Переменные
3.3.1 Именование и формат переменных
Во-первых, все переменные должны иметь осмысленные имена, чтобы другие члены команды могли легко понять значение переменных. В именах переменных могут использоваться синонимичные английские имена. Можно использовать несколько английских слов, но первая буква каждого слова должна быть заглавной. Например:
вар
WriteFormat::строка;
В то же время для некоторых конкретных типов могут использоваться определенные сокращения, а именно:
тип указателя
П
тип записи
запись
тип массива
Арр
добрый
Сорт
Переменные управления циклом обычно используют один символ, например: i, j или k. Также разрешено использовать осмысленное имя, например UserIndex.
3.3.2 Локальные переменные
Использование локальных переменных внутри процедуры соответствует правилам именования всех остальных переменных.
3.3.3 Глобальные переменные
Старайтесь не использовать глобальные переменные. Если вам необходимо использовать глобальные переменные, вы должны добавить префикс «g», а тип переменной должен быть отражен в имени переменной. Например:
gprecUserCount: point; //Глобальная переменная с именем UserCount, ее тип — указатель на структуру
Но глобальные переменные можно использовать внутри модулей. Все глобальные переменные внутри модуля должны иметь префикс «F». Если необходимо обмениваться данными между несколькими модулями, этого нужно добиться путем объявления атрибутов. Например:
тип
TFormOverdraftReturn = класс (TForm)
частный
{Частные заявления}
Имя пользователя: строка;
FuserCount: целое число;
Процедура SetUserName (Значение: строка);
Функция GetUserName: строка;
общественный
{Публичные заявления}
свойство UserName: чтение строки GetUserName запись SetUserName;
свойство UserCount: целое число, чтение FuserCount, запись FuserCount;
конец;
3.4 Тип
3.4.1 Протокол дела
Имена типов для зарезервированных слов должны быть написаны строчными буквами. Все типы API Win32 обычно пишутся с заглавной буквы. Для других типов первая буква пишется с заглавной буквы, а остальные буквы — со строчной.
вар
MyString: строка // зарезервированное слово;
WindowHandle: HWND // Тип API Win32;
I: Integer // идентификатор типа, введенный в системный модуль;
3.4.2 Типы с плавающей запятой
Старайтесь не использовать тип Real. Это просто для совместимости со старым кодом Pascal. Попробуйте использовать тип Double. Тип Double оптимизирован для процессоров и шин данных и представляет собой стандартную структуру данных, определенную IEEE. Если значение превышает диапазон Double, используйте Extended. Но Extended не поддерживается Java. Однако тип Single можно использовать при использовании DLL, написанных на других языках.
3.4.3 Типы перечислений
Имя перечисляемого типа должно быть осмысленным, а имя типа должно начинаться с префикса «T». Имя содержимого перечислимого типа должно содержать аббревиатуру имени перечисляемого типа, например:
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
3.4.4 Типы массивов
Имя типа массива должно быть осмысленным, а имя типа должно начинаться с префикса «T». Если вы объявляете указатель на тип массива, вы должны поставить перед именем типа префикс «P», например:
тип
PCycleArray = ^TCycleArray;
TCycleArray = массив[1..100] целых чисел;
3.4.5 Типы записей
Имя типа записи должно быть осмысленным, а имя типа должно начинаться с префикса «T». Если вы объявляете указатель на тип массива, вы должны поставить перед именем типа префикс «P», например:
тип
PEmployee = ^TEmployee;
TEmployee=запись
Имя Сотрудника: строка
Ставка сотрудника: двойная;
конец;
Категория 3.5
3.5.1 Именование и формат
Имена классов должны быть осмысленными, а имена типов должны начинаться с префикса «T». Например:
тип
TCustomer = класс (TObject)
Имя экземпляра класса обычно представляет собой имя класса без буквы «Т». Например:
вар
Клиент: TCustomer;
3.5.2 Переменные в классах
3.5.2.1 Именование и формат
Имена классов должны быть осмысленными, а имена типов должны начинаться с префикса «F». Все переменные должны быть четырехмерными. Если вам нужно получить доступ к этой переменной извне, вам нужно объявить атрибут
3.5.3 Метод
3.5.3.1 Именование и формат
Те же имена и формат для функций и процедур.
3.5.3.2 Методы доступа к свойствам
Все методы доступа к свойствам должны отображаться как частные или защищенные. Имена методов доступа к атрибутам такие же, как у функций и процедур. Кроме того, метод чтения должен использовать префикс «Get». Метод записи должен использовать префикс «Set». Параметр метода записи должен называться «Значение», а его тип должен соответствовать записываемому свойству. Например:
TSomeClass = класс (TObject)
частный
fsomeField: целое число;
защищенный
функция GetSomeField: Integer;
процедура SetSomeField(Значение: целое число);
общественный
свойство SomeField: Целочисленное чтение GetSomeField запись SetSomeField;
конец;
3.6 Свойства
3.6.1 Именование и формат
Соответствует имени переменной класса с префиксом «F», с которой она используется.
3.7 Документация
3.7.1 Файлы проекта
3.7.1.1 Структура каталогов проекта
Домашний каталог программы — Bin (путь, по которому находится приложение)
-Db (путь к локальной базе данных)
-Doc (путь, где находится документ)
-Hlp (путь к файлу справки)
-Backup (путь резервного копирования)
-Tmp (путь к временному файлу)
3.7.1.2 Именование
Файл проекта должен иметь осмысленное имя. Например: файл проекта системной информации в Delphi называется SysInfo.dpr.
3.7.2 Файл формы
3.7.2.1 Именование
В соответствии с именем формы: Например: если имя формы — FormMain, имя файла формы будет FormMain.frm.
3.7.3 Файл модуля данных
3.7.3.1 Именование
Файлы модулей данных должны иметь осмысленные имена и иметь префикс «DM». Например: Модуль пользовательских данных называется «DMCustomers.dfm».
3.7.4 Файлы удаленного модуля данных
3.7.4.1 Именование
Файл удаленного модуля данных должен иметь осмысленное имя и использовать в качестве префикса «RDM». Например: удаленный модуль данных пользователя называется «RDMCustomers.dfm».
3.7.5 Файл модуля
3.7.5.1 Обычная единица
3.7.5.1.1 Именование файла модуля
Файлы модулей должны иметь осмысленные имена и использовать префикс «unit». Например: Общая единица называется UnitGeneral.
3.7.5.2 Единицы формы
3.7.5.2.1 Именование
Имя файла модуля формы должно соответствовать имени формы. Например: если основная форма называется FormMain.pas, то имя файла модуля формы: UnitFormMain.
3.7.5.3 Единицы модуля данных
3.7.5.3.1 Именование
Имя файла модуля модуля данных должно соответствовать имени модуля данных. Например: если основной модуль данных называется DMMain.pas, то имя файла модуля данных: UnitDMMain.
3.7.5.4 Заголовок файла
Цель, автор, дата, входные и выходные данные файла должны быть записаны в заголовке всех файлов. Например:
{
Дата модификации:
автор:
использовать:
В структуру этого модуля входят:
}
3.7.6 Формы и модули данных Формы
3.7.6.1 Класс формы
1. Формируем стандарты именования классов
Классы форм должны иметь осмысленные имена и иметь префикс «TForm». Например: Имя класса About Form:
TAboutForm = класс (TForm)
Имя основной формы
ТМаинФорм = класс (ТФорм)
2. Стандарты именования экземпляров класса Form
Имя экземпляра класса формы должно соответствовать имени класса формы с удаленной буквой «Т». Например:
Тип Имя
Имя экземпляра
О форме
О форме
ТмайнФорм
Основная форма
TCustomerEntryForm
Форма ввода клиента
3.7.6.2 Форма модулей данных
3.7.6.2.1 Стандарт именования форм модулей данных.
Классы форм модулей данных должны иметь осмысленные имена и использовать в качестве префикса «TDM». Например:
TDMCustomer = класс (TDataModule)
TDOrders = класс (TDataModule)
3.7.6.2.2. Стандарты именования экземпляров модулей данных.
Имя экземпляра класса формы модуля данных должно соответствовать имени класса формы модуля данных с опущенной буквой «T». Например:
Тип Имя
Имя экземпляра
TCustomerDataModule
Клиентдатамодуль
Модуль Данных Тордерс
Модуль данных заказов
3.8 Элементы управления
3.8.1 Именование экземпляров элемента управления
Экземпляры элемента управления должны иметь префикс имени класса элемента управления без буквы «T», например:
Имя Tedit, в котором вводится имя пользователя: EditUserName.
3.8.2 Аббревиатура управления
Для имени элемента управления можно использовать следующие сокращения, но к используемому сокращению добавляется символ «_» между именами элементов управления:
3.8.2.1 Вкладка «Стандартные»
мм TMainMenu
pm TPopupMenu
mmiTMainMenuItem
pmiTPopupMenuItem
lblTLabel
редактировать TEредактировать
мем TMemo
кнопка TButton
CB TCheckBox
РБ TRadioButton
фунт TListBox
CB TComboBox
scbTScrollBar
ГБ TGroupBox
рг ТРАдиоГрупп
pnlTPanel
cl TCommandList
3.8.2.2 Дополнительные вкладки
bbtn TBitBtn
сбТСпидбуттон
я TMaskEdit
sg TStringGrid
dgTDrawGrid
imgTImage
шп TShape
бвл
sbxTScrollBox
clb TCheckListbox
спл TSplitter
stx TStaticText
чт TChart
3.8.2.3 Вкладка Win32
tbcTTabControl
pgcTPageControl
ilTImageList
re TRichEdit
tbr TTrackBar
прб TProgressBar
и TUpDown
хк THotKey
Ани TAnimate
dtpTDateTimePicker
tvTTreeView
лв TListView
hdrTHeaderControl
stb TStatusBar
тлб TToolBar
clbTCoolBar
3.8.2.4 Вкладка «Система»
тм TTimer
pb TPaintBox
mpTMediaPlayer
Олек TOleContainer
ddccTDDEClientConv
ddciTDDEClientItem
ddscTDDEServerConv
ddsiTDDEServerItem
3.8.2.5 Вкладка «Интернет»
cskTClientSocket
ссктсерверсокет
ВБД TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
нмдт TNMDayTime
не включенный в другие категории TNMEcho
нф TNMFinger
nftpTNMFtp
нhttpTNMHttp
нмсг ТНМмсг
НмсгТНММСГСерв
ннтп ТНМННТП
npop TNMPop3
nuup TNMUUPПроцессор
smtp ТНМСМТП
нст ТНМСтрм
нстс ТНМСтрмсерв
нтм TNMTime
nudpTNMUdp
пск TPowerSock
нгс TNMGeneralServer
htmlTHtml
urlTNMUrl
smlTSimpleMail
3.8.2.6 Вкладка «Доступ к данным»
dsTDataSource
стол
qry TQuery
spTStoredProc
dbTDataBase
ссн Цессия
bmTBatchMove
usql TUpdateSQL
3.8.2.7 Вкладка «Элементы управления данными»
dbgTDBGrid
дбн TDBNavigator
dbtTDBText
dbeTDBEdit
дбм TDBMemo
dbiTDBImage
дблб TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupComboBox
dbreTDBRichEdit
dbcgTDBCtrlGrid
dbchTDDBChart
3.8.2.8 Вкладка «Куб решения»
dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionSource
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDecisionGraph
3.8.2.9 Вкладка QReport
qr TQuickReport
qrsd TQRSubDetail
qrb TQRBand
qrcb TQRCChildBand
qrg TQRGroup
qrl TQRLabel
qrtTQRText
qre TQREppr
qrs TQRSysData
qrm TQRMemo
qrrt TQRRichText
qrdr TQRDBRichText
qrsh TQRShape
qri TQRImage
qrdi TQRDBMImage
qrcr TQRCompositeReport
qrp TQRPпросмотр
qrch TQRChart
3.8.2.10 Вкладка «Диалоги»
OpenDialog TOpenDialog
SaveDialog TSaveDialog
OpenPictureDialog TOpenPictureDialog
SavePictureDialog TSavePictureDialog
FontDialog TFontDialog
ЦветДиалог TColorDialog
PrintDialog TPrintDialog
PrinterSetupDialog TPrintSetupDialog
FindDialog TFindDialog
Заменитьдиалог TReplaceDialog
3.8.2.11 Вкладка Win31
dbll TDBLookupList
dblc TDBLookupCombo
цТтабсет
старый TOutline
tnb TTabbedБлокнот
nb TNoteBook
hdrTHheader
флбтфилелистбокс
dlb TDirectoryListBox
dcb TDriveComboBox
ФКБ TFilterComboBox
3.8.2.12 Вкладка «Образцы»
gg TGauge
cg TColorGrid
спб TSpinButton
speTSpinПравить
дол TDirectoryOutline
CalTCalendar
ibea TIBEventAlerter
3.8.2.13 Вкладка ActiveX
cfx TChartFX
вспТВССпелл
f1bTF1Книга
vtc TVTCChart
группа TGraph
3.8.2.14 Вкладка Мидас
првТпровидер
cdsTClientDataSet
qcds TQueryClientDataSet
dcomTDCOMConnection
oleeTOleEnterpriseConnection
скктсокетконнектион
RMS TRemoteServer
середина TmidasConnection
4. Изменить спецификации
Положения данного правила применяются только к программам, включенным в управление конфигурацией. При этом типе модификации необходимо сохранить содержимое до изменения и идентифицировать измененное и новое содержимое. И добавьте в заголовок файла необходимую информацию, такую как модификатор, дата модификации, описание модификации и т. д.
4.1 Изменение записей истории
При внесении одобренных изменений в исходный файл модификатор должен добавить элемент истории изменений в заголовок файла программы. Для каждой последующей модификации модификатор должен заполнить в пункте следующую информацию:
Модификатор
время модификации
Причина изменения
Инструкции по модификации — как изменить
4.2 Добавьте новые строки кода
Новым строкам кода должны предшествовать и следовать строки комментариев.
// Модификатор, время модификации, описание модификации
Добавить новую строку кода
// Конец модификации
4.3 Удаление строк кода
Используйте строки комментариев до и после удаления строк кода.
//Модификатор, время модификации, описание модификации
//Строка кода, которую нужно удалить (прокомментируйте удаляемый оператор)
//Конец модификации
4.4 Изменение строк кода
Измените строку кода, удалив ее, а затем добавив новую строку кода.
//Модификатор, время модификации, описание модификации
//Строка кода перед модификацией
//Конец модификации
//Измененная строка кода
Измененная строка кода
//Конец модификации