ごとけんです

In message "[ruby-list:9016] あなたのウロコみせてください (Re: FAQ)"
    on 98/08/11, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

>まつもと ゆきひろです

>Subjectは「あなたのウロコみせてください」です.

えーっと、たぶん目から落ちたウロコなんてものは
レストランから帰って気がついたホッペのご飯つぶくらい
ミットモナイものだと思うのですが、目から落ちたと
明言した手前、ハズカシながらいくつか挙げてみます。

* self って何度も書かなくてもよい
* Smalltalk ほど極端じゃなくても OOPL は成立する
* メソッドは関数じゃない
* (C++の)テンプレートは良くない
* Array は Queue も Stack も Set も兼ねても良い
* OOPってのは継承するコトじゃない

なんか、 OOP に対するわたくし偏見歴と、数少ない
経験の羅列みたいなものですね。この中には、きっと
期待されたまつもとさん自身の盲点はナイでしょう。
しかも、自分ではウロコと思っているけど、案外、
落ちたのは安眠マスクとか逆に目玉だったりするかも
知れないです。とほほ

-- gotoken

# 以下解題 ^^;;

* self って何度も書かなくてもよい Ruby の前は Python 勉強してたんですが、何度も self と 書かなければならないのをみて、Smalltalk もそうだったし メッセージを送るって一般化すると、そういうことなんだろう と思ってました。 * Smalltalk ほど極端じゃなくても OOPL は成立する むかーし、Smalltalk を使ったときの印象は、結局、 本格的なオブジェクト指向ってなんか使いにくいって ゆー否定的なものでした。やっぱりオブジェクト指向と いうからには制御構造までオブジェクトじゃないと 駄目なんだなぁとか思ってたワケです。 # イヤ、あれはあれでカッコ良いんだけど、それはそれ ^^;; * メソッドは関数じゃない 普段研究で書くプログラムも OOPL にしようと思ったころ g++ も安定して来たらしいので g++ を使いはじめました。 んで、メソッドといっても要は関数じゃんと思いました。 これはきっと、 C++ では int や double のように 数値実験屋が毎日使うものが別扱いになっているコトの 影響です。つまるところどこかに原子みたいなものがあって その上に言語は成り立ってるんだから、底辺には関数と データで記述された世界があるのだろうと勝手に思ってました。 そうでなければ Smalltalk のよーな、ほんとに 全部オブジェクトな世界で、それは遠い世界だなぁと。 んが、Ruby が、全部オブジェクトな世界を違和感のない モデルで見せてくれたので安心しました。 * (C++の)テンプレートは良くない わたくし、C++ ではずっとテンプレート書きに終始してました。 積んでるメモリの大きさぎりぎりの計算をすることが多いので 壁に当ったらすぐに変数の型を切替えられるように、 とゆーのが主な理由です。 でも、階層が解りにくくなりがちでバグが見つけにくかったり、 結局思ったよりもコード量は減らなかったり、いろいろ面倒でした。 まぁ思うに、hard typing な言語だと仕方ないのかも知れません。 Ruby は変数に型がないのでそもそもテンプレートなんて 要らないわけですが。 # 一方 ruby は数値計算には遅すぎるわけで ^^; * Array は Queue も Stack も Set も兼ねても良い Ruby の Array って強すぎてなんだか嫌だったんですけど ちょっと前に Bag とか Sequential とかいったモジュールを ここで議論させてもらってたどり着いた結論は、 強くても簡潔になるならよいとゆーことです。 勉強する量も少なくて済むし。 やっぱり複雑さをいかに押えるかが言語設計の上で 重要なのだなぁとしみじみ思います。 # でも、ちょっとまだちょっと気になってる ^^;; * OOPってのは継承するコトじゃない これも誤解していたのですが、OOPとゆーと、なんか 即ちクラス階層の設計をすることだと思ってました。 もちろん、ある程度の大きさのモノを作るとなると そーゆー部分も大きいのだけど、例えば全然継承を 使わないよーな、しかもクラス定義すらしないような プログラムを ruby で書いているときだって自覚的に オブジェクトの視点で考える瞬間があります。 現在、わたくしオブジェクト指向プログラミングとは 「オブジェクトの立場で考えようとすること」です。 # こんなとき、客観指向とも読める Object 指向という # 名前はマズくて Subject 指向(主体指向)なのでわ!? # とさえ思います ^^;; 他の言語を使ってるときにそう気付いても良かったはず なんですが、たぶん ruby の GC や簡潔な文法などの おかげで要らんことに気を配らなくて済んだから 気がついたんでしょう。 これが、 ruby で落ちた一番でっかい鱗だと思っています。 # やっぱり書くんじゃなかったか…でも書いちゃったから # 出しちゃおうっと ^^; -- gotoken