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