[解決済み] OOPってなんだろう?
質問
私が知る限り、OOP の教育、言語、およびツールに何百万、何十億と費やされているにもかかわらず、OOP は開発者の生産性やソフトウェアの信頼性を向上させておらず、開発コストも削減できていません。厳密な意味でOOPを使っている人はほとんどいません(LSPなどの原則を守ったり理解したりする人はほとんどいません)。問題領域をモデル化するために人々が取るアプローチには、ほとんど統一性や一貫性がないように思われます。 あまりにも多くの場合、クラスは単にその構文上の糖分のために使用されます。それは、レコード型のための関数を独自の小さな名前空間に置きます。
私は、さまざまなアプリケーションのために大量のコードを書いてきました。真の置換可能なサブタイピングがアプリケーションで重要な役割を果たす場所もありましたが、それはかなり例外的なことでした。一般に、再利用の話には多くのリップ サービスが与えられますが、現実には、コードのピースが まさに をしない限り、費用対効果の高い再利用はほとんどありません。 拡張可能なクラスを設計するのは非常に困難です。 適切な方法で そのため、通常、拡張のコストは非常に大きく、quot;再利用は単に価値がないのです。
多くの点で、これは私を驚かせるものではありません。 現実の世界は OO ではありませんし、OO に暗黙的に含まれている、あるクラス分類法で物事をモデル化できるという考えは、私には非常に根本的な欠陥に思えます (私はテーブル、木の切り株、車のボンネット、誰かの膝に座ることができますが、そのどれもが椅子ではないのです)。 より抽象的なドメインに移動したとしても、OOモデリングはしばしば難しく、直感に反し、最終的には役に立ちません(円/楕円や四角/長方形の古典的な例を考えてみてください)。
では、ここで私は何を見逃しているのでしょうか?OOP の価値はどこにあるのでしょうか、そしてなぜすべての時間とお金はソフトウェアをより良くするために失敗したのでしょうか。
どのように解決するのか?
オブジェクト指向が人々にとってより自然な考え方であることを示す経験則はありません。プログラミングの心理学の分野では、OO が他のアプローチよりも何らかの形で適しているわけではないことを示す研究がいくつかあります。
オブジェクト指向の表現は、普遍的により使いやすい、あるいは使いにくいということはないようです。
単にオブジェクト指向の手法を採用し、開発者にその手法を使うように要求するだけでは不十分であり、開発者の生産性や開発するシステムの品質に悪い影響を与える可能性があるからです。
Communications of the ACM Oct. 2000 の "On the Usability of OO Representations" から引用したものです。この記事は主にプロセス指向のアプローチに対してOOを比較したものです。OOメソッドで働く人々がどのように"think"しているかについての研究はたくさんあります(Int. J. of Human-Computer Studies. J. of Human-Computer Studies 2001, issue 54, or Human-Computer Interaction 1995, vol.10 has a whole theme on OO studies), and from what I read, there's nothing indicating some kind of naturalness to the OO approach that makes better suited than a more traditional procedural approach.
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 言語バインディングとは何ですか?
-
[解決済み] べき乗演算とは何ですか?
-
[解決済み] キュアリングと部分適用の違いは何ですか?
-
[解決済み] ランタイムとコンパイルタイム
-
[解決済み】「インターフェースに合わせたプログラム」とはどういう意味ですか?
-
[解決済み】並行プログラミングと並列プログラミングの違いは何ですか?
-
[解決済み】ループや関数をサポートする言語で「goto」の正当な使用例はあるのか?
-
[解決済み] さまざまなアプローチやコンセプトを理解するために学ぶべき重要な言語とは?[クローズド]
-
[解決済み] ボクシングとアンボクシング、そのトレードオフとは?
-
[解決済み] 例外やエラーコードの規約 [終了しました]。