あなたのブログからは、命令型プログラミングと関数型プログラミングの両方に精通しており、オブジェクト指向プログラミングに関連する基本概念に精通しているようですが、実際に「クリック」したことはありません。便利になります。私はその知識の観点から説明しようとし、それがあなたに役立つことを願っています。
OOPは、本質的に、命令型パラダイムを使用して、問題の領域をモデル化する「スマート」データ構造を作成することにより、高度な複雑さをより適切に管理する方法です。(標準の手続き型の非オブジェクト指向)プログラムには、2つの基本的なものがあります。変数と、それらをどう処理するかを知っているコードです。このコードは、ユーザーおよびその他のさまざまなソースからの入力を受け取り、変数に格納して操作し、ユーザーまたはその他のさまざまな場所に送られる出力データを生成します。
オブジェクト指向プログラミングは、その基本的なパターンを採用して小規模で繰り返すことにより、プログラムを簡素化する方法です。プログラムが何をすべきかを知っているコードを備えた大量のデータの集まりであるように、各オブジェクトは何をすべきかを知っているコードにバインドされた小さなデータです。
問題の領域をより小さな部分に分割し、可能な限り多くのデータを、それをどう処理するかを知っているコードに直接バインドすることにより、プロセス全体およびサブプロセスについて推論することがはるかに容易になります。プロセスを構成する問題。
データをオブジェクトクラスにグループ化することにより、そのデータに関連するコードを集中化して、関連するコードを見つけやすく、デバッグしやすくすることができます。また、アクセス指定子の背後にあるデータをカプセル化し、メソッド(または言語がサポートしている場合はプロパティ)を介してのみアクセスすることにより、データ破損や不変条件の違反の可能性を大幅に減らします。
また、継承とポリモーフィズムを使用することで、既存のクラスを再利用し、特定のニーズに合わせてカスタマイズすることができます。元のクラスを変更したり、ゼロからすべてを書き換えたりする必要はありません。(これはあなたがやるべきではありません事、あなたがそれを避けることができれば、。)ちょうどあなたがあなたのベースオブジェクトを理解するか、で終わる可能性があり注意が必要キラーカンガルー。
私にとって、これらはオブジェクト指向プログラミングの基本原則です。複雑さの管理、コードの集中化、オブジェクトクラスの作成による改善された問題領域モデリング、継承とポリモーフィズム、カプセル化とプロパティ。これが、なぜ多くのプログラマーが便利であると考えるのかを理解するのに役立つことを願っています。
編集:コメントでのジョエルの質問に答えて、
命令型プログラムとは根本的に異なる「オブジェクト指向プログラム」に含まれる内容(説明したこれらの派手な定義以外)を説明できますか?「ボールを転がす」方法
ここで少し免責事項。「オブジェクト指向プログラム」の私のモデルは基本的にDelphiモデルで、元のDelphiチームメンバーによって作成されたため、C#/。NETモデルに非常に似ています。私がここで言っていることは、他のオブジェクト指向言語には当てはまらないか、それほど当てはまらないかもしれません。
オブジェクト指向プログラムは、すべてのロジックがオブジェクトを中心に構成されているプログラムです。もちろん、これはどこかにブートストラップする必要があります。典型的なDelphiプログラムには、と呼ばれるシングルトンオブジェクトを作成する初期化コードが含まれていますApplication
。プログラムの開始時に、をApplication.Initialize
呼び出してApplication.CreateForm
から、最初からメモリにロードするすべてのフォームの呼び出しを行いApplication.Run,
、画面にメインフォームを表示し、すべてのコアを形成する入力/イベントループを開始しますインタラクティブなコンピュータープログラム。
アプリケーションとフォームは、OSからの着信イベントをポーリングし、オブジェクトのメソッド呼び出しに変換します。非常に一般的なことの1つは、イベントハンドラーの使用、または.NETでの「デリゲート」です。オブジェクトには、「XとYを実行するだけでなく、この特定のイベントハンドラーが割り当てられているかどうかを確認し、割り当てられている場合は呼び出します」というメソッドがあります。イベントハンドラーは、オブジェクトへの動作を拡張するために使用されるメソッドポインター(メソッドへの参照とオブジェクトインスタンスへの参照を含む非常に単純なクロージャー)です。たとえば、フォームにボタンオブジェクトがある場合、OnClickイベントハンドラをアタッチすることで動作をカスタマイズします。これにより、ボタンがクリックされたときに他のオブジェクトがメソッドを実行します。
そのため、オブジェクト指向プログラムでは、メソッドポインターを使用するか、あるオブジェクトが別のオブジェクトのパブリックインターフェイスで定義されたメソッドを直接呼び出すことにより、特定の責任を持つオブジェクトを定義してリンクすることにより、ほとんどの作業が行われます。(そして今、私たちはカプセル化に戻りました。)これは、大学でOOPクラスを受講する前に、私が元に戻すという概念を持っていなかったという考えです。