私は構造プログラミングとオブジェクト指向プログラミングの違いを示すプレゼンテーションを行っていますが、OOPの概念を適用することでコーディングが非常に簡単になり、OOPが本当に必要であると視聴者に感じられる例を挙げて、人々がOOPを必要とする理由を説明したいと思います。
何か案は ??
私は構造プログラミングとオブジェクト指向プログラミングの違いを示すプレゼンテーションを行っていますが、OOPの概念を適用することでコーディングが非常に簡単になり、OOPが本当に必要であると視聴者に感じられる例を挙げて、人々がOOPを必要とする理由を説明したいと思います。
何か案は ??
回答:
この簡単なビデオブログをご覧ください。つまり、構造化プログラミングとオブジェクト指向プログラミングの違いは、追加するものではなく、プログラミングから何を奪うかということです。構造化プログラミングやオブジェクト指向プログラミングなどのソフトウェア分野は制約されており、有効化されていません。ここにいくつかの定義があります。警告:あなたはそれらを好きになるつもりはありません。
構造化プログラミングはgoto(制御の直接転送)に課される規律です
オブジェクト指向プログラミングは、関数へのポインターに課される規律です(制御の間接的な転送)
関数型プログラミングは、割り当てに課される規律です。
最初のものは理解するのが難しくありません。ダイクストラは、アルゴリズムでgotoが許可されている場合、正確さの一般的な証明を作成することは不可能であることを発見しました。ただし、制御構造がシーケンス、選択、および反復に制限されている場合は、正確性の証明が可能です。もちろん、今日では物事が正しいことを証明しようとさえしませんが、構造化プログラミングのシンプルさと優雅さが好きです。
オブジェクト指向を理解するのは少し難しいです。OOは、カプセル化、継承、およびポリモーフィズムとしてしばしば定義されます。あまり知られていないのは、これらの3つの属性すべてが達成可能であり、Cで頻繁に達成されたことです。実際、C ++はCにコンパイルされるプリプロセッサとして開始されました。相互のサブセットであり、継承をシミュレートするデータ構造。ただし、多態性は少し難しいです。Cでは、うまく管理するのが難しい関数へのポインターが必要です。C ++のような言語が私たちに与えたものは、関数へのポインターに課せられた規律でした。C ++コンパイラーがvtableを作成し、厳密な形式に従ってvtable内のポインターを初期化しました。したがって、非常に現実的な意味では、オブジェクト指向は単に制御の間接的な転送、つまり関数へのポインタ。
構造化プログラミングは、gotoを使用しない方法に関するものです。OOは、関数へのポインターを使用しない方法についてです。そして、関数型プログラミングも、やるべきではないことについてすべてです。関数型プログラミングでは、最も厳密に制御された場合を除き、変数を割り当てません。
したがって、結局のところ、これらのプログラミング「テクノロジー」はすべて、テクノロジーを実現するのではなく、実際に規律を制約しています。彼らは何を教えていない以上、彼らは何を教えてより行うことをしません。そしてそれは、ソフトウェア開発が過去40年間成長していないことを意味します。むしろ、縮小しました。してはいけないことをすべて学んだので、それはますます制約されています。
してはいけないことを学ぶのは良いことです。しかし、ここで邪魔質問です:新しいものは、私たちが学んだことをするのですか?
コンピューターをプログラムするには、3つの基本的な方法があります。
goto
古いBASICインタープリターやアセンブリ言語などのs もうこの方法でプログラムする人はほとんどいません。私の見解では、オブジェクト指向プログラミングは何か違うものです。プログラムを大規模に整理する方法についてです。上記の3つのパラダイムのいずれかを置き換えたり、廃止したりすることはありません。メソッド本体内で、リストから3つのパラダイムのうちの1つを選択して書き込む必要があります。
それは、あなたがどのように変化を予測するかについてです。
どちらの概念も再利用可能ですが、OOPはより簡単な変更への扉を開きます。OOPには構造プログラミングが持つすべての再利用性がありますが、それを使用して少ない労力で新しい機能を作成することもできます。
OOPは構造プログラミングのすべての機能を継承し、継承の追加機能があると言えます。:-D
概念は直交しています。構造化プログラミングとは、プロシージャ/関数/メソッド内でコードを構造化することです。OOPを行う場合、クラスメソッド内で構造化プログラミングの原則に従うことは完全に可能です(そして望ましい)。
それは一種の主観的な言い回しです。構造化プログラミングとOOPは問題を解決するスタイルであり、一方が常に他方より優れているとは限りません。数値メソッドライブラリを記述することは、入力データに対して変換を実行する構造化されたスタイルで行われる場合、かなり意味があります。ただし、ステートマシンによって駆動される単純なエージェントは、JavaまたはC ++で自己完結型のクラスとして簡単に表現できます。OOPは、データ構造のストレージコンテナーを表現する自然な方法です。
情報の隠蔽とモジュール性について話すことは、OOPをスタイルとして自然に動機付ける良い方法です。
この問題に関する興味深い見解は、Steve Yeggeによって書かれました。ある意味では、2つのスタイルのアプローチの違いをよりよく説明するものの1つです。
OOPは、ビジネスモデルを作成するときに理解しやすくなります。アプリケーションの要素について考えるとき、それらの間でいくつかのオブジェクトと関係を使用します。例えば、本には著者、タイトル、ISBNがあります。本は図書館に入れることで、学生が借りることができます。構造的プログラミングは、特定のプロセス、抽象化されていない実装について考えることを強制します。
OOPは簡単に変更できるように設計されています。構造プログラムの変更は可能ですが、コードで記述する必要があります。OOプログラムの変更は、抽象モデルの変更によって説明できます。
可変範囲:
優れたプログラミングを保証する言語の原則は、変数の範囲を制限することだと思います。Cのような構造化言語では、スコープは主に2種類です。
私たちは皆、グローバルな範囲が有害であることを知っています。ただし、ローカルスコープではプログラムを実行できない場合があります。グローバルスコープを回避すると、ポインターをより広く使用する傾向があり、スコープ外で変数を使用できるようになります。しかし、ポインターを理解して使用することは困難です。
C ++などのOOP言語は、カプセル化によって新しいタイプのスコープクラス/オブジェクトスコープを追加します。このスコーピングは、プライベート/パブリックバリエーションによってさらに強化されます。そして、これは変数スコープの多くの問題を解決します。スコープは、OOPでさらに定義されています。そして、ポインターはあまり必要ありません。
これは、OOPの優れた機能の1つです。