OOPは実世界で支配的なプログラミングモデルですか?


20

オブジェクトはありませんか?まあ、ほとんどこれまで

ACMのコミュニケーションのVIEWPOINTセクションで、「Objects Never?Well、Hardly Ever」という興味深い記事を見つけました。これは、オブジェクトファーストまたはオブジェクトレイトとは根本的に異なる視点です。彼は「オブジェクト-決して」または多分「オブジェクト-大学院」を提案します。

著者はOOPについて話し、OOPが実際のプログラミング環境でどのように使用されるかについて質問しました。彼は、OOPは支配的なプログラミングモデルではないと考えています。たとえば、プログラミングの70%は、OOPがあまり適していない組み込みシステム向けに行われていると彼は言います。

大学の一部の教授は、OOPの利点について話したい場合、コードの再利用について話します。別の例として、再び、彼は、これは現実世界の実際のケースではない、と主張します。コードの再利用は大学で主張されているものよりも難しい:

OOPの使用は、ほとんどの人が信じているほど普及しておらず、支持者が主張するほど成功していないため、CSカリキュラムの中心的な位置は正当化されないと主張します。

スタックオーバーフローの人々がこれについてどのように考えているかを知るのは興味深いですか?OOPは、プログラマーの観点から見れば、主要なプログラミングモデルですか?

アプローチを1つだけ選択/学習/使用する必要がある場合、それはOOPですか?どうして?


26
「プログラミングの70%は組み込みシステムで行われます」プロジェクトごと、開発者ごと、またはLOCごとですか?「すべてのプログラム」の70%がExcelで行われていると感じています。非プログラマーでもスプレッドシートをプログラムします。
LennyProgrammers

1
@ Lenny222:あなたが私の推測を望むなら、それはプログラムの配布されたコピーの70%が組み込みソフトウェア、またはそのようなものにあるということです。現在、一部の埋め込み処理はC ++で行われます。多くの場合、Cとオブジェクトを残すハックダウンバージョンなので、埋め込みは決してオブジェクト指向ではないと主張するのは不誠実なようです。
デビッドソーンリー

9
私は、支配的なプログラミングモデルは長い間、泥の大玉であると考えています。
-whatsisname

この記事では、「クラス」と「サブシステム」を奇妙に区別していますが、これは私にはあまり理解されていません。それはどのように語るDiskBrake extends Brakeものを、のような- 「現実世界」で、この通信は、「ネットワーク信号とバス・プロトコルによって、」実装されているため、手段OOPは車のために良くありませんDiskBrake implements BrakeInterface?!多分それは私自身の<< 43年の経験ですが、私の例は著者の主張を完全に裏付けることに失敗しています。
OJフォード

2
リンクは現在、ペイウォールの背後にあります。とにかく、OOPは、ほとんどの部分が過小評価され、過大評価されています。しかし、ちょうどそこに「最も」新しいプログラムがありそうなゲッターとセッター、およびSessionManagerの名前のクラスでいくつかのJava-インスピレーションを得たOOP風方法で書き込まれているとしましょう
チャールズサルビア

回答:


19

ACMのコミュニケーションのVIEWPOINTセクション

実用的なプログラミングに興味がある場合は、ACMや同類の議事録が最後に読みたいソースです。これらは、多くの場合[現実]科学的出版物であり、現実の世界には適用されません。これらは非常に頻繁に宣伝のために作られた非正統的な意見であり、作家は群衆から自分自身を差別化し、自分の人を宣伝します。

OOPの使用は、ほとんどの人が信じているほど普及しておらず、支持者が主張するほど成功していないため、CSカリキュラムの中心的な位置は正当化されないと主張します。

私はあなたの主張に反対する傾向があります。OOPは広く普及しており、問題なく機能しています。OOPベースのプロジェクトの数は、他の戦略で行われた開発を上回る可能性があります(15〜20年の現代について話しましょう)。

ただし、OOPは特効薬ではありません。一部の開発では機能しますが、他の開発では機能しません。他のアプローチと同じです。

しかし、言及しなければならないことの1つは、カリキュラムがさまざまなアプローチの知識を伝えるべきだということです。OOPベースの場合、それは間違っています。FPベースの場合、それは間違っています。それらすべてをカバーするか、このトピックにまったく触れないでください。

PSどうして支配的なものとそうでないものを気にするのですか?手元のプロジェクトに適したものを取り、その数字を「研究者」にお任せください。


3
彼らはまだ主流になっていないコンピューティングの分野の研究論文です。学界が通常は現実の世界にフィルターをかけるのに何年もかかりますが、定期的に行います。
10

4
@DeveloperArt:論文の著者はソフトウェア開発で43年の経験があります。
エーサン

6
アランケイは、cacm.acm.org / magazines / 2010/9 / でコメントを追加します -「対照的に、自分自身を「オブジェクト指向」と呼ぶほとんどのシステムが、最初に造語したときの私の意味にさえ近いとは考えませんでした用語。' -私の投稿に接しているのはどれですか-「OO?だれのOO?」
フランクシェラー

9
@Developer Art:あなたの投稿について私に少し(ほんとうに)感謝するのは、「研究者」の部分です。それらのあからさまな学者。彼らは私たちのために何をしましたか?ああ。ラムダ計算、クロージャ、オブジェクト、関数型プログラミング、...しかし、それ以外に、学者は私たちのために何をしたことがありますか?
フランクシェラー

4
-1コンピュータサイエンスの研究者は怖い引用が必要ですか?ACMは擬似科学を公開していますか?マジ?
jprete

17

OOPがあなたが知っている唯一のパラダイムであるなら、もっと学ぶべきでしょう。しかし、実際には、OOPとは実際にはどういう意味ですか?JavaまたはC ++を意味しますか?Smalltalkを意味しますか?設定可能な値スロットとクロージャーを意味しますか?(こんにちは、Scheme!)それはメッセージ送信を意味しますか?(こんにちは、アーラン!)

要するに、質問するのは面白くない質問のようです。「オブジェクト指向は便利ですか?」より良い質問です。そして、そうですね。(確かにそれは私のためです。)


6
+1実際には、OOPは「オブジェクトと呼ばれるものを使用するコードを記述するための良い方法」以外の意味をやめたと思います。
ラリーコールマン

言及された記事は、オブジェクト指向言語の使用がオブジェクト指向の使用を保証するものではないと考えており、パラダイムは他のエンジニアリング分野には存在しないので、パラダイムがあるべきかどうかを疑問視しています。
ジェフ

おそらく著者は、William CookとMatthias Felleisenを読む必要があります。WilliamCookとMatthias Felleisenは、プログラミングの何が同じで何が同じでないかについて多くの時間を費やしています。
フランクシェラー

9

すべての開発者は、「プログラミングの70%」をどこで行っていますか?私が知っているすべての開発者のうち、組み込みシステムに取り組んでいるのは1%未満です。

したがって、3つのオプションがあります。

  1. 私はユニークで、あなたの友達全員が本当に組み込みプログラミングをしています
  2. 地下室に閉じ込められた開発者の軍隊がどこかでそれらの70%をやっている
  3. この統計は構成され、記事はでたらめです

オプション1または2が実際に真であるという証拠を確認しない限り、オプション3を使用します。

(ところで、私は現代のモバイル開発の組み込みプログラミングを考慮しておらず、すべてのAppleが* Objective * Cを使用してiPhone用に開発することを強制した後、モバイル開発は多くの場合OOです)


FWIW、私は数秒かかって、「プログラミングの70%」のための可能なダースの半ダースを思いつきました。著者は7番目を使用した可能性があります。(また、組み込みのプログラマーもいます。彼らは同じ場所にたむろしない傾向があり、多くの場合、プログラマーではなく電気技師またはそのような何かを考えています。)
デイヴィッドソーンリー

1
@David Thornley-統計に嘘をついていることはまだ嘘です。著者は、今日の世界のプログラミングの圧倒的大多数は組み込みシステム向けであると明確に主張しています-そして、これは合計強気だと言います。世界のほとんどのプログラミングは私が今いる部屋で行われていることを示しています(他の1人の開発者とだけ共有しています)-しかし、この観察結果に基づいて構築した結論は、作成した尺度と同じくらい価値がありません。
Nir

1
私は埋め込まれた男です。製造/出荷されたプロセッサの約99%が組み込みシステム用であるというレポートをいくつか見ました(本当に必要な場合は、レポートに戻って引用することができます)。そうは言っても、すべてのプログラミングの 70%近くが組み込みシステムで行われることはないと確信しています。出荷されたすべてのプロセッサの50%のようなものは4ビットと8ビットですが、これらはおそらくすべてのプログラミングの0.1%(またはそれ以下)を占めています。デビッドが言ったように、「プログラミングの70%」を考え出す方法はたくさんあります。数が20〜25%だったとしても驚かないでしょう。
ラジアン

「統計で嘘をついている」ために+1。本当にそう、本当に本当…
ドナルフェローズ

8

フォローアップする事実はありませんが、OOPは主要なプログラミングモデルではありません。ビジュアルベーシックコースを受講したか、Excelでマクロプログラミングを行った人が開発した社内アプリをすべて想像してみてください。

多くのアプリケーションは、すべてのロジックが単一のクラスまたはビューに積み重ねられる命令型プログラミングを実行しています。これはおそらく、企業全体で実行される内部の単純なアプリケーションの大部分です。

それには何の問題もありません。同じ問題を解決する方法はいくつかあります。他のものよりも適しているものもあります。

また、指摘したように、OOPはすべてのシナリオに役立つわけではありません。他のモデルもあります。


そして、再び、支配的なモデルとして何を記述する必要があるのか​​という疑問があるかもしれません。「モデルXで開発されたアプリの量」ですか、それとも「モデルXで開発されたコードの量」ですか?いずれにせよ、私はまだOOPが支配的なモデルではないと考えています。
モーテン

1
+1 OOPは訓練された専門家とほぼどこにでもあるかもしれないが、世界中の業界はこれをまったく反映しておらず、多くのまっすぐな命令型コードが存在するという点を提言する。
10

5

OOPが主要なプログラミングモデルであるかどうかは関係ありません。異なるモデルを異なるケースに適合させるだけです。

特効薬はありません。

モティ・ベン・アリが議論しているのは学術的主張であり、すでに無意味です。しかし、彼は、OOPが「意味をなす」ことは一度もなかったと述べています。明らかに、何千人もの開発者やソフトウェアエンジニアがそうであり、多くのシステムで使用されています。

しかし、本当に私の答えのポイントはこれです、あるモデルまたは別のモデルが支配的であるかどうかを述べることは良いことです、それはそれを盲目的に使用するための良い根拠ですか?もちろん、そうではありません。


多くの人が1つのモデルを使用すると主張し、使用しない場合、それは問題です。質問は、見かけほど普及しているものであり、支配的/より良いということではありません。
ジェフ

4

これは実際、確実に答えるのが難しい質問です。最大の理由は、コードが私たちの建物を離れることのないカスタムの社内アプリケーションで働く私のような人々です。ここでオブジェクト指向を使用しますか?私は言っていません。他に何人のプログラマーが同様の仕事をしていますか?彼らは言っていない。求人サイトはありますが、すべての求人が掲載されているわけではありません。また、すべての求人が実際の求人向けではなく、リクルーターが名前のリストを収集しようとしています。

私が作業するオブジェクト指向を使用すると言ったとしても、それはリンクされた記事からの伝統的な定義を意味します:オブジェクト、クラス、継承?それとも、コードを整理する手段として主にオブジェクトを使用するということですか?それとも、実際にインターフェイスにプログラムし、継承をほとんど使用しないということですか?私はまだ言っていませんが、これらのどれが本当にオブジェクト指向としてカウントされますか?

上記の質問が回答されるまで、OOが有用かどうかを尋ねることは意味がありません。


2

もちろん、それは最新の流行語であるため、経営陣はそれを把握しています。また、命令型プログラミングよりも優れたカプセル化と抽象化を提供するため、oopから次に来るものへの飛躍には、oopが命令するよりもさらに時間がかかると思います。

PS2:アプローチを1つだけ選択/学習/使用する必要がある場合、それはOOPですか?どうして?

1つだけを学習する場合は、別のフィールドを選択する必要があります。

型とカプセル化、およびOOPのその他すべての利点について学習し、機能スタイルのプログラミングを使用してこれらの同じことを達成する方法を学習する必要があります。


1つのアプローチを学習する予定がある場合は、別のフィールドを選択する際のコメントに対して+1 それは非常識です。
マットナドロフスキー

1

OOPは間違いなく、実際の世界で最も支配的なプログラミングモデルの1つです。

デジタルハードウェアを設計する人々であるチップ設計者自身でさえ、SystemVerilogとSystemCのデュオに移行しています。これらはオブジェクト指向プログラミング言語です。

OOPはどこで使用されませんか?デバイスドライバーをコーディングしている場合、汎用プログラミングまたは多重継承が必要な理由を想像するのは困難です。または、AI関数型プログラミング手法を実行している場合、頭の中でずっと簡単になります。他にも多くの状況がありますが、OOPはoligo占的なプログラミングの世界では非常に強力な場所であると言えば十分です。


1

私はノーと言います。

「オブジェクト指向」言語を使用して書かれた膨大な量のコードがあることは理解していますが、一般的に、コードはクラスで手続き型にまとめられているだけです。(これは必ずしも悪いことではありません)。私が見たこれらの言語でよりオブジェクト指向になるように書かれたコードは、通常維持できないクラス間の依存関係の恐ろしい混乱である傾向があります。

OOは完全に自己完結型のオブジェクト間でメッセージを渡すことを想定しているため、今日のコードではそれよりもはるかに粒度の高いレベルで見ることができます。つまり、これらのオブジェクトはdllまたはアセンブリまたはCOMオブジェクトとして実装されています。「コンポーネント」と言われているのを聞いたことがあります。

したがって、OOが使用されているかどうかは本当に問題ではないと思います-コードがその寿命の間に維持可能で、設計された範囲で再利用可能で、開発が迅速であれば、気にしません純粋に手続き型または半オブジェクト指向または完全オブジェクト指向の場合。支配的なスタイルがこれらのいずれかであるかどうかを誰もあなたに伝えることはできないと思いますが、関数の代わりにクラスに切り刻まれたとしても、手続き型が最も一般的であると推測するのは危険です。


0

オブジェクト指向アプローチとオブジェクト指向パラダイムを使用して実装されたソリューションを適用することで得られるソリューションを差別化することが重要だと思います。優れたオブジェクト指向ソフトウェアについての私の意見は、両方のソリューションを組み合わせることです。オブジェクトを考え、オブジェクトの定義と相互作用を尊重し、この構造を使用するように問題を調整できる場合、柔軟で堅牢なコードが得られます。しかし、手続き型のパラダイムを使用してコードを解決するためにオブジェクトを使用する場合、Objectsの長所を活用しない厄介なミックスになります。

私は自分のコードがオブジェクト指向であることを本当に望んでおり、最初は良い構造を作成するのが少し面倒になるかもしれないことに気づきましたが、今日の柔軟性とクライアントのフラッシュ要件に対処するとき、それは価値があると思います努力。


0

正確な数字を知っているふりをしたり、大まかな推測をしたりするふりはしませんが、OOPを含まないプログラミングプロジェクトは数多くあります。私は産業用ロボットを使用しています。プログラムは、かなり単純で単純な手続き型コードである傾向があります。実際のロボットオペレーティングシステムはさらにそうです。

使用している「ツール」の多くはOOPベースですが、ロボットコントローラーではなくPC上で実行されます。これらには、エディター、シミュレーション、およびユーティリティが含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.