20218


例えば、プログラムでファイルを読みたい時に、  
Javaでしたら、FileReaderクラスにFileオブジェクトを与えて、Readerオブジェクトを作り、  
Readerオブジェクトのread系のメソッドを使って、ファイルを読みます。  
一方で、RubyでしたらFileオブジェクトにread系のメソッドが有るので、Readerオブジェクトを作ることなく、ファイルを読むことが出来ます。

上記の、２つのクラス設計の優劣、または理由をお聞きしたいです。


CC BY-SA 3.0
2015-12-20T10:20:37.717
20213
2016-01-09T12:38:58.963
2015-12-20T11:04:24.687
8000
13747
question
java ruby プログラミング言語
メソッドを所有するクラスの違いによる優劣、または理由


javaとrubyの設計思想やその優劣というと詳しくないので知りませんが、

一般的に言えば  
一般に抽象度を上げれば扱い易くなりそのぶん効率的（何をもって効率的とみるかで違うけれども）ではなくなる、と言えると思います。

例えば、  
「ファイルを読む」ということから「読む」という役割・機能を分離し抽象化したとすると、  
「読む」という機能は「読む」というレベル（レイヤー）でファイルにも使えるし、キーボードにも使えるでしょう。  
「読む」というレベルで、同じことを同じように使えるというのが扱い易いということです。  
逆に、キーボードからの文字の読込は、キーボード割り込みがあった時にポートからデータを読み込むというようなことをした方が直接的で速いのかもしれません。  
「読む」というレベルでは、ポートを直接読むワケにはいかずそれまでに様々は層を挟み(インターフェース的に)制限された機能を（上位になればなるほど）使わなければならないので、「遅くなる」かもしれません。

（FileReaderクラスはReaderとしてのインターフェースを備えた特異クラスなのでしょうから、これが遅いと言っているわけではありません）

あと、ファイルオブジェクトがどのような属性や機能を持つべきなのか？  
というのはそれぞれの思想方針によると思います。


CC BY-SA 3.0
2015-12-20T11:55:41.783
20218
2015-12-20T11:55:41.783
5044
20213
answer


> 例えば、プログラムでファイルを読みたい時

とあるので、単純に言語ごとの思想に興味がおありなのだと考えました。

参考までに紹介しますと、Rubyがどのような思想、発想で作られたかなど他の言語との比較を交えて下記の本がわかりやすかったです。

  * [Amazon.co.jp: まつもとゆきひろ コードの世界 電子書籍: まつもとゆきひろ: 本](http://www.amazon.co.jp/%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D%E3%80%80%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E4%B8%96%E7%95%8C-%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D-ebook/dp/B00HZGBI76/ref=sr_1_1?s=books&ie=UTF8&qid=1450619360&sr=1-1&keywords=%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D)


CC BY-SA 3.0
2015-12-20T13:52:28.177
20222
2015-12-20T13:52:28.177
9008
20213
answer


Rubyは大クラス主義の言語です。つまり、１つのクラスでなんでも出来ます。  
一方、Javaは単一責任原則という主義を持った言語です。つまり、１つのクラスには１つの責務をもたせるといった考え方です。  
例えばRubyのArrayにはpop/shift/unshift等のメソッドがあり、Arrayをキューやスタックとして使えます。しかし、JavaではQueueクラスやStackクラス等に分かれています。

ですから、Javaでは細かくFileクラス FileReaderクラス Readerクラスに分けられており、  
Rubyでは、Fileクラスのみで要件を満たすといったところに思想の違いが生じます。

Javaは冗長とよく言われ、Rubyはシンプルと言われており確かにそのとおりだと思いますが、大きいアプリケーションになってくると、Javaのような少し堅めの言語の方がバグを発見しやすくなったり、逆に可読性が増したりするので重宝されたりすると聞いたことがあります。(単純に動的型付け言語と相性が合わないという人もいます。)

[コーディングを支える技術](http://www.amazon.co.jp/%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93-~%E6%88%90%E3%82%8A%E7%AB%8B%E3%81%A1%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E4%BD%9C%E6%B3%95-WEB-
PRESS-plus/dp/477415654X)

この本は多くのプログラミング言語の成り立ちや、概念などを深く理解する事ができる良著だと思います。プログラミングに対する理解を深めてくれる本だと思いますので、是非読んでみてください。


CC BY-SA 3.0
2016-01-09T11:38:05.840
20782
2016-01-09T12:38:58.963
2016-01-09T12:38:58.963
12758
12758
20213
answer