1. مقدمة للمواصفات
تنص هذه المواصفات بشكل أساسي على القواعد والاحتياطات التي يجب اتباعها أثناء عملية كتابة برامج مصدر دلفي. الغرض من كتابة هذه المواصفات هو جعل عادات كتابة التعليمات البرمجية المصدر لمطوري برامج الشركة متسقة. يتيح ذلك لكل عضو في الفريق فهم كود أعضاء الفريق الآخرين، مما يسهل صيانة نظام ذاكرة التطوير الثانوي للكود المصدر.
2. مواصفات التنسيق العامة
2.1 المسافة البادئة
المسافة البادئة عبارة عن مسافتين مكشوفتين لزيادة إمكانية القراءة عندما يتغير مستوى البرنامج المصدر. قاعدة المسافة البادئة هي مسافتان لكل مستوى. علامة التبويب غير مسموح بها. لأن علامة التبويب ستنتج تأثيرات مختلفة بسبب الإعدادات المختلفة التي يقوم بها المستخدم. عند مواجهة حكم البداية أو الدخول، يتم زيادة الحلقة ومعالجة الاستثناءات مع العبارة وإعلان نوع السجل وإعلان الفئة وما إلى ذلك بمقدار مستوى واحد. عند مواجهة الحكم النهائي أو الخروج، يتم زيادة الحلقة ومعالجة الاستثناء مع العبارة وإعلان نوع السجل والفئة يتم تقليل الإعلان بمقدار مستوى واحد عند الانتظار. على سبيل المثال:
إذا تمبينت <> 100 ثم
تمبينت := 100;
2.2 البداية.. النهاية
يجب أن يشغل بيان البداية وبيان النهاية سطرًا واحدًا في البرنامج المصدر، على سبيل المثال:
لأني := من 0 إلى 10 تبدأ //استخدام غير صحيح
نهاية؛
لأني := 0 إلى 10 أفعل // الاستخدام الصحيح
يبدأ
نهاية؛
2.3 مساحات
أضف مسافات عند طرفي العوامل ورموز الحكم المنطقي، مثل: I := I + 1;، a وb، وما إلى ذلك، ولكن لا توجد مسافات مطلوبة عند إضافة الأقواس. على سبيل المثال: إذا كان ( a > b ) // استخدام خاطئ
إذا (أ > ب) ثم // الاستخدام الصحيح
مثال آخر: اختبار PROcedure(Param1: عدد صحيح; Param3: سلسلة);
3. مواصفات تنسيق كتابة بناء جملة الكائن باسكال
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: عدد صحيح; Param4: سلسلة);
3.2.2.2 التسمية
يجب أن تكون جميع المعلمات ذات معنى، وعندما يكون اسم المعلمة هو نفس اسم السمات الأخرى، أضف البادئة "A"، على سبيل المثال:
الإجراء SomeProc(AUserName: string; AUserAge: integer);
3.2.2.3 تضارب الأسماء
عندما تتضمن الوحدتان المستخدمتان وظيفة أو إجراء بنفس الاسم، فعند الإشارة إلى هذه الوظيفة أو الإجراء، سيتم تنفيذ الوظيفة أو الإجراء في الوحدة المعلن عنها لاحقًا في شرط الاستخدام. لتجنب هذا "الاعتماد على جملة الاستخدام"، تحتاج إلى كتابة المصدر الكامل للوظيفة أو الإجراء عند الرجوع إليه. على سبيل المثال:
SysUtils.FindClose(SR);
Windows.FindClose(Handle);
3.3 المتغيرات
3.3.1 التسمية والشكل المتغير
أولاً، يجب أن تحتوي جميع المتغيرات على أسماء ذات معنى حتى يتمكن أعضاء الفريق الآخرون من فهم معنى المتغيرات بسهولة. ويمكن استخدام أسماء إنجليزية مترادفة في تسمية المتغيرات، ولكن يجب أن يكون الحرف الأول من كل كلمة كبيرًا. على سبيل المثال:
فار
تنسيق الكتابة::string;
وفي الوقت نفسه، يمكن استخدام اختصارات معينة لبعض الأنواع المحددة على النحو التالي:
نوع المؤشر
ص
نوع السجل
تفصيل
نوع المصفوفة
آر
عطوف
فصل
تستخدم متغيرات التحكم في الحلقة عادةً حرفًا واحدًا مثل: i أو j أو k. يُسمح أيضًا باستخدام اسم ذي معنى مثل UserIndex.
3.3.2 المتغيرات المحلية
إن استخدام المتغيرات المحلية ضمن الإجراء يتبع قواعد التسمية لجميع المتغيرات الأخرى.
3.3.3 المتغيرات العالمية
حاول عدم استخدام المتغيرات العامة. إذا كان يجب عليك استخدام المتغيرات العامة، فيجب عليك إضافة البادئة "g"، ويجب أن ينعكس نوع المتغير في اسم المتغير. على سبيل المثال:
gprecUserCount: point;// المتغير العام المسمى UserCount، نوعه هو مؤشر إلى البنية
ولكن يمكن استخدام المتغيرات العالمية داخل الوحدات. يجب أن تكون جميع المتغيرات العامة داخل الوحدة مسبوقة بـ "F". إذا كانت هناك حاجة إلى تبادل البيانات بين عدة وحدات، فيجب تحقيق ذلك من خلال الإعلان عن السمات. على سبيل المثال:
يكتب
TFormOverdraftReturn = فئة (TForm)
خاص
{تصريحات خاصة}
اسم المصهر: سلسلة؛
عدد المصهر: عدد صحيح؛
الإجراء SetUserName(Value: string);
وظيفة GetUserName: سلسلة؛
عام
{التصريحات العامة}
خاصية اسم المستخدم: قراءة السلسلة GetUserName والكتابة SetUserName؛
خاصية UserCount: عدد صحيح يقرأ FuserCount ويكتب FuserCount؛
نهاية؛
3.4 النوع
3.4.1 بروتوكول الحالة
يجب أن تكون أسماء الكتابة للكلمات المحجوزة كلها بأحرف صغيرة. عادةً ما تكون جميع أنواع Win32 API مكتوبة بأحرف كبيرة بالنسبة للأنواع الأخرى، يتم كتابة الحرف الأول بالأحرف الكبيرة والأحرف المتبقية صغيرة على سبيل المثال:
فار
MyString: سلسلة // كلمة محجوزة
WindowHandle: HWND؛ // نوع Win32 API
I: عدد صحيح؛ // معرف النوع المقدم في وحدة النظام
3.4.2 أنواع النقاط العائمة
حاول ألا تستخدم النوع الحقيقي، فهو فقط للتوافق مع كود باسكال القديم. حاول استخدام النوع المزدوج. تم تحسين النوع المزدوج للمعالجات وناقلات البيانات وهو عبارة عن بنية بيانات قياسية محددة بواسطة IEEE. عندما تتجاوز القيمة نطاق Double، استخدم Extended. لكن Extended غير مدعوم بواسطة Java. ومع ذلك، يمكن استخدام النوع المفرد عند استخدام مكتبات الارتباط الحيوي (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)
عادةً ما يكون اسم مثيل الفئة هو اسم الفئة مطروحًا منه الحرف "T". على سبيل المثال:
فار
العميل: TCustomer؛
3.5.2 المتغيرات في الفئات
3.5.2.1 التسمية والتنسيق
يجب أن تكون أسماء الفئات ذات معنى ويجب أن تكون أسماء الأنواع مسبوقة بالحرف "F". يجب أن تكون كافة المتغيرات رباعية الأبعاد. إذا كنت بحاجة إلى الوصول إلى هذا المتغير من الخارج، فأنت بحاجة إلى الإعلان عن سمة
3.5.3 الطريقة
3.5.3.1 التسمية والشكل
نفس التسمية والشكل للوظائف والإجراءات.
3.5.3.2 طرق الوصول إلى الممتلكات
يجب أن تظهر جميع طرق الوصول إلى الملكية بشكل خاص أو محمي. إن تسمية طرق الوصول إلى السمات هي نفس أسماء الوظائف والإجراءات. بالإضافة إلى ذلك، يجب أن يستخدم أسلوب القارئ البادئة "Get". ويجب أن يستخدم أسلوب الكاتب البادئة "Set". يجب تسمية معلمة طريقة الكتابة بـ "القيمة"، ويجب أن يكون نوعها متسقًا مع الخاصية المراد كتابتها. على سبيل المثال:
تسومكلاس = فئة (TObject)
خاص
fsomeField: عدد صحيح؛
محمي
وظيفة GetSomeField: عدد صحيح؛
الإجراء SetSomeField( Value: Integer);
عام
خاصية SomeField: عدد صحيح يقرأ GetSomeField ويكتب SetSomeField؛
نهاية؛
3.6 الخصائص
3.6.1 التسمية والتنسيق
متوافق مع اسم متغير الفئة البادئ بـ "F" الذي يتم استخدامه للعمل عليه.
3.7 التوثيق
3.7.1 ملفات المشروع
3.7.1.1 هيكل دليل المشروع
الدليل الرئيسي للبرنامج--Bin (المسار الذي يوجد به التطبيق)
-Db (المسار إلى قاعدة البيانات المحلية)
-Doc (المسار حيث يوجد المستند)
-Hlp (المسار إلى ملف المساعدة)
-النسخ الاحتياطي (مسار النسخ الاحتياطي)
-Tmp (مسار الملف المؤقت)
3.7.1.2 التسمية
يجب أن يكون لملف المشروع اسم ذو معنى. على سبيل المثال: ملف المشروع الخاص بمعلومات النظام في دلفي يسمى 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جنرال".
3.7.5.2 وحدات النموذج
3.7.5.2.1 التسمية
يجب أن يكون اسم ملف وحدة النموذج متوافقًا مع اسم النموذج. على سبيل المثال: إذا كان النموذج الرئيسي يسمى FormMain.pas، فإن اسم ملف وحدة النموذج هو: UnitFormMain.
3.7.5.3 وحدات وحدة البيانات
3.7.5.3.1 التسمية
يجب أن يكون اسم ملف وحدة وحدة البيانات متوافقًا مع اسم وحدة البيانات. على سبيل المثال: إذا كانت وحدة البيانات الرئيسية تسمى DMain.pas، فإن اسم ملف وحدة وحدة البيانات هو: UnitDMMain.
3.7.5.4 رأس الملف
يجب كتابة الغرض والمؤلف والتاريخ والإدخال والإخراج للملف في رأس جميع الملفات. على سبيل المثال:
{
تاريخ التعديل:
مؤلف:
يستخدم:
يتكون هيكل هذه الوحدة من:
}
3.7.6 نماذج النماذج ووحدات البيانات
3.7.6.1 فئة النموذج
1. معايير تسمية فئة النموذج
يجب تسمية فئات النماذج بشكل ذي معنى وأن تكون مسبوقة بـ "TForm". على سبيل المثال: اسم فئة "حول النموذج" هو:
تابوتفورم = فئة (تفورم)
اسم النموذج الرئيسي هو
تماينفورم = فئة(تفورم)
2. معايير التسمية لمثيلات فئة النموذج
يجب أن يكون اسم مثيل فئة النموذج متسقًا مع اسم فئة النموذج مع إزالة الحرف "T". على سبيل المثال:
اكتب الاسم
اسم المثيل
حول النموذج
حول النموذج
TmainForm
النموذج الرئيسي
TCustomerEntryForm
نموذج إدخال العميل
3.7.6.2 نموذج وحدات البيانات
3.7.6.2.1 معيار تسمية نموذج وحدة البيانات
يجب تسمية فئات نماذج وحدات البيانات بشكل مفيد واستخدام "TDM" كبادئة. على سبيل المثال:
TDMCustomer = فئة (TDataModule)
TDOrders = فئة (TDataModule)
3.7.6.2.2 معايير تسمية مثيل وحدة البيانات
يجب أن يكون اسم مثيل فئة نموذج وحدة البيانات متسقًا مع اسم فئة نموذج وحدة البيانات مع حذف الحرف "T". على سبيل المثال:
اكتب الاسم
اسم المثيل
TCustomerDataModule
CustomerDataModule
TordersDataModule
OrdersDataModule
3.8 الضوابط
3.8.1 تسمية حالات التحكم
يجب أن تكون مثيلات عنصر التحكم مسبوقة باسم فئة التحكم مطروحًا منها الحرف "T"، على سبيل المثال:
اسم Tedit حيث يتم إدخال اسم المستخدم هو: EditUserName.
3.8.2 اختصار السيطرة
يمكن استخدام الاختصارات التالية لاسم عنصر التحكم، ولكن تتم إضافة الاختصار المستخدم مع "_" بين أسماء عناصر التحكم:
3.8.2.1 علامة التبويب القياسية
مم القائمة الرئيسية
مساءً TPopupMenu
mmiTMMainMenuItem
pmiTPopupMenuItem
lblTLabel
تحرير تيديت
مذكرة TMemo
btn TButton
سي بي TCheckBox
زر الراديو rb
رطل TlistBox
سي بي TComboBox
scbTScrollBar
gb TGroupBox
آر جي TRAdioGroup
pnlTPanel
cl TCommandList
3.8.2.2 علامات التبويب الإضافية
ببتن تبيتبتن
sbTSpeedButton
لي TMaskEdit
سان جرمان TStringGrid
dgTDrawGrid
imgTIImage
shp Tالشكل
bvl
sbxTScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cht TChart
3.8.2.3 علامة التبويب Win32
tbcTTabControl
pgcTPageControl
ilTIImageList
إعادة TRichEdit
tbr TTrackBar
prb TProgressBar
أود توب داون
هونج كونج THotKey
العاني TAnimate
dtpTDateTimePicker
tvTreeView
المستوى TListView
hdrTHeaderControl
stb TStatusBar
tlb TToolBar
com.clbTColBar
3.8.2.4 علامة تبويب النظام
TM TTimer
بي بي تيبينت بوكس
mpTMediaPlayer
olec TOleContainer
ddccTDDEClientConv
ddciTDDEClientItem
ddscTDDEServerConv
ddsiTDDEServerItem
3.8.2.5 علامة تبويب الإنترنت
cskTClientSocket
sskTServerSocket
wbd TWebDispatcher
ص TPageProducer
tQueryTableProducer
dstp TDataSetTableProducer
نمدت TNMDayTime
غير المصنّفة في موضع آخر TNMEcho
NF TNMFinger
nftpTNMFtp
nhttpTNMHttp
nMsg TNMMsg
nmsgTNMMSGServ
nntp TNMNNTP
نبوب TNMPop3
nuup TNMUUPProcessor
SMTP TNMSMTP
نست TNMStrm
nsts TNMStrmServ
إن تي إم TNMTime
nudpTNMUdp
psk TPowerSock
ngs TNMgeneralServer
htmlTHtml
urlTNMUrl
com.smlTSimpleMail
3.8.2.6 علامة تبويب الوصول إلى البيانات
dsTDataSource
جدول Tbl
كيو آري TQuery
spTStoredProc
dbTDataBase
جلسة شبكات الأمان الاجتماعي
bmTBatchMove
usql TUPdateSQL
3.8.2.7 علامة التبويب ضوابط البيانات
dbgTDBGrid
dbn TDBNavigator
dbtTDBText
dbeTDBEdit
dbm TDMemo
dbiTDBImage
dblb TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupComboBox
dbreTDBRichEdit
dbcgTDBCtrlGrid
dbchTDDBChart
3.8.2.8 علامة تبويب مكعب القرار
dcb TDecisionCube
dcq TDecisionQuery
العاصمة TDecisionSource
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDecisionGraph
3.8.2.9 علامة تبويب التقرير
ريال قطري TQuickReport
QRSD TQRSubDetail
qrb TQRBand
qrcb TQRChildBand
qrg TQRGroup
qrl TQRLabel
qrtTQRText
ريال قطري TQRExpr
QRS TQRSysData
كيو آر إم TQRMemo
qrt TQRRichText
qrdr TQRDBrichText
قرش TQRShape
qri TQRIImage
qrdi TQRDBMImage
تقرير qrcr TQRCompositeReport
مراجعة Qrp TQRP
Qrch TQRChart
3.8.2.10 علامة التبويب الحوارات
فتح الحوار إلى فتح الحوار
SaveDialog TSaveDialog
فتح حوار الصورة في فتح حوار الصورة
SavePictureDialog TSavePictureDialog
FontDialog TFontDialog
ColorDialog TColorDialog
PrintDialog TprintDialog
PrinterSetupDialog TPrintSetupDialog
FindDialog TFindDialog
ReplaceDialog TReplaceDialog
3.8.2.11 علامة التبويب Win31
dbll TDBLookupList
dblc TDBLookupCombo
tsTTabSet
رأ Tالمخطط التفصيلي
tnb TTabbedNoteBook
ملحوظة: TNoteBook
hdrTHader
flbTFileListBox
dlb TDirectoryListBox
دي سي بي TDriveComboBox
fcb TFilterComboBox
3.8.2.12 علامة تبويب العينات
زغ تغيج
CG TColorGrid
spb TSpinButton
speTSpinEdit
دول TDirectoryOutline
calTCalendar
ibea TIBEventAlerter
3.8.2.13 علامة تبويب ActiveX
cfx TChartFX
vspTVSSpell
f1bTF1Book
vtc TVTChart
grp TGraph
3.8.2.14 علامة التبويب ميداس
prvTProvider
cdsTClientDataSet
qcds TQueryClientDataSet
dcomTDCOMConnection
oleeTOleEnterpriseConnection
sckTSocketConnection
آر إم إس TRemoteServer
اتصال منتصف تميداس
4. تعديل المواصفات
تنطبق أحكام هذه القاعدة فقط على البرامج التي تم تضمينها في إدارة التكوين. في هذا النوع من التعديل يشترط الاحتفاظ بالمحتوى قبل التعديل وتحديد المحتوى المعدل والجديد. وإضافة المعلومات الضرورية مثل المعدل وتاريخ التعديل ووصف التعديل وما إلى ذلك إلى رأس الملف.
4.1 تعديل سجلات التاريخ
عند إجراء تعديلات معتمدة على ملف مصدر، يجب على المُعدِّل إضافة عنصر محفوظات التعديل إلى رأس ملف البرنامج. لكل تعديل لاحق، يجب على المعدل ملء المعلومات التالية في العنصر:
المعدل
وقت التعديل
سبب التعديل
تعليمات التعديل هي كيفية التعديل
4.2 إضافة أسطر جديدة من التعليمات البرمجية
يجب أن تكون الأسطر الجديدة من التعليمات البرمجية مسبوقة ومتبوعة بأسطر التعليق.
// المعدل، وقت التعديل، وصف التعديل
إضافة سطر جديد من التعليمات البرمجية
// نهاية التعديل
4.3 حذف أسطر التعليمات البرمجية
استخدم أسطر التعليق قبل وبعد حذف أسطر التعليمات البرمجية.
// المعدل، وقت التعديل، وصف التعديل
// سطر الكود المراد حذفه (علق على العبارة المراد حذفها)
// نهاية التعديل
4.4 تعديل أسطر التعليمات البرمجية
قم بتعديل سطر التعليمات البرمجية عن طريق حذف سطر التعليمات البرمجية ثم إضافة سطر تعليمات برمجية جديد.
// المعدل، وقت التعديل، وصف التعديل
// سطر من التعليمات البرمجية قبل التعديل
// نهاية التعديل
// سطر من التعليمات البرمجية المعدلة
سطر من التعليمات البرمجية المعدلة
// نهاية التعديل