많은 중국 사람들은 Delphi를 선호하는 개발 도구로 여깁니다. 그 이유는 물론 Delphi가 개발자에게 객체 지향 개발, 시각적 인터페이스 디자인, 풍부한 구성 요소, 다중 플랫폼 이식성(Delphi6의 새로운 기능) 등 많은 기능을 제공하기 때문입니다.
그러나 초보자에게는 객체지향적 사고가 델파이가 가져다주는 가장 큰 느낌이 아닐 수도 있습니다. 시각적 인터페이스 디자인과 풍부하고 다양한 구성 요소는 가장 깊고 잊을 수 없는 인상을 남깁니다. 이로 인한 심각한 결과는 초보자들이 오랫동안 델파이에서 제공하는 기존 VCL 컴포넌트의 사용에만 집중하고, 객체지향적 사고가 델파이 전체에 미치는 영향에 대해서는 생각하지 않는 경우가 많다는 것입니다. 컴포넌트 아키텍처에 담긴 의미 체계.
다음 코드에는 초보자가 자주 저지르는 가장 일반적인 실수 중 하나가 포함되어 있습니다. 이 실수는 문법적 오류는 아니지만 사용자의 객체 지향 사고를 강화해야 함을 나타냅니다.
var
Form1: TForm1;
구현
{$R *.dfm}
PROcedure TForm1.Button1Click(Sender: TObject);
시작하다
ShowMessage(Form1.Caption); // <-- 여기서는 Form1을 사용하는 데 몇 가지 문제가 있습니다.
끝;
이런 종류의 코드는 얼핏 보면 아무런 문제가 없어 보입니다. 그런데 여기서 Form1의 등장은 다소 무리가 있다. 분명히 여기의 코드는 TForm1의 ButtonClick 메소드를 구현하기 위해 작성되었으며, Form1은 TForm1 클래스의 인스턴스로 실제로 클래스 구현에 작성되었습니다. 이를 준수하도록 변경해야 합니까? 객체 지향적 사고에도 매우 간단하며 다음과 같은 두 가지 방법으로 작성할 수 있습니다.
1. ShowMessage(Self.Caption); // <-- 표시되는 정보는 클래스의 현재 인스턴스에 대한 캡션입니다.
2. ShowMessage(Caption); // <-- 여기서 작성 방법은 위와 동일하지만 키워드 Self가 생략되었습니다.
객체지향 사고의 세 가지 핵심 내용은 캡슐화, 상속, 다형성입니다. 위의 예에서 드러나는 문제는 캡슐화 문제입니다. 비슷한 예는 다음과 같습니다.
var
Form1: TForm1;
...
var
Form2: TForm2;
절차 TForm1.Button1Click(Sender: TObject);
시작하다
Form2.Show; // <-- 전역 변수로서 여기서 Form2를 사용하는 것도 혼란스럽습니다.
끝;
위의 예는 더 일반적일 수 있습니다. 대부분의 경우 프로젝트에서 TForm1과 TForm2는 각각 하나의 인스턴스만 가질 수 있으므로 이러한 코드는 통과 가능한 것으로 간주될 수 있습니다. 그러나 엄밀히 말하면 캡슐화 요구 사항을 충족하지 않습니다. 다음 코드를 참조하세요:
유형
TForm1 = 클래스(TForm)
버튼1: T버튼;
절차 Button1Click(Sender: TObject);
사적인
{비공개 선언}
F다음: TForm;
공공의
{공개 선언}
속성 NextForm: TForm 읽기 FNext 쓰기 FNext;
끝;
var
Form1: TForm1;
구현
Unit2를 사용합니다.
{$R *.dfm}
절차 TForm1.Button1Click(Sender: TObject);
시작하다
할당된 경우(FNext)
TForm2(FNext).Show;
끝;
끝.
//다음은 프로젝트 파일의 내용입니다.
프로그램 프로젝트1;
용도
양식,
'Unit1.pas' {Form1}의 Unit1,
'Unit2.pas' {Form2}의 Unit2;
{$R *.res}
시작하다
응용 프로그램.초기화;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Form1.NextForm := Form2; // <-- 코드가 캡슐화 요구 사항을 거의 충족하지 못하도록 하려면 이 문장을 추가하세요.
응용 프로그램.실행;
끝.
Form1의 속성으로 Form2 포인터를 Form1에 전달합니다. 이러한 방식으로 Form1은 호출 시 캡슐화 원칙을 따릅니다. 물론 이러한 코드는 캡슐화에 대한 아이디어를 반영하기 위한 것일 뿐입니다. 실제로는 개인 습관에 따라 철저하게 구현하려는지 여부를 결정할 수 있습니다. 하지만 이런 생각은 마음속에 뿌리내려야 합니다... (미완성, 계속).
더 많은 기사