[#44431] コンストラクタの引数について&インスタンス変数の持ち方について — Akira Hayakawa <ruby@...>

度々オブジェクト指向についての質問ですいません。

17 messages 2008/01/04
[#44433] Re: コンストラクタの引数について&インスタンス変数の持ち方について — Yukihiro Matsumoto <matz@...> 2008/01/04

まつもと ゆきひろです

[#44469] pdf 作成 ライブラリ — "Luiz Aoki" <luizruby@...>

はじめまして、青木ルイスと申します、

14 messages 2008/01/12
[#44479] ファイル出力時のprintについて — m-hatake@... 2008/01/16

畠山と申します。

[#44483] format %g の丸めについて — 山崎雄介 <y-yamasaki@...>

山崎(ゆ)です。

14 messages 2008/01/16

[ruby-list:44442] Re: コンストラクタの引数について&インスタンス変数の持ち方について

From: Akira Hayakawa <ruby@...>
Date: 2008-01-05 09:26:44 UTC
List: ruby-list #44442
さっき考えたのですが、
例えばPCを考えます。
PCは外から見ると、ディスプレイと箱とキーボードくらいしかありません。
でも箱の中にはCPUやメモリもありますし、ファンもありますしとたくさんあります。
ぼくの考えからいうと、
PCは

def initialize(display, box, keyboard)

となるべきです。
keyboardなどは何を使ってもオブジェクト指向的には意味がないように思いますが、
boxは特に何が入っているかによって性能がずいぶん違います。
boxは入ってきた情報を処理するメソッドも持っています。
例えば1+1と入れると2としてdisplayに表示してくれます。
それらはCPUの性能やメモリの大きさで性能が決まります。

Box
def initialize(cpu, memory)

そこで考えたのですが、
今、CPUを変えたところで、同じ動作をしてもらわなければ困ります。
CPU1をCPU2に変えたら1+1が3になりましたというのは話になりません。
CPUがなんであろうと、同じような動作をしてくれればいいわけで、
boxの中身は気にならないはずです。
例えば、時代が変わって、BoxがCPUとメモリによって構成されなくなったとします。
どういう風になったかは知りませんが、
例えばなんかの液体を使って処理するようになったとします。
PCとしては、
箱を付け替えたとしても、
boxにはいつもと同じ動作をしてくれればいいだけで、
コンストラクタを変えるのは嫌です。
そんな事PC全体としては知った事ではないはずです。
WindowsのパソコンかLinuxのパソコンかをkeyboardやdisplayも巻き込んで議論すべきではないと思います。
つまりなんというか、引数の価値は同じにすべきだと思うのです。

結局、パソコン本体としては、
この白い箱が何をしているかなど興味があることではなく、
1+1を2と計算してくれるものであれば問題ないわけで、

たぶんまつもとゆきひろさんは、
「Bが未来永劫wheel_sizeしか外に見せないと確信があれば、
後者の方がデータ隠蔽の度合が高いので望ましい」
という文章でこんな事を意味していたのではないかと思います。

そのコンストラクタが構成されている要素の要素まで引数にとる必要はないのではないでしょうか?
また、もし「そうしなければならない」という風にすると、2段3段とコンポジッションする場合に、
一番上のクラスの引数が膨れ上がります。
これはあまりにも美しくないし、使い勝手も悪くなります。(10段下に持たれているクラスの事なんか考えたくもないはずです)

車やさんとしては、タイヤやさんがどういう製法で作ろうが、どんな形をしてようが、
とりあえずタイヤとして機能するものであればなんでもいい。
だからタイヤのインスタンスを引数をとるべきではないのですか?

重複っぽいですが。
もし、
間違っているのであれば、
あるいは「場合による」
という事であれば、
もっと決定的な反例が欲しいです。
-- 
Akira Hayakawa <ruby@i-mail.jp>

In This Thread