オブジェクト指向プログラミング:なぜ「指向」なのか?


14

私はゲームプログラミングの学位を取得しました。これはコンピューターサイエンスの学位ではないので、理論の多くは実用的なポートフォリオの構築と、ゲーム業界で明らかに重要なJIT学習と思われるものを優先します。最初の主題は「オブジェクト指向プログラミングの紹介」でした。

さまざまなプログラミングパラダイムについて学ぶまで、そのフレーズは気にしませんでした(https://en.wikipedia.org/wiki/Comparison_of_programming_paradigmsからこのリストを取得しています)。

  • 命令的
  • 機能的
  • 手続き型
  • 構造化
  • イベント駆動
  • オブジェクト指向
  • 宣言的
  • オートマトンベース

これは完全なリストではなく、これらの概念のすべてが同等ではなく、それらのほとんどが排他的でもないことがわかりますが、なぜそれらのほとんどが1つの単語だけを必要とするのか理解できません。機能的; 宣言的-しかし、オブジェクトを使ったプログラミングについて話すときは、それらのオブジェクトを中心に指向していることを明確にする必要があります。オブジェクトだけを使用することはできませんか?ただオブジェクトを持てないのですか?なぜ彼らは私たちをガイド星として方向づけなければならないのですか?

ここ(https://en.wikipedia.org/wiki/Object-oriented_programming)を見ると、独自の用語として「指向」という用語が使用されています。「オブジェクト」のみが説明されています。

また、イベントドリブンが使用されている実用的な理由を見ることができます。なぜなら、イベントプログラミングは既に会議を行っているときに行うことであり、オートマタプログラミングは、ロボット生産ラインをセットアップしているように聞こえるからです。そのため、そこに追加の明確な単語があると役立ちます。

オブジェクトプログラミングをフレーズとして、プログラミングでオブジェクトを使用するときの動作を説明するのに十分ではないのはなぜですか?

私の口調から、明らかに「指向」という言葉はあまり好きではありません。弁護士が一種の口頭ダニとして「に関連して」というフレーズを使用した後、弁護士に耳を傾け、法廷記者としての時間を思い出させます。それは何の意味もありませんでした。彼らが次に何を言いたいかを考えている間に、彼らがかつて空気を満たしていた用語でした。しかし、私は言語の変更を提唱しようとはしていません。なぜそうなっているのかを尋ねているだけです。純粋に歴史的、痕跡的な理由でそのように知られるようになった理由を誰かが知っていれば、それが答えです。言語の変更を提唱することに時間を浪費することにした場合、それは弾薬になります。

一方、ツールツールベルトに単にそれらを持たせるのではなく、他のすべての方向を除外して、言語やコードがオブジェクトを指す必要がある理由が実際にある場合、私は本当にそれについて学ぶことに興味があります。役に立つことを学ぶのが好きです。


11
「客観的に」または「客観的」は本当に何を意味するのか正しい印象を与えないだろうと思う;
Doc Brown

私は「Objectified」を検討しましたが、それは間違った雰囲気を放つかもしれないと決めました。
わいせつな


1
「オブジェクト」は間違いであり、「指向」ではないと思います。私たちがオブジェクト指向と呼ぶものは、通常クラス指向です。
Steve314

1
フェニックス・ライトのファンは、単に「OBJECTION !! Programming」と呼びたいですか?
Katana314

回答:


24

私はあなたが読んでいると考えている方法を、簡単な文法的な構築物にすぎ。パラダイムのリストを見てみましょう。これについては、後ほど説明しますが、理由はさまざまです。

  • 命令的
  • 機能的
  • 手続き型
  • 構造化
  • 宣言的
  • イベント駆動
  • オートマトンベース
  • オブジェクト指向

すべての言葉には共通点がありますか?「プログラミング」という言葉を変更することを目的としているため、それらはすべて形容詞です。さらに、「命令型」を除いて、それらはすべて「自然な」形容詞ではなく、「形容詞」名詞-実際にパラダイムの核心を記述する名詞:機能、構造、オートマトン、およびオブジェクトです。

また、名詞の形容詞には、-alや-edのような接尾辞を使用する方法と、ハイフンを使用して複合語を作成する方法の2種類があります。現在、Doc Brownが指摘しているように、「オブジェクト」を形容するために使用できるサフィックスは異なる意味になります。構成を残します。

そして、アラン・ケイが彼の複合形容詞「オブジェクト指向」に「指向」を使用することを選んだのは、純粋な偶然の一致または趣味であると私は提出します。同様に「オブジェクト駆動型」または「オブジェクトベース」である可能性があり、それらについても読みすぎている可能性があります。「駆動」は、ある種の不健康な強迫観念のように聞こえませんか?


1
優れた点(副詞ではなく形容詞を意味すると思いますが、この文脈での「プログラミング」は名詞です)。
JW01

@ JW01:おっと、あなたの言うとおりです
マイケル・ボルグ

これは実際には非常に良い点です-「指向」という言葉は「オブジェクトプログラミング」とは異なる意味をフレーズに与えます。「オブジェクト」という言葉自体は形容詞ではないからです。実際、「指向」が他の言葉よりも選ばれた理由は、連合のためであったと思います。また、私はそれを何も読んでいませんでした、私は文学で完全に説明されておらず疑問の余地のない「指向」という言葉があることを強調するために誇張していました。 。:P
Excrubulent

なぜ彼がオブジェクトに夢中になったのか不思議に思う...ああそう、それらはいつ停止するのかわからない熱狂者だけです。;-)
デュプリケータ

「Symfonia C ++」(「C ++のシンフォニー」)と呼ばれるポーランドの作家JerzyGręboszによる本が1つあります。これは、コードが現在動作しているオブジェクトに応じて「自己指向」できるという事実のためです(ポリモーフィックな動作)。彼はこれを、データとしての「オブジェクト」という単なる概念がある言語と区別しています。これが元の意味であったという歴史的な証拠はありませんが、事後の説明としても非常に説明的です。
バーバラクワーク

18

しかし、オブジェクトを使ったプログラミングについて話すときは、それらのオブジェクトを中心に指向していることを明確にする必要があります。オブジェクトだけを使用することはできませんか?ただオブジェクトを持てないのですか?

率直に言って、それは歴史の持ち越しです。関数型プログラミングは本当に関数指向プログラミングであり、宣言型プログラミングは本当に宣言指向プログラミングです...結局、関数を使用するだけではないのですか?関数だけではいけないのですか?

「オブジェクト指向」は舌からより良く転がり落ち、歴史的に染み込んでいます。

「オリエンテーション」は、プログラミングではなくデザインについて話しているからです。オブジェクトを使用したり、関数を使用したり、イベントを使用したりするからといって、3つすべてをモデル化することで設計手法を実行するわけではありません。設計方法論の方向を指定することにより、プログラマーがその設計をどのように解釈および拡張するか、つまりモデリングの焦点が実装をどのように色付けするかをプログラマーに伝えるのに役立ちます。


つまり、「オブジェクト指向」は冗長なフレージングを伴う一種のポリシーステートメントであると言っているように聞こえます。リスナーがその意味を見逃さないようにしてください。
わいせつな

1
私たちはオブジェクト指向設計を行っているので、言語がオブジェクト指向である理由はこの設計を表現できるようにするためです。
K.ステフ

1
@Excrubulentいいえ、「指向」を追加すると、より具体的になります。「オブジェクト指向」とは、オブジェクトのプログラミングに関する詳細について議論するのではなく、意味のある方法でオブジェクトを使用するようにプログラムを設計する方法について議論することを意味します。「オブジェクトプログラミング」、「関数プログラミング」、または「宣言プログラミング」とは、設計原則ではなく、特定の概念の実装について具体的に話すことを指します。「機能的」および「宣言的」は、同じ意味を伝えようとする接尾辞の付いた単語ですが、オブジェクトの場合、「目的」または「目的」はあまり意味がありません。
イラリKajaste

そして、マイケル・ボルグワードが答えたように、「指向」という言葉は決して特別なものではありません。同様に「駆動」または「ベース」にすることもできます。重要な点は、「オブジェクトプログラミング」ではないということです。(まあ、ラガンジは常に流動的ですので、そうすることもできますが、それ説明的なものではありません。)
Ilari Kajaste

Michael Borgwardtの回答が実際に単語の意味とフレーズをどのように変更するかを説明しているため、回答を切り替えました。
わいせつな

2

オブジェクトを呼び出すことは、オブジェクトがパラダイムの非常に重要な部分であることを説明するのに役立ちます。

オブジェクト指向プログラミングのルーツはSimulaにあり、これは基本的にALGOLといくつかの新しいオブジェクトプログラミング機能でした。そして、その歴史に沿って、今日でも、多くの言語(「純粋なOO言語」でさえ)で、本質的にいくつかのオブジェクトを含む手続き型プログラムである何かをコーディングすることは完全に可能です。しかし、これは経験豊富な開発者によって悪いスタイルと見なされます。

実際に何か「オブジェクト指向の方法」を行うことは、「手続き型の方法」とは非常に異なります。最も重要な概念は、継承とポリモーフィズムの使用です。クラスと仮想メソッドの動作方法を真に理解し、内部化すると、多くの場合にコードの記述方法を変更する目を見張るような体験であり、真のパラダイムシフトです。(もちろん、手続き型コードを最初に書くことから始めたと仮定します。最近では、多くの学生が第一言語としてJavaまたはC#に直行します。

オブジェクト指向プログラミングと呼ぶのは、オブジェクト指向スタイルで書かれたプログラムにはオブジェクトが含まれているだけではないからです。プログラム全体の構造は、それらとその動作方法に基づいています。


これはTelastynの答えと似ていますが、用語としての「オブジェクト指向プログラミング」は実際には「オブジェクトプログラミング」と根本的に異なることを暗示しているようです。それらがどのように異なるかを説明できますか?つまり、OOPは、OPが同じ機能を果たすのに十分なほど緩やかな用語であるように思えます。
異常な

2
最近の多くの学生は、第一言語としてJavaまたはC#に直行しますが、IMOを使用すると、OOの利点を実際に理解することができません。-実際、私はC ++で始め、最初の割り当てではオブジェクトと関数の混合を使用しましたが、関数の使用のためにマークダウンされました。これらの関数の一部は純粋に機能的であり、オブジェクトへのカプセル化からまったく恩恵を受けませんでしたが、機能するために変数へのポインターを使用したもの(つまり、変更された状態情報)オブジェクトで、私はそれの両側を見てきました。
わいせつな
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.