手続き型プログラミングとオブジェクト指向プログラミングの違いについて議論している StackOverFlow に関するさまざまなトピックを見てきました。問題は、プログラムがオブジェクトを使用している場合、それはまだ手続き型と見なすことができるかということです。
7 に答える
はい、初期の Javaの多くはまさにそれでした。Java が「ホット」だったという理由で、OOP について考えなかった C プログラマーがたくさんいました。多くの静的メソッド、case ステートメントでの多くの RTTI、多くのinstanceof
.
GLib には、純粋な C で実装されたオブジェクト指向プログラミングであるGObjectがあります。OOP のように「感じ」始める API を構築することはできますが、(コンパイラの観点からは) 実際のクラスを持たない単純な「C」コードにすぎません。オブジェクト指向の設計パターンを実装し始めているのであれば、それがどの言語で書かれているかに関係なく、私はそれを OOP と呼びます。すべては、コードの感触と、それに対してどのように考えなければならないかということです。
手続き型プログラミングは、プログラムをどのように構造化し、ドメインをモデル化するかに関係しています。ある時点でオブジェクトをインスタンス化したからといって、それだけではプログラムがオブジェクト指向 (つまり、オブジェクト指向) になるわけではありません。
区別は完全に主観的なものです。たとえば、状態の受け渡しを使用して C ライブラリをコーディングする場合は、状態をオブジェクトとして使用して、"tell" パターンのようなものを実装していることになります。
クラスはスーパータイプと見なすことができます。VB3 から VB6 に変換したときの最初のパスは、使用したすべての型を見つけ、次にその型をパラメーターとして取るすべてのサブルーチンと関数を見つけることでした。それらをクラス定義に移動し、パラメーターを削除してから、元の制御フローをそのままにしてテストしました
次に、制御の流れをリファクタリングして、さまざまなパターンとオブジェクト指向の手法を使用しました。
オブジェクト指向の核心は、問題をより小さな部分に分解する方法と、これらの部分がどのように連携するかです。哲学についてです。オブジェクト指向言語を使用しても、その言語で書かれたプログラムがオブジェクト指向であるとは限りません。一般的な OO の概念をすぐにサポートする言語を使用して OO を実行する方が簡単です。
「プログラムがオブジェクトを使用する場合、それはまだ手続き型と見なすことができますか?」という質問に答えるには、次のようにします。-それは、オブジェクトと手続き型プログラミングの定義が何であるかによって異なります。しかし、私の意見では、答えは「はい」です。「オブジェクト」は OO の哲学の一部にすぎず、「アプリケーションのどこかで」オブジェクトを使用しても、OO を行っているわけではありません。
あなたの質問への答えはイエスです。例えば。古い PHP レガシー ページを維持する必要があります。ほとんどのコードは手続き型ですが、Zend Framework を既存のものにプラグインし、独自のクラスをいくつか作成して古いコードの一部を置き換えると、いくつかのものをより簡単に維持できると判断しました。一般に、このアプリケーションはまだ主に手続き型の方法で作成および機能していますが、ここではクラスまたは別のクラスがインスタンス化されて使用されています。手続き型と OO の間に明確な境界線はないと思います。あなたはそれをきれいにすることも、きれいにしないこともできます。アプリのサイズと複雑さに十分なレイヤーがない場合、自動的に手続き型コードが増えることになります...