1. 사양 소개
본 사양서는 주로 델파이 소스 프로그램을 작성하는 과정에서 따라야 할 규칙과 주의사항을 규정하고 있습니다. 이 사양을 작성하는 목적은 회사 소프트웨어 개발자의 소스 코드 작성 습관을 일관되게 만드는 것입니다. 이를 통해 각 팀 구성원은 다른 팀 구성원의 코드를 이해할 수 있으며, 이는 소스 코드의 보조 개발 메모리 시스템의 유지 관리를 용이하게 합니다.
2. 일반 형식 사양
2.1 들여쓰기
들여쓰기는 소스 프로그램 레벨이 변경될 때 가독성을 높이기 위해 노출되는 두 개의 공백입니다. 들여쓰기 규칙은 레벨당 공백 두 개입니다. 탭은 허용되지 않습니다. Tab은 사용자가 설정한 다른 설정으로 인해 다른 효과를 생성하기 때문입니다. 시작 또는 진입 판단, 루프, 예외 처리, with 문, 레코드 유형 선언, 클래스 선언 등이 발생하면 종료 또는 종료 판단, 루프, 예외 처리, with 문, 레코드 유형 선언, 클래스가 한 단계 증가됩니다. 선언은 대기 시 한 단계 감소됩니다. 예를 들어:
TmpInt <> 100이면
TmpInt := 100;
2.2 시작..끝
Begin 문과 end 문은 소스 프로그램에서 한 줄을 차지해야 합니다. 예를 들면 다음과 같습니다.
for I := 0 to 10 do start //잘못된 사용법
끝;
for I := 0 to 10 do //올바른 사용법
시작하다
끝;
2.3칸
I := I + 1;, a 및 b 등과 같이 연산자와 논리적 판단 기호의 양쪽 끝에 공백을 추가합니다. 단, 괄호 추가 시에는 공백이 필요하지 않습니다. 예: if ( a > b ) then //잘못된 사용법
If (a > b) then //올바른 사용법
또 다른 예: PROcedure Test(Param1: 정수; Param3: 문자열);
3. 오브젝트 파스칼 구문 작성 형식 사양
3.1 예약어
오브젝트 파스칼 언어의 예약어나 키워드는 모두 소문자로 작성해야 합니다.
3.2 절차 및 기능
3.2.1 이름 지정 및 형식
프로시저 및 함수 이름은 모두 의미 있는 단어로 구성되어야 하며, 모든 단어의 첫 글자는 대문자로 표기해야 합니다. 예를 들어:
프로시저 형식하드디스크;//잘못된 이름 지정
절차 FormatHardDisk;//올바른 이름 지정
변수의 내용을 설정하는 프로시저와 함수에는 Set이라는 접두사가 붙어야 합니다. 예를 들면 다음과 같습니다.
절차 SetUserName;
변수의 내용을 읽는 프로시저와 함수는 Get을 접두사로 사용해야 합니다. 예를 들면 다음과 같습니다.
함수 GetUserName: 문자열;
3.2.2 프로시저와 함수의 매개변수
3.2.2.1 명명
동일한 유형의 매개변수는 동일한 문장으로 작성됩니다.
Procedure Foo(Param1, Param2, Param3: 정수; Param4: 문자열);
3.2.2.2 명명
모든 매개변수는 의미가 있어야 하며 매개변수 이름이 다른 속성의 이름과 동일한 경우 접두사 'A'를 추가합니다. 예:
절차 SomeProc(AUserName: 문자열; AUserAge: 정수);
3.2.2.3 이름 충돌
사용된 두 유닛에 동일한 이름의 함수나 프로시저가 포함된 경우, 이 함수나 프로시저를 참조하면 나중에 use 절에서 선언된 유닛의 함수나 프로시저가 실행됩니다. 이러한 'uses-clause-dependent'를 방지하려면 참조할 때 함수나 프로시저의 전체 소스를 작성해야 합니다. 예를 들어:
SysUtils.FindClose(SR);
Windows.FindClose(핸들);
3.3 변수
3.3.1 변수 이름 지정 및 형식
첫째, 모든 변수는 다른 팀원들이 변수의 의미를 쉽게 이해할 수 있도록 의미 있는 이름을 가져야 합니다. 변수 명명에는 동의어인 영어 이름을 사용할 수 있지만, 각 단어의 첫 글자는 대문자여야 합니다. 예를 들어:
var
쓰기형식::문자열;
동시에 특정 약어는 다음과 같이 일부 특정 유형에 사용될 수 있습니다.
포인터 유형
피
레코드 유형
녹음
배열 유형
도착
친절한
수업
루프 제어 변수는 일반적으로 i, j 또는 k와 같은 단일 문자를 사용합니다. UserIndex와 같이 의미 있는 이름을 사용하는 것도 허용됩니다.
3.3.2 지역변수
프로시저 내에서 지역 변수를 사용하는 경우 다른 모든 변수에 대한 명명 규칙을 따릅니다.
3.3.3 전역변수
전역 변수를 사용하지 않도록 주의하세요. 전역 변수를 사용해야 하는 경우 접두사 'g'를 추가해야 하며 변수 유형이 변수 이름에 반영되어야 합니다. 예를 들어:
gprecUserCount: point;//UserCount라는 전역 변수, 해당 유형은 구조에 대한 포인터입니다.
그러나 전역 변수는 모듈 내에서 사용할 수 있습니다. 모듈 내의 모든 전역 변수에는 'F'라는 접두사가 붙어야 합니다. 여러 모듈 간에 데이터를 교환해야 하는 경우 속성을 선언하여 이를 달성해야 합니다. 예를 들어:
유형
TFormOverdraftReturn = 클래스(TForm)
사적인
{비공개 선언}
퓨저이름: 문자열;
퓨저카운트: 정수;
절차 SetUserName(값: 문자열);
함수 GetUserName: 문자열;
공공의
{공개 선언}
속성 UserName: 문자열 읽기 GetUserName 쓰기 SetUserName;
속성 UserCount: 정수 읽기 FuserCount 쓰기 FuserCount;
끝;
3.4 유형
3.4.1 사례 프로토콜
예약어의 유형 이름은 모두 소문자여야 합니다. Win32 API 유형은 일반적으로 모두 대문자로 표시됩니다. 다른 유형의 경우 첫 번째 문자는 대문자로 표시되고 나머지 문자는 소문자로 표시됩니다.
var
MyString: 문자열; // 예약된 단어
WindowHandle: HWND; // Win32 API 유형
I: 정수; // 시스템 유닛에 도입된 유형 식별자
3.4.2 부동 소수점 유형
Real 유형을 사용하지 마십시오. 이는 이전 Pascal 코드와의 호환성을 위한 것입니다. Double 유형은 프로세서 및 데이터 버스에 최적화되어 있으며 IEEE에서 정의한 표준 데이터 구조입니다. 값이 Double의 범위를 초과하는 경우 확장을 사용하십시오. 그러나 확장은 Java에서 지원되지 않습니다. 그러나 다른 언어로 작성된 DLL을 사용할 때는 Single 유형을 사용할 수 있습니다.
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'를 뺀 것입니다. 예를 들어:
var
고객: T고객;
3.5.2 클래스의 변수
3.5.2.1 이름 지정 및 형식
클래스 이름은 의미가 있어야 하며 유형 이름 앞에는 'F'가 붙어야 합니다. 모든 변수는 4차원이어야 합니다. 외부에서 이 변수에 액세스해야 하는 경우 속성을 선언해야 합니다.
3.5.3 방법
3.5.3.1 이름 지정 및 형식
함수와 프로시저의 이름과 형식이 동일합니다.
3.5.3.2 속성 액세스 방법
모든 속성 액세스 방법은 private 또는 protected로 표시되어야 합니다. 속성 접근 방식의 명명은 함수 및 프로시저의 명명과 동일합니다. 또한, 판독기 방식은 접두사 'Get'을 사용해야 합니다. 쓰기 메소드의 매개변수 이름은 'Value'로 지정되어야 하며 해당 유형은 작성하려는 속성과 일치해야 합니다. 예를 들어:
TSomeClass = 클래스(TObject)
사적인
fsomeField: 정수;
보호됨
함수 GetSomeField: 정수;
절차 SetSomeField(값: 정수);
공공의
속성 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 명명
프로젝트 파일에는 의미 있는 이름이 있어야 합니다. 예: 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. 클래스 명명 표준을 형성합니다.
Forms 클래스의 이름은 의미 있게 지정되어야 하며 접두사 'TForm'이 붙어야 합니다. 예: About Form 클래스의 이름은 다음과 같습니다.
TAboutForm = 클래스(TForm)
기본 양식의 이름은 다음과 같습니다.
TMainForm = 클래스(TForm)
2. Form 클래스 인스턴스의 명명 표준
Form 클래스 인스턴스의 이름은 'T'가 제거된 Form 클래스의 이름과 일치해야 합니다. 예를 들어:
유형 이름
인스턴스 이름
정보양식
정보양식
TmainForm
메인폼
TCustomerEntryForm
고객 입력 양식
3.7.6.2 데이터 모듈 양식
3.7.6.2.1. 데이터 모듈 형식 명명 표준
데이터 모듈 양식 클래스는 의미 있게 이름을 지정해야 하며 'TDM'을 접두사로 사용해야 합니다. 예를 들어:
TDMCustomer = 클래스(TDataModule)
TDMOrders = 클래스(TDataModule)
3.7.6.2.2. 데이터 모듈 인스턴스 명명 표준
데이터 모듈 양식 클래스 인스턴스의 이름은 'T'가 생략된 데이터 모듈 양식 클래스의 이름과 일치해야 합니다. 예를 들어:
유형 이름
인스턴스 이름
TCustomerData모듈
고객 데이터 모듈
TordersData모듈
주문데이터모듈
3.8 제어
3.8.1 제어 인스턴스의 이름 지정
컨트롤의 인스턴스에는 컨트롤 클래스 이름에서 'T'를 뺀 이름을 붙여야 합니다. 예를 들면 다음과 같습니다.
사용자 이름이 입력된 Tedit의 이름은 EditUserName입니다.
3.8.2 제어의 약어
컨트롤 이름에는 다음과 같은 약어를 사용할 수 있으나, 사용되는 약어는 컨트롤 이름 사이에 '_'를 추가하여 사용한다.
3.8.2.1 표준 탭
mm TMain메뉴
오후 T팝업메뉴
mmiTMain메뉴항목
pmiTPopupMenuItem
lblTLabel
edt T편집
mem TMemo
btn T버튼
cb TCheckBox
rb TRadio버튼
lb TListBox
cb TComboBox
scbTScrollBar
gb TGroupBox
rg TRadioGroup
pnlTPanel
cl TCommandList
3.8.2.2 추가 탭
bbtn TBitBtn
sbTSpeed버튼
나 TMask편집
sg TStringGrid
dgTDrawGrid
imgT이미지
shp TShape
bvl
sbxTScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cht TChart
3.8.2.3 Win32 탭
tbcTTab컨트롤
pgcTPageControl
ilTImageList
다시 TRich편집
tbr TTrackBar
prb TProgressBar
ud TUpDown
홍콩 THotKey
애니 TAnimate
dtpTDateTimePicker
tvTTreeView
lv TListView
hdrTHeaderControl
stb TStatusBar
tlb TToolBar
clbTCoolBar
3.8.2.4 시스템 탭
tm TTimer
pb TPaintBox
mpTMediaPlayer
올렉 TOleContainer
ddccTDDEClientConv
ddciTDDE클라이언트항목
ddscTDDEServerConv
ddsiTDDE서버항목
3.8.2.5 인터넷 탭
cskTClientSocket
sskTServerSocket
wbd TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDayTime
NEC TNMEcho
nf TNM핑거
nftpTNMFtp
nhttpTNMHttp
nMsg TNMMsg
nmsgTNMMSGServ
nntp TNMNNTP
엔팝TNMPop3
nuup TNMUUP프로세서
smtp TNMSMTP
nst TNStrm
nsts TNStrmServ
ntm TNM시간
누드pTNMUdp
psk TPowerSock
ngs TNM일반서버
htmlTHtml
urlTNMUrl
smlTSimpleMail
3.8.2.6 데이터 액세스 탭
dsTDataSource
tbl T테이블
qry TQuery
spTStoredProc
dbTDataBase
ssn 세션
bmTBatchMove
usql TUpdateSQL
3.8.2.7 데이터 컨트롤 탭
dbgTDBGrid
DBN TDB네비게이터
dbtTDB텍스트
dbeTDB편집
DBM TDB메모
dbiTDB이미지
dblb TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupComboBox
dbreTDBR리치편집
dbcgTDBCtrl그리드
dbchTDDB차트
3.8.2.8 결정 큐브 탭
dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionSource
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDecisionGraph
3.8.2.9 QReport 탭
qr T빠른 보고서
qrsd TQR하위 세부정보
qrb TQRBand
qrcb TQRChildBand
qrg TQR그룹
qrl TQR레이블
qrtTQR텍스트
qre TQRExpr
qrs TQRSysData
qrm TQRM메모
qrrt TQRRichText
qrdr TQRDBR리치텍스트
qrsh TQR모양
qri TQR이미지
qrdi TQRDBM이미지
qrcr TQRCompositeReport
qrp TQRP리뷰
qrch TQRChart
3.8.2.10 대화 상자 탭
OpenDialog TOpenDialog
저장대화상자 T저장대화상자
OpenPictureDialog TOpenPictureDialog
SavePictureDialog TSavePictureDialog
글꼴대화상자 TFontDialog
ColorDialog TColorDialog
인쇄대화상자 TPrintDialog
PrinterSetupDialog TPrintSetupDialog
찾기대화상자 TFindDialog
바꾸기대화상자 TReplaceDialog
3.8.2.11 Win31 탭
dbll TDBLookupList
dblc TDBLookupCombo
tsTTabSet
ol T개요
tnb TTabbedNoteBook
nb T노트북
hdrT헤더
flbTFileListBox
dlb TDirectoryListBox
DCB TDriveComboBox
fcb TFilterComboBox
3.8.2.12 샘플 탭
gg T게이지
cg TColorGrid
spb TSpin버튼
speTSpin편집
dol TDirectory개요
calT캘린더
ibea TIBEventAlerter
3.8.2.13 ActiveX 탭
cfx TChartFX
vspTVS주문
f1bTF1Book
vtc TVTChart
grp T그래프
3.8.2.14 마이다스 탭
prvT공급자
cdsTClientDataSet
qcds TQueryClientDataSet
dcomTDCOM연결
oleeTOleEnterpriseConnection
sckTSocket연결
rms TRemoteServer
mid TmidasConnection
4. 사양 수정
이 규칙의 조항은 구성 관리에 포함된 프로그램에만 적용됩니다. 이러한 유형의 수정에서는 수정 전의 콘텐츠를 유지하고 수정된 콘텐츠와 새로운 콘텐츠를 식별해야 합니다. 그리고 파일 헤더에 수정자, 수정 날짜, 수정 설명 등 필요한 정보를 추가합니다.
4.1 이력 기록 수정
소스 파일에 대해 승인된 수정을 수행할 때 수정자는 프로그램 파일 헤더에 수정 내역 항목을 추가해야 합니다. 이후의 각 수정에 대해 수정자는 항목에 다음 정보를 입력해야 합니다.
수정자
수정 시간
수정 이유
수정 지침은 수정 방법입니다.
4.2 새로운 코드 줄 추가
새로운 코드 라인은 앞에 주석 라인이 와야 합니다.
// 수정자, 수정 시간, 수정 설명
새로운 코드 줄 추가
// 수정 끝
4.3 코드 줄 삭제
코드 줄을 삭제하기 전과 후에 주석 줄을 사용하세요.
//수정자, 수정시간, 수정설명
//삭제할 코드 라인(삭제할 구문을 주석 처리)
//수정 끝
4.4 코드 줄 수정
코드 줄을 삭제한 다음 새 코드 줄을 추가하여 코드 줄을 수정합니다.
//수정자, 수정시간, 수정설명
//수정 전 코드 줄
//수정 끝
//수정된 코드 줄
수정된 코드 줄
//수정 끝