web-dev-qa-db-ja.com

手続きコードvs OOPコード

私はPHP of 13000+ lines of Procedural Style [私はOOPを知っていますが、それに非常に精通しているため]でプロジェクトを完了し、プロジェクトは完全に実行されています。

しかし、それをOOPに変換する必要がありますか? [世界はOOPで忙しいため]

私のコードはOOP [カプセル化、継承は基本的に...]の機能を必要としません!

だから私は何をすべきですか?

そして、それをOOPに変換するとどうなるでしょうか?

19
Sourav

私のコードはOOPの機能を必要としません

あなたはあなた自身の質問に答えました-あなたが必要としないOOP この場合でありそしてあなたのプロジェクトが働いているならそれを変換しないでください。

ただし、nextプロジェクトではOOPの使用を検討する必要がありますが、それが適切な場合に限られます。

適切な場所で使用されている限り、手続き型プログラミングには本質的に問題はありません。

52
ChrisF

いいえ、そしてOOPが必要ないからというだけではありません。

プログラムがすでに完成していて満足のいく動作をしている場合は、90%以上の時間で、何らかの理由で完成したコードを書き直すのは時間の無駄です。

OOPは使用すべきではないため、OOPがトレンドであるため、使用しないでください。

16
Skeith

私の一般的なパラダイム(および3つの主要なパラダイムのどれもプログラミングの正しい方法でも間違った方法でもない理由):

手続き型プログラミングは、高レベルでは単純な問題があり(低レベルでは複雑になる可能性があります)、それに応じて単純な線形コードを記述したい場合に適しています。 OOよりも書くことと理解することは間違いなく簡単であり、問​​題が強力なデカップリングを必要としない場合は機能的です。例:数値コード、最も小さなスクリプト、壊れた後の最も小さなサブ問題OOまたは機能的を使用して物事をダウンさせます。

オブジェクト指向コードは、いくつかの懸念事項の実装が複数存在する可能性があるため、懸念事項を強く分離する必要がある場合に適しています。例:最も大規模なビジネスソフトウェア。たとえば、ビジネスロジックをプレゼンテーションロジックから強く分離したい場合があります。これらはおそらく独立して変更する必要があるためです。

関数型プログラミングは、メカニズムとポリシーを強力に分離する必要がある場合に適しています。ポリシー関数を受け入れるメカニズム関数を持つことは良いパターンです。 (私はDプログラミング言語の std.algorithm module を見ることでそれについて学びました。)ポリシーとメカニズムのコード間の境界で可変状態を抽象化することで、APIは一般的に推論しやすくなります。どちらかで変更可能な状態がプライベートに使用されている場合、これは実装の詳細です。関数型プログラミングのもう1つの長所は、自明の理由から、並行性です。

8
dsimcha

Code「OOPが必要」になることはありません。これまたはその特定の問題が$ PARADIGMを「必要」とするか、その方法で解決するのが最善であると想定するのは、さまざまなモードで考えることができる限り、プログラマーです。

1つのパラダイムしか知らないプログラマは、自分のパラダイムが最も優れていると考えることがよくあります。ワンサイズはすべてに適合し、これが現在流行している場合、私たちはすべてプロクラステスのベッドで寝なければなりません。

7
Ingo

プロジェクトをOOPに変換する必要があるのは、OOPの必要性が明確に示されている場合のみです。これが発生する可能性のあるシナリオは(とりわけ)です。

  • プロジェクトの拡大
  • チームに開発者を追加する

これらのシナリオでも、プロジェクトをOOPに変換する必要はない場合があります。

5
Timothy Groote

どちらも良い場合もあれば、悪い場合もあります。ただし、一方を他方のように改造することは決して良い考えではありません。

4
jwenting

OOが発明された理由を振り返ってみると、need OOP時にはそれはあなたの人生をずっと楽にします。

Cコーディングの時代に戻ると、非常に大規模なプログラムは非常に複雑になり、作業を続けるのが困難になる可能性があります。したがって、彼らはそれをモジュール化されたチャンクに分割する方法を発明しました。 OOPはこのアプローチを採用し、さらにモジュール化して、プログラムロジックのチャンクでデータを配置するため、コードの残りの部分からさらに分離されます。

これにより、ますます大きくなるプログラムを書くことができ、タスクの巨大な象を代わりに100マウスサイズのタスクに変更できます。追加のボーナスは、これらの「マウス」の一部を取り、他のプログラムで再利用できることです。

もちろん、現実の世界はそうではなく、オブジェクトの再利用が意図したとおりに行われることはありませんが、それが役に立たないパラダイムであるとは限りません。

役に立たないのは、どちらのスタイルのコーディングにも過度に依存していることです。 OO千の小さな重要でないクラスで行う人は、実際には正しくありません-彼らは自分自身(または他の誰か)にとってメンテナンスの悪夢を作っています。 3つの関数も人生を困難にしています。最適な方法は、かなりの量のスタンドアロンコードとデータを提供できる、middlleのグラウンドのような大規模なオブジェクト(コンポーネントと呼ばれることもあります)です。アプリの他の部分と切り離して再利用される可能性がはるかに高くなります。

次回のアドバイス:通常の手続き型コードを記述してみてください。ただし、メインデータ構造の単一のオブジェクトを作成してください。関数から関数へデータを渡すよりも簡単に操作できることを確認してください。

2
gbjbaanb

私のコードはOOP [カプセル化、継承は基本的に...]の機能を必要としません!

どうやってわかったの?

このプロジェクトを維持する必要がありますか?予定されている新機能はありますか?あなたと一緒に成長する他の人がいますか?繰り返しましたか?コードを理解するのは難しいですか?

答えが「はい」の場合は、おそらくOOPスケルトンを設定して、この方法で進めることを考え始める必要があります。

0
vihus