ごとけんです

In message "[ruby-list:12000] how to make class?"
    on 99/02/11, "Kikutani, Makoto" <kikutani / sprintmail.com> writes:

>「rubyの匠な人々はどうやってクラスを作るんでしょうか?」

匠でなくて申し訳ありませんが,面白そうなんで,ぼくの場合(^^;;

>オブジェクト指向をたぶんまったく理解してない私はこうやる
>傾向があります。
>
>1 階層構造を持ったデータをツリー表示できるクラスが欲しいな

この例なら,とりあえず Array か Hash に何か加えてできそう
なんで,DelegateClass を使って,例えば
class Hierarchy < DelegateClass(Hash) 
としてHash でインスタンス変数が持てるようにします.
あとは traverse のしかたを横型というか指定した深さまでを
列挙する引数つきの each_upto(lev) とかメソッドなどを
追加しそうです.

>5 これのうち、ディレクトリというデータ構造に依存しない部分を
>  メソッド化したクラスを作ってみる

たいていは,上の段階で用が足りてしまうので終ってしまいます(^^;;
まぁ,おそらく「表示する」というのが,print 程度でいいのか,
curses ベースなのか,GUI なのか,印刷するのかで変わってくるので,
データの断片の切り取り方だけを抽象化すべくインターフェイスを
考えるでしょう.フォーマッタによって欲しい形式は違いそうだし.

# 深い階層を使うときは面倒なので HTML を吐くことを考えます.
# Lynx だと HTTP を使わずに疑似的に CGI を実現できるので.

>6 そのクラスのサブクラスを使ってプログラムを書き直してみる
>7 5と6をグルグルしているうちになんとかクラスができる
>8 でも他に応用するとまたクラスを変更したくなってくる

もし階層データなら,僕は手繰りやすい木構造の実装と,
出力を書きやすくするためのユーティリティを充実しそうです.

# 一般化しすぎてコケるというのが僕のハマりやすい傾向なので(^^;;

結局,僕は新しいものを考えるのが苦手なんで,知ってるものの
うちで一番なにに近いかを探します.

>というところでどうもダサい。昔で言うとこのボトムアップじゃん。
>こういうノウハウもruby本に載ってるのかもしれないけど。

そういう設計論は明文化して有効なことは少ないんではないか
と思います.僕は,いかに知ってるものを思い出せるかに
ポイントをおきます.そのためにはいろんなコードを読んだり,
典型的な「パターン」みたいなものを知らないといけないの
ですが,それは単に経験の問題なのではないかと思う次第です.

クラスの設計といっても,それはとっても広いハナシなので,
もっと目標が定まらないと考察は困難だと思うわけで…

# なんだかんだいっておきながら否定的ですみません.

-- gotoken