クラスを利用するメリット=オブジェクト指向を利用するメリット、と考えて大丈夫ですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア21735
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
クラスを利用するメリット=オブジェクト指向を利用するメリット、と考えて大丈夫ですか?
違います。
Ioのような言語ではそもそもクラスとは無縁のオブジェクト指向を実現しています
もう少し馴染みのあるオブジェクト指向言語に絞るにしても、たとえばRubyやJavaのようにすべてをクラスとメソッド、式として書く流派と、Pythonのように無名関数などの定義を認める流派があります。後者の関数はオブジェクト指向の恩恵を受けていないか? というと別にそんなことはないのですが。
プログラム上のすべてのデータ、情報をオブジェクトないしインスタンスという単位で管理できることがメリットだと考えたほうがわかりやすい気がします。
そうするとすべての処理が属性へのアクセスやメソッド呼び出し等で表現されるので見通しがよくなるとか、GCの恩恵を受けられるとか、相応の恩恵が受けられます。
クラスはそのための手段だと思えば良いのではないでしょうか。
投稿2018/09/30 09:08
編集2018/09/30 09:24総合スコア30933
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。