中国の多くの人は、Delphi を好みの開発ツールだと考えています。その理由はもちろん、Delphi が開発者にオブジェクト指向開発、ビジュアル インターフェイス設計、豊富なコンポーネント、マルチプラットフォーム移植性 (Delphi6 の新機能) などの多くの機能を提供するためです。
しかし、初心者にとって、オブジェクト指向の考え方は、Delphi がもたらす最大の感覚ではないかもしれません。ビジュアルインターフェイスのデザインと豊富で多様な利用可能なコンポーネントは、最も深く忘れられない印象を残します。このことの重大な結果は、初心者が長い間、Delphi が提供する既存の VCL コンポーネントの使用のみに注目し、Delphi 全体に対するオブジェクト指向の考え方の影響について考えることを無視することが多いということです。コンポーネント アーキテクチャに含まれる意味システム。
次のコードには、初心者がよく犯す最も一般的な間違いの 1 つが含まれていますが、この間違いは文法上の間違いではありませんが、ユーザーのオブジェクト指向の考え方を強化する必要があることがわかります。
変数
フォーム1: TForm1;
実装
{$R *.dfm}
手順 TForm1.Button1Click(送信者: TObject);
始める
ShowMessage(Form1.Caption); // <-- ここでの Form1 の使用にはいくつかの問題があります。
終わり;
この種のコードは一見すると何も問題がないように見えます。しかし、ここでのForm1の登場には少々無理がある。明らかに、ここでのコードは TForm1 の ButtonClick メソッドを実装するために書かれており、Form1 は実際には TForm1 クラスの実装に書き込まれていますが、これに準拠するために変更する必要があるのではないでしょうか。これも非常にシンプルで、次の 2 つの方法で記述できます。
1. ShowMessage(Self.Caption); // <-- この書き方は非常に明確です。表示される情報はクラスの現在のインスタンスのキャプションです。
2. ShowMessage(Caption); // <-- 記述方法は上記と同じですが、キーワード Self が省略されています。
オブジェクト指向思考の 3 つの中心的な内容は、カプセル化、継承、ポリモーフィズムです。上記の例で明らかになった問題は、カプセル化の問題です。同様の例としては次のようなものがあります。
変数
フォーム1: TForm1;
...
変数
フォーム 2: TForm2;
プロシージャ TForm1.Button1Click(送信者: TObject);
始める
Form2.Show; // <-- グローバル変数として、ここでの Form2 の使用も混乱を招きます。
終わり;
上記の例はより一般的であり、プロジェクトでは TForm1 と TForm2 はそれぞれ 1 つのインスタンスしか持たないため、このようなコードは問題ないと考えられます。ただし、厳密な意味では、カプセル化の要件を満たしていません。次のコードを参照してください。
タイプ
TForm1 = クラス(TForm)
ボタン 1: T ボタン;
プロシージャ Button1Click(送信者: TObject);
プライベート
{プライベート宣言}
F次: Tフォーム;
公共
{公的宣言}
プロパティ NextForm: TForm 読み取り FNext 書き込み FNext;
終わり;
変数
フォーム1: TForm1;
実装
Unit2 を使用します。
{$R *.dfm}
プロシージャ TForm1.Button1Click(送信者: 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; <-- コードがカプセル化の要件をかろうじて満たすようにするには、この文を追加します。
アプリケーション.実行;
終わり。
Form2 ポインタを Form1 の属性として Form1 に渡します。このようにして、Form1 は呼び出し時にカプセル化の原則に従います。もちろん、これらのコードはカプセル化の考え方を反映しているだけです。実際には、個人の習慣に従って本当にカプセル化を実装するかどうかを決定できます。しかし、このような考えは心の中に根付くはずです...(未完、続く)。
その他の記事