Thu, Feb 11, 1999 at 04:32:47PM +0900 において Yukihiro Matsumoto さん曰く: > で,わたしが使うもうひとつの方法は,以下のようなものです. > > 与えられた問題を解決するプロジェクトチームを組織することを考 > えます.たとえば,ディレクトリから情報を取り出す係,画面に表 > 示する係,etc.で,この係がオブジェクト候補になります.係の > 中にはふたたびプロジェクトチームで構成され,複数の係に分割さ > れるものもあります.このようにして抽出された「係」の果たすべ > き仕事を考える時,あるものは既存のクラス(たとえば文字列や配 > 列など)でカバーされるでしょうし,別のものは専用のクラスを作 > る必要があるでしょう. > > クラスを作るもののうち,共通項をまとめられるものはその部分を > スーパークラスにします. ふむふむ、わかりやすいですね。 たぶん「共通項をまとめられるものはその部分をスーパークラスにする」 というところで匠と丁稚(でっち)の違いが出てくる気がします。これは ごとけんさんのおっしゃるとおり、良いコードを読んで修行を積むしか ないんだろうな。どうも私は人のコード読まずに好きに書いちまうので だめですね。 最初に挙げたディレクトリ表示の例で言うと、uncollapseメソッドと collapseメソッドを書きました。uncollpaseはディレクトリの下を 一階層だけ展開するもので、collapseはそれを元に戻すものです。 collapseのほうは、ディレクトリというデータに依存してないので そのままスーパークラスにしました。uncollapseのほうは def uncollapse そのディレクトリの下を読んでファイル名を加えて行く部分 表示のための罫線を表示するための情報を処理 end となってました。実際に罫線とかファイル名を書く係は別にいます。 当然今のuncollapseのうち、罫線情報の部分はスーパークラスに 入れます。問題はディレクトリを直に扱う部分で、最初 Proc とか イテレータブロックで渡せればかっこいいなと思ってたんですが どうにもやりかたがわからないのです。結局スーパークラスでは ここは空のメソッドを呼んどいて、サブクラスのほうで実体を 定義しろということにしました。うーむ、継承猿。 # ちなみにslang拡張モジュールの一部を書いてます -- 人生を背負い投げ 菊谷 誠(Kikutani Makoto) kikutani / sprintmail.com