まえがき: 現在、私は熟練した Delphi プログラマー向けに、Delphi のオブジェクト指向プログラミング技術を使用して適切に設計されたプログラムを構築するというテーマの本を執筆しています。
この本はまだ執筆途中ですが、皆さんがこの本のテーマと言語スタイルを予備的に理解できることを願っています。同時に、自分の意見を主張することもできます。著者としては、この本が国内オリジナルのDelphi本の古典になることを願っています。成功しないかもしれませんが、最善を尽くします。
上記の理由により、本全体を投稿することは不可能です(笑、それでは誰も購入しません)ので、以降の章はここに投稿しないはずです(いくつかの抜粋はあるかもしれません)。
ここで、私を励まし、意見をくれた友人たちに感謝したいと思います(csdn の Delphi フォーラムに投稿したところ、幅広い反響をいただきました。皆さん、ありがとうございました)。いつも私をサポートし、インスピレーションを与えてくれたガールフレンドのエサンにも感謝したいと思います。私にできることは、良い本を書いて皆さんに恩返しすることだけです。皆さん(私も含めて)良い本を待ち望んでいることはわかっています。
第 1 章 Delphi を再理解する
シンプルさは世界で最も獲得するのが難しいものです。それは経験の究極の限界であり、天才の究極の目標です。 ——George Sand あなたはすでに熟練した Delphi プログラマーであり、Delphi を使用して美しく実用的なプログラムをすぐに書くことができます。Delphi はあなたの仕事と勉強に欠かせない存在になっています。これらが真実であると仮定すると、最初の開発ツールとして Delphi を選択する独自の理由や理由があるはずです。少なくとも、私は上記の前提をすべて満たしています。今回は、私がDelphiを選んだ理由と理由、そしてDelphiについての理解についてお話したいと思います。あなたは私をデルフィを支持する熱狂的な信者とみなしていただいても構いませんが、それは私をあまりにも表面的に見ているように感じますが、私はそれを認めませんが、気にしません。なぜなら、私は彼女を本当に愛しているからです。私が初めて触れたDelphiのバージョンは3.0で、当時はVisual Basicと同じようにRADツールとして使っていました。しかし、時間が経つにつれて、Delphi 3、Delphi 4、Delphi 5、Delphi 6、Kylix は、Delphi に対する理解をさらに深めています。単なる道具でありながら、理解すればするほど彼女に夢中になり、離れられなくなる、そんな含蓄のあるツールです。 Pascal はプログラムの美しさに注意を払う言語です。Pascal コードが最も美しいコードであることに疑いの余地はありません。Object Pascal (オブジェクト指向をサポートする Pascal 言語) をベースにした Delphi は、この美しさを極限まで高めています。ここで、Delphi を開き、[ヘルプ] - [バージョン情報] メニューを選択し、[バージョン情報] ウィンドウが表示されたら、Alt キーを押しながら「team」と連続して入力します。何が表示されますか?はい、Delphi 開発者のリストです。芸術作品のような開発ツールを作成してくれた彼らに感謝しましょう。
1.1 開発ツールの「人間指向」理論
さまざまなプログラミング フォーラムで次のような質問をよく見かけます。「VB にはまだ将来があるのですか?」「Delphi は廃止される予定ですか?」「MFC は .NET に置き換えられる予定ですか?」これらの質問が提起されたとき、誰も答えることができませんでした。なぜなら、テクノロジーや製品の将来はテクノロジーそのものによって完全に決まるわけではなく、市場の需要や製造会社の開発の方向性などの要素にも関係しているからです。そして、私たちが懸念すべきことは、これらの質問に対する答えなのでしょうか?そうではないと思います。世界のあらゆるものはアトムで構成されており、絶えず変化するプログラムは最終的にはシーケンス、ループ、ブランチの 3 つの構造で構成されていることがわかっています。VC の MFC と Delphi の VCL は (オブジェクトの程度に関係なく) オブジェクト指向テクノロジで構築されています。志向)。物事の表面的な外観を超えて見ると、そこに見えるものは同じ、または類似した本質です。本質をマスターすると、外見の現れがとても自然であることがわかるでしょう。想像してみてください。Hou Jie (「MFC 入門」の著者) のように MFC を完全に剥がすことができたとしても、MFC が特定のフレームワークに置き換えられることを心配するでしょうか?この観点から見ると、プロのプログラマーにとって、プログラミングの概念は変わりません。問題の発見、分析、解決のプロセスには特定のパターンがあり、このパターンをマスターすると、さまざまなプログラミング言語やさまざまな開発環境に共通点が生まれます。 C++ はプロのプログラマーが必ずマスターしなければならないものだと思います。もちろん、これは単に構文を学ぶという意味ではなく (一部の構文の学習を無視しても構いません)、C++ を通じてオブジェクト指向の設計とプログラミングの方法を学ぶことを意味します。 C++ は幅広く奥が深いため、C++ は全能であるためです。 C++ では、オブジェクト指向の理論をすべて学ぶことができます。学んだ後は、C++ によって変わります。オブジェクト指向理論に存在する物議を醸す機能 (多重継承など) が C++ でサポートされているためです。それをマスターした後にのみ、自分自身の選択(賛成または反対)を行うことができます。 C++、Object Pascal、Java、さらには C# のいずれであっても、オブジェクト指向の理論を習得すると、それらの類似点を感じるでしょう。ということは、開発ツール (統合開発環境と呼ぶべきかもしれませんが、以下では私の習慣に従って開発ツールと呼びます) には、サポートする言語以外の違いはないということですか?もちろん違います。開発ツールはアイデアの実現を支援するツールであり、基本的なアイデアに基づいて構築される上部構造です。開発ツールが実装したい概念をどの程度サポートしているか、また実装プロセスがどの程度簡素化されているかが、開発ツールの考慮事項となります。プログラマーにとっての開発ツールは兵士にとっての武器のようなもので、武器が手元になければ、半分は戦いの前に倒されてしまいます。私は、Nokia 携帯電話の広告スローガンがずっと好きでした。「テクノロジーは人間本位です!」はい、基本は「人」であり、ツールの使命は人々がより早く、より簡単に目標を達成できるように支援することです。したがって、開発ツールも人間中心である必要があります。プログラマーとして、そして開発ツールの最も直接的なユーザーとして、私が使用する開発ツールが真に自由感をもたらし、コードの世界を自由にナビゲートできるようにしてくれることを願っています。私に足かせを付けるのではなく、私に適応してください!現在、Windows プラットフォームには、Visual C++、Visual Basic、Delphi、C++ Builder、JBuilder など、さまざまな開発ツールから選択できます。これらはさまざまなプログラミング言語に基づいており、さまざまな企業の製品コンセプトに忠実です。この観点から見ると、両者の違いは非常に大きいです。では、優れた、思いやりのある、人間志向の開発ツールとはどのようなものでしょうか?私の基準は以下の4点を満たすことです。 1. 解決すべき問題を単純化し、あるコンセプトで素早く実行できる 2. 知りたい内容は隠さない 3. 知りたくない内容は無視できる4. 率先して取り組む 上記 4 点を満たす、さまざまなレベルのプログラマーに適した開発ツールはありますか?私の答えは「はい!」です。それがデルフィです!彼女はすべてを単純化しましたが、私が真実を求めることを決して止めませんでした。彼女が構築した簡素化された VCL 仮想世界でタスクを完了できます。また、VCL の世界を深く掘り下げて、現実世界 (つまり、Windows プラットフォームの実際のインターフェイス) とのマッピング関係を調査し、そのフレームワークの設計を学ぶこともできます。ニーズに合わせて仮想 VCL 世界を拡張することもできます。このような開発ツールが存在することを幸運に思います。そして、彼女を選んで一緒に仕事を完了できることはさらに幸運です。 (実際には、プロジェクトで使用されるプログラミング言語と開発ツールは、多くの場合、個人の制御を超えており、多くの要因によって制限されます。たとえば、顧客のハードウェア環境、オペレーティング システム環境、開発環境、開発ツールのコストとライセンスなど)したがって、開発作業にお気に入りの開発ツールを選択できるのは非常に幸運です。) C++ を通じてオブジェクト指向の概念を学び、Delphi を使用して現実世界の問題を解決することが私のアプローチです。同時に、「難しいところから学び、簡単なところから応用する」という格言も実証されています。本物のプログラマーは C++ を使用し、賢いプログラマーは Delphi を使用します。そうですね、本当に賢いプログラマは C++ を使って Delphi を理解します。
1.2 Delphi のさらなる利点
私は多くの主流の開発ツールを使用してきましたが、なぜ Delphi を選んだのでしょうか?私が他の開発ツールについて詳しくないからかもしれませんが、Delphi 自体の優秀さが少なくとも理由の 1 つです。デルフィの何がそんなに素晴らしいのでしょうか? n Delphi の効率的な開発は、ビジュアルな開発環境を備えた RAD (Rapid application Development tools) です。 もちろん、同様の機能を備えた開発ツール (Visual Basic など) は数多くありますが、Delphi には次のような独自の機能があります。 ) Delphi は真のオブジェクト指向です。 OO テクノロジーに基づいて構築された VCL ライブラリ内のすべてのコンポーネントは、フォーム クラス TForm などの新しいコンポーネントを作成するために継承できます。対照的に、ActiveX コンポーネントにはこの柔軟性がありません。 2) Delphi の CodeInsight テクノロジ (つまり、コードの自動補完機能) はコンパイラ情報に基づいていますが、VB はタイプ ライブラリ情報を使用します。コンパイラ情報を使用する利点は、柔軟性が高いことです。ただし、プログラマは、Delphi のコード プロンプトに時間がかかりすぎるとよく不満を言います。実際、そのスピードに慣れるとリズミカルな快感を味わえるようになったと個人的に感じています。 n 効率的な Delphi 言語は、Object Pascal 言語に基づいています。これは真のオブジェクト指向でありながらエレガントな言語です。機能の完全性の点では他のさまざまなオブジェクト指向言語に劣りませんが、同時に、より多くのものを求めてやみくもに複雑さを増すことはありません。これにより、開発者は実装時に言語やコンパイラの詳細をあまり考慮することなく、さまざまなパターンを使用して設計する際に完全なサポートを受けることができます。 n コンパイル効率 Delphi は、Windows プラットフォーム上で最も高速な高級言語ローカル コード コンパイラであると言えます。高速コンパイルの利点は何ですか?高速コンパイラを使用すると、コードの変更とコンパイルと実行を頻繁に切り替えることができます。少なくとも、私はこの作業方法に非常に慣れています。つまり、プログラムを実行して効果を確認し、プログラムを終了し、少量のコードを変更してからプログラムを実行します。そして、Delphi のコンパイラは私に待ち時間を感じさせません。 ■ 効率的な実行 Delphi はコンパイル速度が速いだけでなく、生成されたターゲット コードの実行効率も非常に高いです。 Delphi と C++Builder は同じバックエンド オプティマイザを使用するため、Delphi によって生成されるコードは、優れた C++ コンパイラによって生成されるコードと同じくらい効率的です。 Delphi は完全にネイティブ コードを生成するため、Delphi のコンパイルで生成された実行可能ファイルは独立して実行および配布できます (これは「グリーン ソフトウェア」の開発にとって非常に重要です)。他のランタイム サポートは必要ありません。もちろん、実行可能ファイルの長さを大幅に短縮できるダイナミック リンク コンパイルを選択することもできます。ただし、この場合、プログラムを配布するときに、必要なランタイム ファイルも同時に配布する必要があります。 ■ 効率的なメンテナンス C++ はプログラマに多くの意思決定権を与えるため、非常に強力ですが、同時に、C++ を使用して優れたオブジェクト指向コードを作成するには、プログラマが一定の資質を備えている必要があります。 Delphi プログラマは、VCL が提供するフレームワークにある程度制限されます (もちろん、Delphi では VCL プログラミングを廃止することもできます)。比較的、適切に設計されたコードを作成するのが簡単です。 Visual Basic は、オブジェクト指向プログラミング メカニズムをまったく提供しません (VB6.0 およびそれ以前のバージョンは、オブジェクト指向ではなくオブジェクトに基づいています)。優れたコード フレームワークにより、ソフトウェアのメンテナンス コストが大幅に削減されます。以上の理由から、私は Delphi を選びました。
1.3 本書のテーマ
私たちは通常、会社のため、自分自身のため、または友人のためにたくさんのコードを書きます。アイデアを検証したり、特定のテクノロジーを学習したりするために、実験的なコードを作成することがあります。このようなコードのライフサイクルは非常に短く、基本的にメンテナンスは必要ありません。ただし、プロジェクトを本当に完了したい場合は、コード設計が非常に重要です。そのようなコードは長期的なメンテナンス、継続的な変更、または機能強化を必要とするためです。コード設計が乱雑だとメンテナンスが困難または不可能になり、そのようなコードを変更するとバグや災害が増えることになります。したがって、コードを作成する前に、コードを設計する必要があります。ここで言う設計とは、機能設計のことではなく、コードを理解しやすく、将来の保守を容易にするために、コーディング前にプログラマーがコードのフレームワークを設計することを指します。 「プログラマーのプログラム人生はわずか 35 年」という格言をよく聞きます。プログラマの寿命が35歳とは決して思わないが、もしかしたら35歳を過ぎると実装能力(というか職人能力)が低下する一方で、設計能力は低下せずに経験を重ねるごとに増大するのかもしれない。これは最も貴重なものです。海外のソフトウェア開発チームの主力はだいたい40歳くらいの人たちで、35歳を超えたらプログラマーになれないいわゆるマスタープログラマーはプログラマーと呼ばれる資格はまったくありません。ソフトウェア エンジニアリングでは、プログラマーをコーダーにして組立ラインのリンクとなる必要があり、設計作業は専門のデザイナー (フレームワーク デザイナーなど) によって完了します。分業化が進む傾向にあるのかもしれませんが、コーダーで満足するか、デザイナーへの成長を望むかは、私たちのビジョンと努力次第です。自分を限定して「達人を達成する」ことに夢中になるのではなく、視野を広げてください。実現力は基礎ですが、それは必要条件であり、十分条件ではありません。そうでなければ、山腹まで登って、山の頂上に到達したと思って停滞するようなものです。その場合、あなたはプログラマーになることしかできず、プログラムの寿命はわずか 35 年です。この視点を獲得した後、この本があなたの入門に役立つことを願っています。中国で出版されているDelphi関連書籍は基本的に実装を解説しています。この本のタイトルは「デルフィの達人によるブレークスルー」です。したがって、あなたは現在 Delphi マスターであると仮定してください。したがって、この本ではあまり多くの実装テクニックについては説明しませんが、サンプルコードはありますが、その実装ではなくアーキテクチャの設計に焦点を当てています。この時点で、この本のテーマ、つまり、Delphi でオブジェクト指向テクノロジを使用して適切に設計されたコードを構築する方法を推測できたかもしれません。私の意見では、コードを書くことは芸術的な創造です。エレガントなコードは、過剰なコメントを必要とせずに一目瞭然です。コメントが多すぎる場合は、デザインが合理的かどうかを検討する必要があります。本を書くことも芸術的な創作であるべきであり、あまり多くの「注釈」(スペースを無駄にするナンセンス)を必要とせずに、読者に自分自身の理解と経験を芸術的に伝えることができれば、それは非常に成功するでしょう。できることを願っています、少なくとも最善を尽くしてください。
1.4 概要
私にとってプログラミングの道に進むことは必然だと思っています。プロのプログラマーになれることも私の夢であり、実現したことです。しかし、Delphi の登場と、私が Delphi を知り、親しみ、夢中になり、仕事の一部になったのは、予想外の驚きだったと言うべきです。ここで言いたいのは、もっと自分に固執すべきだということです。自分の立場を明確にし、自分が選んだ道を明確に知っているときは、もはや何の疑問や迷いを持つ必要はなく、ただ進み続けるだけです。最終的には成功しないかもしれないけど(もちろん成功の定義は人それぞれです)、好きなものは悔いなく好きです!