web-dev-qa-db-ja.com

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

私はゲームプログラミングの学位を取得するのが一番です。これはコンピュータサイエンスの学位ではないので、理論の多くは、実用的なポートフォリオの構築と、ゲーム業界では明らかにより重要であるJIT学習と私が考えるものを支持して避けられています。最初の主題は「オブジェクト指向プログラミング入門」でした。

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

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

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

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

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

プログラミングでオブジェクトを使用するときに私たちが何をするかを説明するのに十分ではないフレーズとしてのオブジェクトプログラミングの原因は何ですか?

私の口調から明らかなように、「志向」という言葉はあまり好きではありません。法廷記者としての時間を思い出し、弁護士が「に関連して」という言葉を一種の言葉の目盛りとして使用した後、弁護士に耳を傾けます。それは何の意味もありませんでした。彼らが次に何を言うべきか考えようとする間、彼らが空気を満たしていたのは単なる言葉でした。しかし、私は言語の変更を主張しようとしているのではなく、なぜそれがそうであるのかを尋ねているだけです。それが純粋に歴史的で痕跡的な理由でそのようにして知られるようになった理由を誰かが知っているなら、それが答えです。言語の変更を主張する時間を無駄にしようと決心した場合、それは弾薬になります。

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

14
Excrubulent

私はあなたがwayを読みすぎて、単純な文法構成になっていると思います。パラダイムのリストを見てください。間もなく別の理由でソートされます。

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

すべての単語に共通するものは何ですか?これらはすべて、Wordの「プログラミング」を変更することを目的としているため、形容詞です。さらに、「命令型」を除いて、それらはすべて「自然な」形容詞ではなく、「形容詞化された」名詞-関数、構造、オートマトン、およびオブジェクトのパラダイムのコアを実際に説明する名詞です。

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

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

24

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

率直に言って、それは歴史の引き継ぎです。関数型プログラミングは本当に関数指向プログラミングであり、宣言型プログラミングは本当に宣言指向プログラミングです...結局のところ、関数だけを使用しないのですか?機能しかないのでは?

「オブジェクト指向」は、舌からうまく転がり、歴史的に根付いています。

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

18
Telastyn

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

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

実際に「オブジェクト指向の方法」を実行することは、「手続き型の方法」とは大きく異なります。最も重要な概念は、継承と多態性の使用です。クラスと仮想メソッドの動作を本当に理解し、内部化すると、多くの場合にコードの記述方法を変える目を見張るような経験になります、真のパラダイムシフト。 (もちろん、最初に手続き型コードを書き始めたと仮定します。最近の多くの学生は、最初の言語としてJavaまたはC#に直接アクセスし、IMOは、 OO)の利点

OOスタイルで記述されたプログラムにはオブジェクトだけが含まれるのではなく、プログラム全体の構造はオブジェクトとその動作方法に基づいているため、これをオブジェクト指向プログラミングと呼びます。

2
Mason Wheeler