私が読んだ唯一の開発ブログで、その Joel-On-Software-Founder-of-SO の男によって、私はずっと前に、OO は生産性の向上につながらないことを読みました。自動メモリ管理は行います。涼しい。誰がデータを否定できますか?
私は今でも、関数を使ったプログラミングがすべてをインラインでプログラミングすることであるのと同じように、オブジェクト指向ではないことを信じています。
(そして、GWBasic から始めたので、知っておくべきです。) 関数を使用するようにコードをリファクタリングすると、現在のメソッドに
variable2654
なり
ます。 、それは呼び出され 、完全に理解するにはそれで十分です。
variable3
value
関数のないコードがメソッドを含むコードになると、何マイルものコードを削除する必要があります。
コードを真に OO になるようにリファクタリングすると、、、b
、c
、q
、にZ
なります。そして、私はキーワードの使用を信じていないので、何マイルものコードを削除する必要があります。実際には、 を使用してもそれを行うことができます。this
this
this
this
this
this
オブジェクト指向は自然な比喩ではないと思います。
言語も自然な比喩だとは思いませんし、ファウラーの「におい」が「このコードは味が悪い」と言うよりも優れているとは思いません。
そうは言っても、オブジェクト指向は自然なメタファーに関するものではなく、オブジェクトが飛び出すだけだと考える人は基本的に要点を見失っていると思います。
オブジェクト ユニバースを定義すると、オブジェクト ユニバースが改善された結果、コードが短くなり、理解しやすくなり、動作が改善されます。または、これらすべて (およびいくつかの基準を忘れています)。顧客やドメインの自然なオブジェクトをプログラミング オブジェクトとして使用する人々には、宇宙を再定義する力が欠けていると思います。
たとえば、航空会社の予約システムを実行する場合、予約と呼ぶものは、法的/ビジネス上の予約とはまったく一致しない場合があります。
基本的な概念のいくつかは本当にクールなツールです
ほとんどの人は、「ハンマーを持っていると、すべて釘になる」ということを誇張していると思います。コイン/ミラーの反対側も同じように真実だと思います: ポリモーフィズム/継承のようなガジェットを持っていると、手袋/靴下/コンタクトレンズのようにフィットする用途が見つかり始めます. OO のツールは非常に強力です。単一継承は、人々が夢中にならないようにするために絶対に必要であり、私自身の
複数継承ソフトウェアは耐えられません。
OOPのポイントは何ですか?
非常に大規模なコード ベースを処理するための優れた方法だと思います。コードを整理および再編成し、それを行うための言語を (使用しているプログラミング言語を超えて) 提供し、非常に自然でわかりやすい方法でコードをモジュール化できると思います。
OOP は大多数の開発者に誤解される運命にあります
これは、人生と同じように目を見張るようなプロセスだからです。OO については、経験を積むにつれて理解が深まり、賢くなるにつれて特定のパターンを避けたり、他のパターンを採用したりし始めます。最良の例の 1 つは、制御しないクラスの継承の使用をやめ、代わりに
Facadeパターンを好むことです。
小論文・質問について
私はあなたが正しいと言いたかった。ほとんどの場合、再利用可能性は夢物語です。そのトピックに関する Anders Hejilsberg からの引用を次に示します (すばらしい)ここから:
初心者のプログラマーにカレンダー コントロールを作成するように依頼すると、彼らはしばしば「ああ、世界最高のカレンダー コントロールを作成するつもりだ! カレンダーの種類に関してポリモーフィックになるだろう.そしてマンガー、そしてこれ、あれ、そしてその他。」カレンダー アプリケーションを 2 か月以内に出荷する必要があります。彼らは、このすべてのインフラストラクチャをコントロールに配置し、その上にくだらないカレンダー アプリケーションを 2 日間かけて作成します。彼らは、「アプリケーションの次のバージョンでは、もっと多くのことができるようになるだろう」と考えるでしょう。
しかし、彼らの抽象的なデザインの他の具体化を実際にどのように実装するかを考え始めると、彼らのデザインが完全に間違っていることが判明します。そして今、彼らは自分たちを追い詰めてしまい、すべてを捨てなければなりません。私はそれを何度も見てきました。私はミニマリストであることを強く信じています。一般的な問題を実際に解決しようとしている場合を除き、特定の問題を解決するためのフレームワークを導入しようとしないでください。そのフレームワークがどのように見えるべきかわからないからです。