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

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

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

255閲覧

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

k0908

総合スコア102

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2018/09/30 04:05

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/30 08:10

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

回答2

0

ベストアンサー

少なくとも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においては同等とは言えないと考えられます。

投稿2018/09/30 08:11

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

違います。

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

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


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

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

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

投稿2018/09/30 09:08

編集2018/09/30 09:24
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問