質問: 例えば、プログラムでファイルを読みたい時に、 Javaでしたら、FileReaderクラスにFileオブジェクトを与えて、Readerオブジェクトを作り、 Readerオブジェクトのread系のメソッドを使って、ファイルを読みます。 一方で、RubyでしたらFileオブジェクトにread系のメソッドが有るので、Readerオブジェクトを作ることなく、ファイルを読むことが出来ます。 上記の、2つのクラス設計の優劣、または理由をお聞きしたいです。
回答: javaとrubyの設計思想やその優劣というと詳しくないので知りませんが、 一般的に言えば 一般に抽象度を上げれば扱い易くなりそのぶん効率的(何をもって効率的とみるかで違うけれども)ではなくなる、と言えると思います。 例えば、 「ファイルを読む」ということから「読む」という役割・機能を分離し抽象化したとすると、 「読む」という機能は「読む」というレベル(レイヤー)でファイルにも使えるし、キーボードにも使えるでしょう。 「読む」というレベルで、同じことを同じように使えるというのが扱い易いということです。 逆に、キーボードからの文字の読込は、キーボード割り込みがあった時にポートからデータを読み込むというようなことをした方が直接的で速いのかもしれません。 「読む」というレベルでは、ポートを直接読むワケにはいかずそれまでに様々は層を挟み(インターフェース的に)制限された機能を(上位になればなるほど)使わなければならないので、「遅くなる」かもしれません。 (FileReaderクラスはReaderとしてのインターフェースを備えた特異クラスなのでしょうから、これが遅いと言っているわけではありません) あと、ファイルオブジェクトがどのような属性や機能を持つべきなのか? というのはそれぞれの思想方針によると思います。