• 締切済み

javaのString型で感じるオブジェクト指向の虚構と現実?

String型の参照先メモリ実体がどうなっているかに関連した質問がありましたが、これって確かにわかりにくいですよね。javaをCの派生言語の一種としてしか見ていない者にとっては自然なことですが... またこれはString型特有の問題ではありません。String型ではむしろたいした問題ではありません(string型は編集を目的としていない)が、NIOのByteBufferでは重要な問題となります。例えばByteBufferをduplicateした時、参照先のメモリ実体はduplicateされるの?参照しているメモリは他のByteBufferも参照しているの?性能のためにこのメモリを直接編集してもいいの?コピーが必要?この手の"浅い"/"深い"所有関係は必ず問題になります。String型はまだ色々な情報が得られますが、これがソースを公開していないどこかのライブラリが提供しているクラスの場合は? ここに”トンカチ”オブジェクト指向の問題点があると思います。いくらメモリ内容をコピーしようが一切気にしないのならオブジェクト指向は成立します。しかしそんなことはCS1以外ではありえません。現実の社会ではメモリ使用量や性能を考えて最適化を行う必要があります。このような中で”正しい”コーディングを行うためには、プログラマは実装を含めて正確に内部を把握している必要があります。でも隠蔽されているために明示的でなくなり更にわかりにくくなる。 だったら、明示的になっていたほうがわかりやすくないですか?明示的にメモリのアドレスを意識せざるを得なくするほうが正しくないですか?オブジェクト指向の目的が複雑性の縮減であるなら、隠蔽するのは意識する必要のないことに制限すべきで、意識しなければならないことは明示的に意識することを「強要」すべきであると思えてなりません。 正月早々変な質問で申し訳ないのですが、賛否両方のご意見をお待ちしております。

みんなの回答

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

言いたいことは何となくわかりますが、オブジェクト指向の概念と実装は基本的に別ものです。実装がよくないからと言ってオブジェクト指向を批判することにはつながりませんし、その逆も然りです。 質問者さんはメモリ周りを気にされていますが、Javaは基本的にメモリを意識させない言語仕様ですし、それを売りにしていると言ってもいいでしょう。JavaもCも所詮はプログラムを作るための手法に過ぎないのですからメモリを意識した造りの方が良いならCやC++などを使えば良いだけです。 ちなみに、このようなスレッドは@ITさんの会議室で起こすと面白い意見が出てくると思いますよ。

guccii
質問者

お礼

実際のところString型の実装がそんなによくないとは思っていません。私もこうせざるを得ないと思います。またjavaはオブジェクトの参照(つまりポインタ)を中心に扱いますから、enum型ですら実装やメモリ実体を意識しないと訳がわからない...と思いませんか? 例えば「放送サービスでチャンネルによって一部有料のものがあります。でもあなたはそんなこと一切気にする必要はありません。シームレスにアクセス可能で、あなたからは一切見えなくしてあります。でも中には高額の料金がかかる番組もありますからご注意ください。」みたいな感じなんでしょう?オブジェクト指向って。詐欺まがいのやり方を規制する強行規定や規範がなければ、かえって自由な商取引とその発達を阻害してしまう。信用取引なんか成立しようがない。オブジェクト指向って20年間そんな状態にあるとはおもいませんか? 意味不明な話で申し訳ありません。正月の余興と思って聞き流してください。 ありがとうございました。

関連するQ&A