From: gotoken@... (GOTO Kentaro) Date: 1999-02-11T04:36:27+09:00 Subject: [ruby-list:12001] how to make class? ごとけんです In message "[ruby-list:12000] how to make class?" on 99/02/11, "Kikutani, Makoto" 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