質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.91%

クラスを利用するメリット=オブジェクト指向を利用するメリット、と考えて大丈夫ですか?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 800

score 102

クラスを利用するメリット=オブジェクト指向を利用するメリット、と考えて大丈夫ですか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/09/30 17:10

    まず自身の見解を述べてください。アンケート的な内容は推奨されていません。タグに「オブジェクト思考」は必要に思います

    キャンセル

回答 2

checkベストアンサー

+4

少なくともJavaScriptでは違うと考えられます。

ご存じのようにJavaScriptはプロトタイプベースのオブジェクト指向を採用しています。そのため、ECMAScript5まではクラスはありませんでした。しかし、ECMAScript2015からクラス構文が追加され、内部構造はプロトタイプベースのままクラスベースとしてもコーディング可能になりました。

はじめに、「クラスを利用するメリット」と「オブジェクト指向を利用するメリット」が同等であると仮定しましょう。

ECMAScript5以前のJavaScriptもオブジェクト指向言語であったため「オブジェクト指向を利用するメリット」が利用できました。つまり、わざわざクラスを使用しなくても、「クラスを利用するメリット」と同等であるメリットを得られていたと言うことになります。

ECMAScript2015からクラス構文が追加されましたが、これによって「クラスを利用するメリット」も得られるようになりました。しかし、先ほど述べたとおり、このメリットECMAScript5以前でも既に得ていたメリットしかありません。なぜなら、メリットが同等(=で結ばれる)からです。つまり、クラス構文によって得られるメリットは一切無いと言うことになります。

文法の追加はバージョン間の互換性というデメリットが常につきまといます。特に、JavaScriptのような実行環境が複数存在する場合、実行環境の違いによる対応バージョンの違い、実装範囲の違いは致命的な動作の差異をうみ、環境に依存した不具合を誘発します。事実、ECMAScript2015で追加されたクラス構文についてInternet Explorer 11は未だに実装しておらず、そのまま使用すれば、Internet Explorer 11では動かないという役立たずなコードになってしまいます。これは大きなデメリットです。

これでは、クラス構文はメリットは一切無く、デメリットだけしかない事になります。果たして、このような構文をTC39は採用するのでしょうか?世界上のプロの中のプロの人達がこのような無意味なことをするとは考えられません。つまり、クラス構文には何らかのメリットがあると考えるべきです。

さて、クラス構文には、ECMAScript5以前のプロトタイプベースとしてしか書けなかった時にはなかった「追加されたメリット」があるとすると、今度は最初の仮定から矛盾が導かれます。この「追加されたメリット」はクラス構文を利用することによって得られるのだから「クラスを利用するメリット」に含まれています。しかし、「クラスを利用するメリット」は「オブジェクト指向を利用するメリット」と同一であるのだから、「追加されたメリット」は「オブジェクト指向を利用するメリット」にも含まれることになります。こうなると、ECMAScript5以前であっても、オブジェクト指向として利用すれば「追加されたメリット」がすでに得られていたことになります。「追加されたメリット」はECMAScript5以前から追加されたというメリットであるのですから、そもそもの定義が矛盾することになります。

ここから、ECMAScriptの仕様を策定しているTC39がメリットも判断できないほど機能していない状態でなければ、最初の仮定が間違っていると判断できます。あまり良くない作りの言語の中には、メリットが全くない機能が追加されることも確かにあるので絶対とは言い切れませんが、Microsoft、Mozilla、Google、Apple等優秀な開発者を持つ企業が参加しているTC39がそのような過ちを犯すとは非常に考えにくいです。よって、JavaScriptにおいては同等とは言えないと考えられます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

クラスを利用するメリット=オブジェクト指向を利用するメリット、と考えて大丈夫ですか?

違います。

Ioのような言語ではそもそもクラスとは無縁のオブジェクト指向を実現しています

もう少し馴染みのあるオブジェクト指向言語に絞るにしても、たとえばRubyやJavaのようにすべてをクラスとメソッド、式として書く流派と、Pythonのように無名関数などの定義を認める流派があります。後者の関数はオブジェクト指向の恩恵を受けていないか? というと別にそんなことはないのですが。


プログラム上のすべてのデータ、情報をオブジェクトないしインスタンスという単位で管理できることがメリットだと考えたほうがわかりやすい気がします。

そうするとすべての処理が属性へのアクセスやメソッド呼び出し等で表現されるので見通しがよくなるとか、GCの恩恵を受けられるとか、相応の恩恵が受けられます。

クラスはそのための手段だと思えば良いのではないでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る