2

OOP と手続き型の違い、いつどちらを使用するか、利点が余分なオーバーヘッド、構文の学習、継承の混乱などを上回るかどうかについて、数え切れないほどの質問があることを私は知っています。必要かどうかではありません。

私は通常、何をしているかに応じて、同じサイト スクリプト内で OOP とプロシージャルを混在させます。私はまだ OOP にかなり慣れていませんが、OOP のモジュール性と、それがもたらす利点は、多少のオーバーヘッドはあるものの、実際には非常に気に入っています。ただし、継承は時々少し混乱することがあります。

私にとって、主な利点は、コードの編成と保護の改善にあるように思えます。そのうち、開発者または開発者チームだけがそれを高く評価しています。展開速度にはケースがあると思いますが、他の誰かの鳥の巣を継承していない限り、ほとんどのサイトではそれほど多くはありません:)

ただし、特に実行速度がほとんどのサイトの聖杯である場合、ほとんどの PHP アプリで OOP は必要ですか? ミリ秒のオーバーヘッドは、頻繁に使用するサイトでない限り、実際には気付かないでしょうが、電子音楽の速度のファンとしては王様です!

ゲームやリアルタイム クラウド ソフトウェアなどの複雑なもので OOP を使用していますが、静的な Web サイトはありますか? データベースの重いものでも?

OOPの恩恵を受ける典型的なサイトの実際の例を誰かが持っていますか?その理由は?

両方のケースが適切に構成されていると仮定すると、ebay や monster.co.uk のような頻繁に使用されるサイトは、OOP または手続き型 () の速度向上からより多くの恩恵を受けるでしょうか? なぜ?

少なくともプロシージャルを使用すると、クラス、拡張機能、およびインターフェイスをチェックするためにスクリプトをあちこち移動することなく、トップダウンでデバッグできます。

明確な MVC と十分にコメントされたコードを使用して、OOP モジュラー思考を適用することはできませんか?

たとえば、再利用可能な関数をインクルード ファイルに保持し、関連する関数をグループ化します。私がしなければならないことは、クラス ファイルと同じようにファイルをインクルードし、関数を呼び出すことだけです。関数を変更する必要がある場合は、クラスと同様に 1 か所で変更されます。

そして、一種の継承は、宣言するためにフープをジャンプする必要なく、手続き型に既に存在します。あなたは同じレベルのコントロールを持っていませんが、仕事をうまく素早く終わらせます.

親関数内で関数をグループ化してクラスをシミュレートし、セレクター関数を使用してそれらにアクセスすることもできます。しかし、それは少し遠いです!

また、私が知っている限り、関数が呼び出されたときにメモリにとどまり、その後の使用が速くなります。一方、OOP では、2 つの異なる変数に対して同じ関数を使用するために、さまざまなメソッドの 2 つのオブジェクトを作成する必要があります。私が間違っている場合は修正してください。

手続き型で値を直接参照できるのに、なぜオブジェクトを作成し、メソッドを使用して値を「取得」するのですか?

ここまでたどり着いたのはよくできましたが、こんなにたくさんタイプしたことに気づきませんでした。とにかく、これ以上脱線する前に、ここで終了します。

したがって、OOP または手続き型の恩恵を受ける実際のサイトまたはサイトの一部の良い例があれば、明確にしていただければ幸いです。

4

4 に答える 4

9

人々は、オブジェクト指向言語が普及するずっと前に、うまく、明確で、よく整理されたコードを書くことができました。今でもできない理由はわかりません。

一般に、OOの原則はそれを容易にします(これがOOが非常に人気がある理由の1つです)が、それらは決して必要ではありません。

于 2011-12-01T15:49:54.567 に答える
4

ここにはたくさんの質問があります。大学在学中にこれらの点のいくつかを取り上げた長いエッセイを書いたことを思い出しますが、ここで似たようなものを再現したくないので、代わりにいくつかの考えを共有させてください。

ただし、ほとんどのPHPアプリでは、特に実行速度がほとんどのサイトの聖杯である場合、OOPは必要ですか?さて、ミリ秒のオーバーヘッドは、頻繁に使用するサイトでない限り実際には気付かないでしょうが、電子音楽のファンとしてはスピードが王様です!

実行速度が非常に重要である場合、phpはWebサイトに適した言語ではないと思います。インタプリタ言語を使用することによる大きなパフォーマンスコストと比較すると、大規模なシステムを作成するためのOOPプログラミングスタイルの利点と比較して、わずかなオーバーヘッドは無視できます。プログラマーが何かを簡単に行えるようにすることの重要性を軽視しないでください。これは、リリースが速く、バグが少なく、コードが保守しやすいことを意味します。

ゲームやリアルタイムクラウドソフトウェアなどの複雑なものでOOPを使用していますが、静的なWebサイトですか?データベースの重いものでさえ?

私はここであなたに同意します。ウェブサイトの良いところは、ページに分割されているため、自然にモジュール化されていることです。将来のプログラマーがそれを維持できないほどひどいコードを書くのは難しいです(かなり単純で静的なWebサイトの場合)。

たとえば、再利用可能な関数をインクルードファイルに保存し、関連する関数をグループ化します。私がしなければならないのは、クラスファイルのようにファイルを含めて関数を呼び出すことだけです。関数を変更する必要がある場合は、クラスと同様に1か所で変更されます。

優れた手続き型コードを書くことはできますが、優れたOOPコードを書くよりも困難です。弱いプログラマーは、動作するOOPシステムが与えられたときに、非常識なスパゲッティコードを書く可能性が低くなります。

手続き型で値を直接参照できるのに、なぜオブジェクトを作成し、メソッドを使用して値を「取得」するのですか?

これはあなたの唯一の本当の実装の質問です。Getters / Settersの考え方は、クラスに依存する他のコードを壊すことなく、クラスの内部動作を変更できるようにすることです。

于 2011-12-01T15:58:25.127 に答える
2

ゲームやリアルタイム クラウド ソフトウェアなどの複雑なもので OOP を使用していますが、静的な Web サイトはありますか? データベースの重いものでも?

ゲームではスピードが必要ではなく、Web サイトではスピードが必要であることを意味します。

PHP がボトルネックになることはありません。もしそうなら、C で記述してください。

「速い」という理由で手続き型コードを書かないでください。それはばかげている。

OOPの恩恵を受ける典型的なサイトの実際の例を誰かが持っていますか?その理由は?

Web サイトは、保守が容易でよく整理されたモジュラー コードの恩恵を受けます。

これにはオブジェクト指向は必要ありません。関数型または命令型のスタイルで実行できます。しかし、PHP は手続き型スタイルで悪いコードを書きやすいことで知られています。

個人的には、OO の場合、コードがモジュール化され、保守可能である可能性が高いと言えます。

しかし、それは必要ではありません。

そして、一種の継承は、宣言するためにフープをジャンプする必要なく、手続き型に既に存在します。あなたは同じレベルのコントロールを持っていませんが、仕事をうまく素早く終わらせます.

オブジェクト指向プログラミングでは、データの塊をそれを操作するいくつかの関数にバインドすることを意味するカプセル化がすべてです。

これは、データ オブジェクトを最初の引数またはクラスとして受け取る一連の関数でも同様に行うことができます。

クラスと OO は、糖分とユーティリティを提供するだけです。

モジュラー コードを作成するためのツールです。

「遅い」ため、オブジェクト指向を事前に最適化しないでください。そのようなマイクロ最適化に関心がある場合は、C または ASM を書き始めてください。

于 2011-12-01T15:53:54.273 に答える
2

オブジェクト指向を促進する多くの人々は若く、オブジェクト指向を書いたり教えられたりしたことがないため、手続き型は時代遅れで「レガシー」であるという非常に否定的な見方をしていると思います。

IMO は、DRY で保守が容易なモジュール式の手続き型 PHP を簡単に作成できます。トリックは、関数と 'include' を使用して、標準の php と html をそれぞれ再利用することです。結局のところ、PHP は DB を読み取って html を生成するだけです。必要がなければ、オブジェクト指向の複雑さを追加する必要は特にありません。

于 2016-10-21T16:23:27.027 に答える