web-dev-qa-db-ja.com

OOPは現実世界の主要なプログラミングモデルですか?

Objects Never?まあ、ほとんどない

Communications of the ACMのVIEWPOINTセクションで、「 Objects Never?Well、Hardly Ever 」というタイトルの興味深い記事を見つけました。これは、オブジェクト優先、オブジェクト後期とは根本的に異なる視点です。彼は「オブジェクトは決して」または多分「オブジェクト大学院」を提案します。

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

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

私は、OOPの使用は、ほとんどの人が信じているほど一般的ではなく、支持者が主張するほどうまくいっていないため、CSカリキュラムの中心的な場所は正当化された。

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

1つの方法のみを選択/学習/使用する必要がある場合、それはOOPであるかどうかですか?なぜですか?

20
Ehsan

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

実用的なプログラミングに興味がある場合は、ACMなどの議事録を最後に読んでください。これらは多くの場合、[疑似]科学的な出版物であり、実際には適用されていません。これらは、作家が群衆から自分自身を差別化し、自分の人を宣伝するために、宣伝のために作られた非常にしばしば正統でない意見です。

私は、OOPの使用は、ほとんどの人が信じているほど一般的ではなく、支持者が主張するほど成功していません。したがって、CSカリキュラムの中心的な場所は、正当化された。

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

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

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

追伸何が支配的で何が支配的でないのかをなぜ気にするのですか?手元のプロジェクトに適したものを選び、その数を「研究者」に任せてください。

19
user8685

OOPがonlyパラダイムであるとしたら、もっと学ぶべきかもしれません。しかし、OOPは実際にはどういう意味ですか?平均JavaまたはC++?Smalltalkを意味する?設定可能な値スロットとクロージャを意味する?(Hi、Scheme!)メッセージ送信を意味する?(Hi、Erlang!)

要するに、質問するのは面白くない質問のようです。 「OO 便利?」の方が良い質問です。そして、まあ、そうです(確かに私にとってはそうです)。

17
Frank Shearar

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

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

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

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

(ところで、私は現代のモバイル開発組み込みプログラミングを考慮していません。結局、モバイル開発はOOです。結局Appleは* Objective * Cを使用してiPhone用に開発することを強制します)

9
Nir

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

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

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

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

8
Morten

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

特効薬はありません。

Moti Ben Ariが主張しているのは、すでに無意味な学問的な主張です。ただし、OOPは「理にかなっている」とは決して言えないことを明らかにし、何千人もの開発者やソフトウェアエンジニアにとっては明らかに、多くのシステムで使用されています...

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

5
ocodo

これは実際に確実に答えるのが難しい質問です。最大の理由は、コードが私たちの建物を離れることがない、カスタムの社内アプリケーションで作業する私のような人々です。 OOここで使用しますか?私は言っていません。他に何人のプログラマーが同じような仕事をしていますか?彼らは言っていません。私たちは仕事サイトを持っていますが、すべての仕事が投稿されているわけではありません。名前のリストを集めようとする採用担当者とは対照的に、すべての投稿が実際の仕事であるわけではありません。

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

OOが有用であるかどうかを尋ねるのは、上記の質問が答えられるまで、さらには支配的であるまでも意味がありません。

4
Larry Coleman

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

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

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

タイプとカプセル化、およびOOPの他のすべての利点について学び、関数型のプログラミングを使用して同じことを実現する方法を学ぶ必要があります。

2
Josh

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

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

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

1
Fanatic23

私はノーだと思います。

「オブジェクト指向」言語を使用して記述された膨大な量のコードが世の中にあることは理解していますが、通常、コードは手続き型のクラスにラップされているだけです。 (これは必ずしも悪いことではありません)。これらの言語でより多くのOOであるように書かれているのを私が見たコードは、通常はメンテナンスできないクラス間の依存関係のひどい混乱になりがちです。

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

したがって、OOが使用されているかどうかは問題ではないと思います-コードがその寿命の間に維持可能で、設計された範囲で再利用可能であり、迅速である場合開発する場合、それが純粋に手続き型またはセミオブジェクト指向であるか、完全にOOであるかは問題ではありません。主なスタイルがこれらのいずれかであるかどうかは誰にも教えられないと思いますが、関数ではなくクラスに分割されたとしても、手続き型のスタイルが最も一般的です。

1
gbjbaanb

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

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

0
guiman

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

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

0
Jim C